sum - 使用 GAMS 中的 sum 函数对变量子集求和
问题描述
我正在处理 GAMS 中的最大化问题,我将选择
X=(x_1,x2,...,x_n)
最大化的问题f(X)=c_1*x_1+...c_n*x_n
。c 是已知的标量,我知道n
(在我的情况下为 10)。我希望我的约束是这样的,第一个(n-1)=9
x 的总和应该是 1,最后一个应该小于 10。我如何使用总和来做到这一点?
这是我尝试过的:
SET C / c1 .... c2 /;
ALIAS(Assets,i)
Parameter Valuesforc(i) 'C values'/
*( here are my values typed in for all the C1)
POSITIVE VARIABLES
x(i);
EQUATIONS
Const1 First constraint
Const1 Second constraint
Obj The Object;
* here comes the trouble:
Const1 .. x(10) =l= 10
Const2 .. sum((i-1),x(i)) =e= 1
代码并没有一路完成,但我相信输入了基本设置。你如何进行求和以查找x_1+x_1 + .... x_(n-1)
以及如何引用x_10
?
解决方案
尝试这个:
Const1 .. x('10') =l= 10;
Const2 .. sum(i$(ord(i)<card(i)),x(i)) =e= 1;
编辑:这里有一些注释来解释 Const2 中发生的事情,尤其是在“$(ord(i) < card(i))”部分。
- "$" 开始一个条件,因此它从总和中排除 i 的某些元素(参见:https ://www.gams.com/latest/docs/UG_CondExpr.html#UG_CondExpr_TheDollarCondition )
- 运算符 ord 返回集合中成员的相对位置(参见:https ://www.gams.com/latest/docs/UG_OrderedSets.html#UG_OrderedSets_TheOrdOperator )
- 操作员卡返回集合中的元素数量(参见:https ://www.gams.com/latest/docs/UG_OrderedSets.html#UG_OrderedSets_TheCardOperator )
所以,总而言之,有一个条件说 i 的所有元素都应该包含在总和中,除了最后一个。
推荐阅读
- python - 使用熊猫比较多列值
- haskell - 在 vim 8 中使用 hie(haskell ide 引擎)时如何查看整个提示信息?
- flutter - 我的示例应用程序适用于添加/查看数据,但数据在 Firestore 控制台中不可见
- python - 获取多个用户输入的列表和地图之间的区别
- jquery - 如果使用 document.html.style.display='',为什么我的网站主页仍然空白?
- c# - 如何根据 C# 中的值创建子 XElement?
- java - 如何修复 java.lang.NumberFormatException?
- linux - 我可以在 POSIX sh 脚本中避免这个子外壳吗?
- excel - 如何通过activex按钮刷新单元格中的“=NOW()”?
- c# - 在实体框架中返回“计算”字段