这是我的完整问题:

信息:
*最大.总投资:125美元
*支付是购买的单位x支付/单位的总和
*每次投资成本:购买成本+成本/单位x如果您购买至少一个单位的单位数量
*费用是每笔投资的总和
约束:
*您可能不会同时投资2和5.
*只有投资2和3中的至少一个,您才可以投资1.
*您必须至少投资3,4,5中的两个.
*您的投资额不得超过最大单位数.
问题:最大化利润:支付 - 成本
xi: # of units i ? {1,2,3,4,5}
yi=1 if xi>0 else yi=0
cost = sum{i in I} buyInCost_i * yi + cost-unit_i*xi
pay-off = sum{i in I} (pay-off/unit)_i*xi
profit = pay-off - cost
Maximize profit
Subject to
y2+y5 <= 1
y1<= y2+y3
y3+y4+y5 >= 2
x1<=5, x2<=4, x3<=5, x4<=7, x5<=3
cost<=125
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
例如,我有这个二进制变量y
yi=1 if xi>0 else yi=0 and i ? {1,2,3,4,5}
Run Code Online (Sandbox Code Playgroud)
我宣称我是一个数据集
set I;
data; …Run Code Online (Sandbox Code Playgroud) 我希望这对某人来说是显而易见的.我只使用了GLPK/MathProg.我无法弄清楚GNU MathProg(在GLPK中)的语法来执行以下操作,例如:
set PartsOfWeek;
set WeekDays;
data;
set PartsOfWeek := WorkWeek WeekEnd;
set WorkWeek := Mon Tue Wed Thu Fri;
set WeekEnd := Sat Sun;
set WeekDays := setof{d in (WorkWeek union WeekEnd)}(d);
Run Code Online (Sandbox Code Playgroud)
问题是MathProg拒绝了这个问题.
一般来说,我只希望能够: - 声明一个Partition(这里是PartsOfWeek)和一个set(这里是Weekdays) - 从数据构建分区 - 用分区中的集合元素填充集合.
一个更好的例子可能是季节和月份.