Как изменить значение dvar B, так как dvar A изменяется, когда dvar B зависит от A - PullRequest
0 голосов
/ 25 сентября 2019

Теперь я сталкиваюсь с проблемой «изменения значения dvar B, поскольку dvar A изменяется, когда dvar B зависит от A».

Есть код, который я пишу, просто.

int a = 3;
int e = 4;
int t = 6;
int h = 2;

range aRange = 1..a;
range eRange = 1..e;
range tRange = 1..t;
range hRange = 1..h;

int C[aRange][eRange] = [[2,5,8,7]
                         [3,6,8,1]
                         [8,7,1,0]];

int N[eRange][hRange] = [[8,6]
                         [4,1]
                         [9,7]
                         [5,4]];


dvar boolean A[aRange][eRange][tRange]; 
dvar int B[eRange][hRange][tRange] in 0..100;

maximize
sum(a in aRange, e in eRange, t in tRange, h in hRange) C[a][e] * A[a][e][t] * B[e][h][t];

subject to {

cons01 :
  forall(e in eRange, h in hRange, t in tRange) { 
      B[e][h][t] <= N[e][h]; }
}

В этом случае я хотел бы реализовать условие, что

'если x [a] [e] [t] = 0, то B [e] [h] [t] = B [e] [h] [t-1] + B [e] [h] [t-1] / N [e] [h].иначе x [a] [e] [t] = 1, B [e] [h] [t] = 0. '

Как я могу внедрить вышеуказанное условие в мой код (ограничения или темуфункция или использовать скрипт данных ..?)

1 Ответ

0 голосов
/ 25 сентября 2019

вы можете использовать логические ограничения.Например, вы можете написать:

forall(a in aRange,e in eRange,h in hRange,t in tRange:t!=1) 
(x[a][e][t] == 0) => (B[e][h][t] == B[e][h][t-1] + B[e][h][t-1]/N[e][h]);

в блоке "подчинено"

...