Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在GAMS中创建宏/循环_Loops_Macros_Gams Math - Fatal编程技术网

Loops 在GAMS中创建宏/循环

Loops 在GAMS中创建宏/循环,loops,macros,gams-math,Loops,Macros,Gams Math,在GAMS中考虑以下集合和参数: set i / 1,3 / j / j1,j2,j3 /; parameter stock(i,j); 考虑我想在参数中输入一个特定值: stock("1","j1") = 10; stock("3","j3") = 10; 我可以使用宏$setGlobal、loop(或类似的)来代替将其写在两行中,首先(1)指定它应该为哪个集合执行操作,然后(2)仅将等式写在一行

在GAMS中考虑以下集合和参数:

set i  / 1,3 /
    j  / j1,j2,j3 /;

parameter stock(i,j);
考虑我想在参数中输入一个特定值:

stock("1","j1") = 10;
stock("3","j3") = 10;
我可以使用宏$setGlobal、loop(或类似的)来代替将其写在两行中,首先(1)指定它应该为哪个集合执行操作,然后(2)仅将等式写在一行中吗

我可以创建一个子集:

set subset_i(i) / 1,3/
    subset_j(j) / j1,j3 /;
然后循环遍历这些子集:

loop(subset_i,
   loop(subset_j,
      stock(i,j) = 10;
   );
);
然后我得到每个组合的值:

1   j1  10
1   j2  10
1   j3  10
3   j1  10
3   j2  10
3   j3  10
我只想:

1   j1  10
3   j3  10

怎么做?

这正是您要设置的对角线(1-j1;2-j2)?或者这只是一个随机的例子,映射也可能是另一个?如果是对角线,可以这样做:

set i  / 1,2 /
    j  / j1,j2 /;

parameter stock(i,j);

stock(i,j)$(ord(i)=ord(j)) = 10;

display stock;
set i        / 1,  3      /
    j        / j1, j2, j3 /
    map(i,j) / 1.j1, 3.j3 /;

parameter stock(i,j);

stock(map(i,j)) = 10;

display stock;
编辑(基于评论/编辑的问题):

如果不只是关于对角线,还可以显式定义更一般的映射。可以这样做:

set i  / 1,2 /
    j  / j1,j2 /;

parameter stock(i,j);

stock(i,j)$(ord(i)=ord(j)) = 10;

display stock;
set i        / 1,  3      /
    j        / j1, j2, j3 /
    map(i,j) / 1.j1, 3.j3 /;

parameter stock(i,j);

stock(map(i,j)) = 10;

display stock;

一个小问题:如果您设置了i/1,3/而不是设置了i/1,2/,那么我得到的结果是:stock(“3”,“j2”)=10。然而,我想要股票(“3”,“j3”)=10。如果集合i中的值等于集合j中j之后的值,是否可以说应该插入值10?这有意义吗?我修改了课文,所以解释得更好。太好了!非常感谢!:-)