如何确定一个元素是否在 GAMS 中的集合中
how to decide if a element is in a set in GAMS
情况是:我在gams中定义了一个集合,比如:
设置n/n1*n100/;
在代码的后面,我想找到一种方法来确定元素是否在集合中。例如,我想要一个函数 f,这样
(1) 如果集合中的一个元素,它 returns 为真(或“1”)。比如,f('n1',n) = true(or '1')
(2) 如果一个元素不在集合中,它 returns false(或'0')。比如,f('n111',n) = false(or '0')
有谁知道有没有这种功能?另外,如果存在,它是否也适用于多维集?
问题有点不清楚你想做什么。话虽这么说,子集似乎是一个做你想做的事,例如:
set m /n1*n100/;
set n(m) /n1*n50/;
parameter test(m);
test(m)=0;
test(n)=1;
display test;
这过于明确,例如,您不需要 test(m)=0;
,因为 gams 默认值为 0。
这样您就可以使用 param(m)$test(m) = 3;
仅设置测试为正的值。
当然使用param(n) = 3
就简单多了
最后,严格来说,指令:sameas(set1,set2)
或sameas(set1,"n101")
随心所欲
如果没有更明确的问题,就很难提供超出这一点的帮助。
情况是:我在gams中定义了一个集合,比如:
设置n/n1*n100/;
在代码的后面,我想找到一种方法来确定元素是否在集合中。例如,我想要一个函数 f,这样
(1) 如果集合中的一个元素,它 returns 为真(或“1”)。比如,f('n1',n) = true(or '1')
(2) 如果一个元素不在集合中,它 returns false(或'0')。比如,f('n111',n) = false(or '0')
有谁知道有没有这种功能?另外,如果存在,它是否也适用于多维集?
问题有点不清楚你想做什么。话虽这么说,子集似乎是一个做你想做的事,例如:
set m /n1*n100/;
set n(m) /n1*n50/;
parameter test(m);
test(m)=0;
test(n)=1;
display test;
这过于明确,例如,您不需要 test(m)=0;
,因为 gams 默认值为 0。
这样您就可以使用 param(m)$test(m) = 3;
仅设置测试为正的值。
当然使用param(n) = 3
最后,严格来说,指令:sameas(set1,set2)
或sameas(set1,"n101")
随心所欲
如果没有更明确的问题,就很难提供超出这一点的帮助。