Синтаксическая ошибка в ограничениях с амплитудой в задаче минимизации

У меня есть синтаксическая ошибка в моем коде amp, которую я не могу понять. Вот код:

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]

Спасибо за помощь !


person ASUCB    schedule 18.09.2018    source источник


Ответы (1)


Похоже, вы пытаетесь указать шесть разных ограничений внутри синтаксиса одного ограничения. Это не сработает.

Вместо этого попробуйте:

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];
person Geoffrey Brent    schedule 18.09.2018