CPLEX - определить переменные с выражениями - PullRequest
0 голосов
/ 24 мая 2018

Я работаю над проблемой назначения флота и строю модель в xpress-Mosel.Тем не менее, мне нужно собрать его тоже в OPL - Cplex.

Я новичок в OPL, поэтому у меня есть некоторые сомнения.Я не могу определить переменные по какому-либо выражению, которое не является ограничением или задано вводом.

В моем файле .dat есть следующие векторы, это часть всего файла данных:

proc_low=[...];
cof=[...];
cov_km=[...];
dist_km=[...];
penalty=[...];

Определено следующим образом:

range N0=0..n;  
range N=1..n;
range Fleet=1..3;
range liga=1..30; 
range POSS=1..poss;
int legs[N]=...;
int org[N]=...;
int dest[N]=...;
int proc_low[N]=...;
int tp_cod[Fleet]=...;
int cap[Fleet]=...;
int test1[Fleet]=...;
int cof[Fleet]=...;
int cov_km[Fleet]=...;
int cod_org[lig]=...;
int cod_dest[lig]=...;
int penalty[lig]=...;
float dist_km[lig]=...;
int leg_atual[POSS]=...;
int leg_after[POSS]=...;
int tp_fleet[POSS]=...;

tuple T {
  int atual;
  int after;
  int type_f;
}

//Decicion variables
{T} tuples = { <leg_atual[k], leg_after[k], tp_fleet[k]> | k in POSS };
dvar boolean x[tuples];

Итак, вот мое сомнение: я не могу определить это выражение ... разлив пассажиров для каждой ноги, которая зависит от продаж (proc_low) и паркапропускная способность, если нога летела на каком-то самолете.Приведенный выше код не в формате cplex ... написан на xpress mosel, и именно здесь мне нужна помощь для записи в формате cplex ...

forall(l in 1..n2) pass_out(l):= spill(l)>=proc_low(l)-sum(f in Fleet)cap(f)*(sum(i in n3..n)x(i,l,f)+x(0,l,f))
forall(l in n3..n) pass_in(l) := spill(l)>=proc_low(l)-sum(f in Fleet)cap(f)*sum(i in 1..n2)x(i,l,f)

Тогда штраф за целевую функцию заразлив пассажиров

forall(j in N,i in lig|org(j)=cod_org(i) and dest(j)=cod_dest(i))do
pen(j):=penalty(i)*spill(j)
end-do

И, наконец, стоимость назначения какого-либо самолета на каком-либо участке

forall(j in N,i in ligs,  f in Fleet|org(j)=cod_org(i) and dest(j)=cod_dest(i))do
cost(j,f):=cof(f)+cov_km(f)*dist_km(i)
end-do

Я определил эти переменные, как показано выше, но яне уверен ... возможно это с dexpr.Я действительно не знаю ...

dvar int spill[N];
dvar float+ pen[N];
dvar float+ cost[N][Fleet];

Спасибо!Привет

...