我的扩增代码中有一个语法错误,我无法理解。这是代码:
set J := {1..4};
set I := {1..2};
set L := {1..3};
param A{J};
var p {I,J} >= 0;
var z;
maximize profit: z;
#constraints
s.t. worse_outcome:
z <= A[1] * p[1,1] + A[2] * (p[1,2]+p[1,3]) + p[1,4] + p[2,4]
z <= A[1] * p[1,1] + A[2] * (p[1,2]+p[1,4]) + A[4] * p[2,3]
z <= A[1] * p[1,1] + A[2] * (p[1,3]+p[1,4]) + A[4] * p[2,2]
z <= A[3] * p[2,1] + A[4] * (p[2,2]+p[2,3]) + p[1,4] + p[2,4]
z <= A[3] * p[2,1] + A[4] * (p[2,2]+p[2,4]) + A[2] * p[1,3]
z <= A[3] * p[2,1] + A[4] * (p[2,3]+p[2,4]) + A[2] * p[1,2];
s.t. money: sum {i in I} {j in J} p[i,j] <= 100;
#data
param A :=
1 2.5
2 1.5
3 1.66667
4 3
这是错误消息: 语法错误 上下文:>>> z <<< <= A [1] * p [1,1] + A [2] *(p [1,2] + p [1,4])+ A [4] * p [2,3]
谢谢您的帮助!
答案 0 :(得分:0)
似乎您要在单个约束的语法中指定六个不同的约束。那行不通。
请尝试:
s.t. worse_outcome_1: z <= A[1] * p[1,1] + A[2] * (p[1,2]+p[1,3]) + p[1,4] + p[2,4];
s.t. worse_outcome_2: z <= A[1] * p[1,1] + A[2] * (p[1,2]+p[1,4]) + A[4] * p[2,3];
s.t. worse_outcome_3: z <= A[1] * p[1,1] + A[2] * (p[1,3]+p[1,4]) + A[4] * p[2,2];
s.t. worse_outcome_4: z <= A[3] * p[2,1] + A[4] * (p[2,2]+p[2,3]) + p[1,4] + p[2,4];
s.t. worse_outcome_5: z <= A[3] * p[2,1] + A[4] * (p[2,2]+p[2,4]) + A[2] * p[1,3];
s.t. worse_outcome_6: z <= A[3] * p[2,1] + A[4] * (p[2,3]+p[2,4]) + A[2] * p[1,2];
如果要使用一个语句指定多个规则,则需要使用索引约束来执行。例如,上述约束的第一个约束和第四个约束可以组合为:
s.t. worse_outcome_1_4{i in 1..2}: z <= A[2*i-1] * p[i,1]
+ A[2*i] * (p[i,2]+p[i,3])
+ p[1,4] + p[2,4];