Это проблема с предварительным решением или как AMPL использует массивы? - PullRequest
0 голосов
/ 16 марта 2020

Я моделирую производственную проблему в AMPL с начальными и конечными запасами, равными нулю. Простые 3 продукта производятся в течение 4 дней на одной машине.

, однако моя модель продолжает испытывать проблемы с ограничением bigM, и инвентарь не распределяется. Модель недостижима для предварительного разрешения AMPL. Я был бы очень признателен, если бы кто-то мог указать, что не так или что я должен попробовать Заранее спасибо!

ЗДЕСЬ КОД -

param n;
param m;
param M;
param T;
set I := {1..n};
set J := {1..m};

param r {I} integer; #productionrate
param stp {I} integer; #setuptime
param rev {I} integer; #sellingprice
param h {I} integer; #inventorycost
param d {I,J} integer; #demand

var t {I,J} integer >= 0, <=480 default 50;     #production time allocated for product i on day j
var s {I,J} integer >= 0 default 50;        #inventory of product i on day j
var z {I,J} binary default 1;   #setup for product i done on day j or not





#sum of revenue - sum of inventory cost
maximize K: sum {i in I,j in J}(rev[i] * t[i,j] * r[i] * z[i,j]) - sum {i in I,j in J}(h[i] * s[i,j]);





#inventory equation
s.t. c2 {i in I,j in 2..4}: s[i,j] = s[i,j-1] + t[i,j]*r[i] - d[i,j];
s.t. c14 {i in I}: s[i,1] = t[i,1]*r[i] - d[i,1];


#initial and end inventories
s.t. c3 {i in I}: s[i,1] = 0;
s.t. c4 {i in I}: s[i,4] = 0;


#ensuring time allocation only when setup
s.t. c5 {i in I,j in J}: t[i,j] <= M*z[i,j];

#ensuring demand is satisfied
s.t. c6 {i in I,j in 2..4}: s[i,j-1] + t[i,j]*r[i] = d[i,j];
s.t. c11 {i in I}: t[i,1]*r[i] = d[i,1];

#production time constraint
s.t. c7 {j in J}: sum{i in I}(z[i,j]*stp[i]) + sum{i in I}(t[i,j]) <= T;

#other non-negativity constraints
s.t. c12 {i in I,j in J}: s[i,j] >= 0;
#s.t. c13 {i in I,j in J}: t[i,j] >= 0;

end;

ЗДЕСЬ ДАННЫЕ -

param n :=3;
param m :=4;
param T :=480;
param M :=480;
#param o :=2;

param d: 1   2   3   4   :=
      1  400 600 200 800
      2  240 440 100 660
      3  80  120 40  100;

param r:=
      1 5
      2 4 
      3 2;

param stp:=
      1 45
      2 60
      3 100;

param rev:=
      1 50
      2 70
      3 120;

param h:=
      1 2
      2 1
      3 3;

end;

ЗАПУСК ФАЙЛА -

#RESET THE AMPL ENVIROMENT
reset;

#LOAD THE MODEL
model 'EDX 15.053 Production problem.mod';

#LOAD THE DATA
data 'EDX 15.053 Production problem.dat';

#DISPLAY THE PROBLEM FORMULATION
expand K;
expand c2;
#expand c3;
expand c4;
expand c5;
expand c6;
expand c7;
expand c11;
#let s[3,3] := 20;

#CHANGE THE SOLVER (optional)
#option solver CBC;
option solver cplex, cplex_options ’presolve 0’;
option show_stats 1;
option send_statuses 0;
#option presolve 0;
#SOLVE
solve;

print {j in 1.._nvars:_var[j].status = "pre"}: _varname[j];

print {i in 1.._ncons:_con[i].status = "pre"}: _conname[i];

display solve_message;

display solve_result_num, solve_result;
#SHOW RESULTS
display t,s,z,K;

end;
...