如何在向量中查找(参数)?
How to find in vector ( parameter)?
如果我有一个集合和参数
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 更改为 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;
如果我有一个集合和参数
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 更改为 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;