如果我有一个设置和参数
Set A/a1,a9/;
Parameter T(A);
*Suppose p is T(A)=121311332
T(A) /1 1,2 2,3 1,4 3,5 1,6 1,7 3,8 3,9 2/;
如何找到第三个并将其更改为4?
(E.g. 121311332 changed to 121341332)
通常情况下,我如何从集合A中获取第n个重复元素(1、2或3)并进行更改?总之有这样做吗?
答案 0 :(得分:1)
在澄清注释后进行编辑:
要将第三次出现的1更改为4,可以执行以下操作:
Set A /a1*a9/;
Parameter T(A) /a1 1,a2 2,a3 1,a4 3,a5 1,a6 1,a7 3,a8 3,a9 2/;
Scalar oneCnt / 0 /;
Display T;
loop(A,
if(T(A)=1,
oneCnt = oneCnt+1;
if(oneCnt=3,
T(A)=4;
break;
)
);
);
Display T;
最初,我认为应该更改第三个元素。可以这样完成:
您可以使用ord运算符(https://www.gams.com/latest/docs/UG_OrderedSets.html#UG_OrderedSets_TheOrdOperator)来做到这一点:
Set A/a1*a9/;
Parameter T(A) /a1 1,a2 2,a3 1,a4 3,a5 1,a6 1,a7 3,a8 3,a9 2/;
Display T;
T(A)$(ord(a)=3) = 4;
Display T;