如何找到向量(参数)?

时间:2019-06-16 14:22:35

标签: gams-math

如果我有一个设置和参数

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)并进行更改?总之有这样做吗?

1 个答案:

答案 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;