gams-math - 我怎样才能制作这个套装?
问题描述
设 s 为场景索引,j 为网络节点索引。(s={1*200} , j={1*100}) d(s,j)= 污染场景 s 的总影响,如果污染物是第一个在 j 的场景中检测到。W(s) = d(s,j)<>0 的网络节点子集。W'(s)= W(s) 的子集,使得 d(s,j)<>d(s,j') ,对于所有 j,j' 属于 W'(s)。
如何制作子集 W'(s)?
我收到以下代码错误!我的尝试:
Set
i /1*100/
s/1*200/
;
Alias (i,j);
set
Node(j)
Wp(Node)
same(Node)
U(Node)
;
Parameter d(s,j);
scalar t,posMin;
$call GDXXRW.exe data.xlsx par=d rng=sheet2!A1:X200
$GDXIN data.gdx
$LOAD d
$GDXIN
Loop(s,
Node(j)=(j.val);
while(Card(Node)<>0,
t=smin(Node$(d(s,Node)),d(s,Node));
same(Node)$(d(s,Node)=t)=yes;
posMin=smin(Node,same(Node));
display t,same, posMin;
Wp(Node)=Wp(Node)+( Node$(Node.val=posMin));
display Wp;
same(Node)$(Node.val=posMin)=no;
u(Node)=same(Node);
Node=Node-U;
);
);
解决方案
如果我正确理解了您的问题和数据类型,这样的事情会起作用吗?:
Given some data:
set s / 1*5 /,
j / 1*3 /;
alias(j,i);
table d(s,j)
1 2 3
1 0 20 20
2 0 0 20
3 10 20 30
4 0 0 0
5 0 20 30
;
集合 W 是 s 的子集,仅包含非零行:
set W(s);
W(s) = yes$sum(j, d(s,j));
display W;
集合 Wp 是 W(s) 的子集,包含 W 的元素减去 j 上的非零重复元素:
set Wp(s);
Wp(s) = yes$W(s);
loop((W(s),i,j),
if(((d(s,i) eq d(s,j)) and (d(s,i) ne 0) and (ord(i) ne ord(j))),
Wp(W) = no;
));
display Wp;
对我来说,这使得:
s={1,2,3,4,5}
W={1,2,3,5}
Wp={2,3,5}
** 编辑(来自评论)**
创建一个集合 Q。如果您的数据超过两个维度,并且您希望您的集合在两个维度上定义,这就足够了:
set Q(s,j);
Q(s,j) = yes$d(s,j);
display Q;
为每个 s(在 Q 中)创建跨 j 存储最小值的参数:
parameter xp(s);
xp(s) = smin(j$Q(s,j), d(s,j));
display xp;
创建仅保留 j 中最小值的原始数据副本:
parameter d_copy(s,j);
d_copy(s,j) = d(s,j)$(d(s,j) eq xp(s));
随着 j 的增加,删除所有重复项:
loop((s,i,j),
if((d_copy(s,j) eq d(s,i))$(ord(j) gt ord(i)),
d_copy(s,j) = 0;
);
);
display d_copy;
创建对应于最小值的 Q 子集:
set Qp(s,j);
Qp(Q) = yes$d_copy(Q);
display Qp;
推荐阅读
- spring-boot - 从开放跟踪措施生成统计数据
- php - 如果数组键与正则表达式模式不匹配,如何深度重命名它们
- python - 如何在 Python 中增加 MySQL 检索的日期时间
- r - 截距消失在面板回归中添加与虚拟变量和因子变量的交互项
- javascript - 需要一个 ng-pattern 的正则表达式,它应该是浮点数并且总是大于 0 但不应该允许 0
- docker - Kubernetes Manifest 文件不会从 YML 转换为 JSON
- php - 如何修复 Laravel 5.8 中 twillio API SMS 验证中的客户端错误?
- r - 如何比较由另一列分割的两个数据框中的列并标记重复条目?
- drupal-7 - 批量完成消息未显示
- spark-structured-streaming - 在 Spark Structured Streaming JAVA 中合并两个具有不同列的数据集