help please, I can't get out of a problem

Problems with modeling
Post Reply
mlftx
User
User
Posts: 5
Joined: 1 year ago

help please, I can't get out of a problem

Post by mlftx »

I attach my gams file, the model is a modified EOGLSP adapted to a case study.
Solving the problem on Gams in fact the problem does not give solution, could someone help me? I have been stuck on this work for months

Code: Select all

Set
   k 'insieme dei prodotti, di cui lo 0 è fittizio' /0,1/
   t 'insieme dei macroperiodi' /0,1,2/
   s 'insieme dei macroperiodi produttivi' /0*200/
   r 'insieme dei macroperiodi energetici' /0*2/
   swith(t,s) /1.1*100, 2.101*200/
   swithout(t,s) /1.1*99, 2.101*199/
   rwith(t,r) /1.0*1, 2.2/;
   
alias(k, k_primo);

Table sc(k_primo, k)'fattore di costo per attrezzaggio macchina dal prodotto k_primo al prodotto k'
           0  1
   0       0  0
   1       0  0;
   
Table st(k_primo,k) 'tempo necessario per lattrezzaggio da k_primo a k'
      0       1
   0  0       0.0069
   1  0.0069  0;
   
Parameter

 a(k) 'tempo richiesto per la realizzazione di un prodotto'
      /0 0.0000231481
       1 0.0000231481/

 hc(k) 'costo di stoccaggio del prodotto k'
      /0 0
       1 0.0003/
       
 pc(k) 'costo per il preserving della macchina per il prodotto k'
      /0 0
       1 0.00014/
       
 ec(r)'prezzo di acquisto energia nel microperiodo energetico r'
       /0 0
        1 0.21
        2 0.22/
        
 ee(r)'prezzo di vendita energia nel microperiodo energetico r'
      /0 0
       1 0.15
       2 0.16/
       
 p_apiceq(k) 'energia richiesta per la produzione del prodotto k'
      /0 0
       1 0.00083/
       
 p_apiceqsegnato(k) 'energia richiesta per il preserving della macchina per il prodotto k'
      /0 0
       1 0.0006/
       
 M 'numero molto grande' /100/
 
 lr 'lunghezza di un microperiodo orientato allenergia' /20/;

Table      
 p_apicez(k_primo, k) 'consumo di energia per il cambio da k_primo a k sulla macchina'
           0  1
       0   0  0
       1   0  0 ;

Parameter       
 E_apiceg(r) 'energia generata nel microperiodo energetico r'
      /0 0
       1 4700
       2 4625/
 Es 'massima capacità di stoccaggio' /13.5/
 
 C(t) 'lunghezza del microperiodo t'
      /1 120
       2 120/;
 
Table
d(k,t) 'domanda di prodotto k nel macroperiodo t'
       1    2
     0 0    0
     1 6806 13611 ;
     
alias(r,rp);


Variable
 Y 'variabile funzione obiettivo'
 I(k, t) 'inventario del prodotto k al termine del periodo t'
 q_segnato(k, s) 'durata per la quale la macchina viene preservata per il prodotto k nel microperiodo produttivo s'
 E_apicep(r) 'quantità di energia acquistata nel microperiodo energetico r'
 E_apiceo(r) 'quantità di energia venduta nel microperiodo energetico r'
 z(k_primo, k, s) 'variabile di decisione binaria che vale 1 se nel periodo s avviene un cambio da k_primo a k sulla macchina'
 l_apiceq(k,r,s) 'lunghezza del microperiodo s assegnato al microperiodo r e utilizzato per produrre k'
 l_apiceqsegnato(k,r,s) 'lunghezza del microperiodo s assegnato al microperiodo r e utilizzato per preservare la macchina per la produzione di k'
 l_apicez(k_primo, k, r, s) 'lunghezza del microperiodo s assegnato al microperiodo r utilizzata per effettuare il cambio da k_primo a k sulla macchina'
 E_apices(r) 'energia stoccata nel microperiodo energetico s'
 q(k,s) 'quantità di prodotto k realizzata nel microperiodo s'
 e(s) 'lunghezza del microperiodo s'
 v(k,s)'variabile di decisione binaria che vale 1 se il prodotto k viene realizzato in s'
 v_segnato(k,s) 'variabile di decisione binaria che vale 1 se la macchina viene preservata per il prodotto k in s'
 omega(k,s) 'variabile di decisione binaria che vale 1 se la macchina è settata per k in s'
 omega(k_primo,s) 'uguale a sopra ma per k_primo'
 l(r,s) 'lunghezza di s assegnata a r'
 u(r,s) 'variabile di decisione binaria che vale 1 se s è interamente assegnato ad r e precedenti';

Positive Variable q, q_segnato, I, e, E_apices, E_apicep, E_apiceo, l, l_apiceq, l_apiceqsegnato, l_apicez;

Binary Variable omega, z, v, v_segnato, u; 

Equation
 obj 'costo complessivo'
 vincolo1
 vincolo2
 vincolo3
 vincolo4
 vincolo5
 vincolo6
 vincolo7
 vincolo8
 vincolo9
 vincolo10
 vincolo11
 vincolo12
 vincolo13
 vincolo14
 vincolo15
 vincolo16
 vincolo17
 vincolo18
 vincolo19
 vincolo20
 vincolo21
 vincolo22
 vincolo23
 vincolo24
 vincolo25
 vincolo26;
 
obj.. Y =e= (sum((s,k,k_primo)$(ord(s)>1), z(k_primo, k, s) * sc(k_primo, k)) + (sum(t $(ord(t)>1), I('1',t) * hc('1'))) + (sum((k,s)$(ord(s)>1),q_segnato(k,s)*pc(k))) + (sum (r $(ord (r)>1), (E_apicep(r)*ec(r)-E_apiceo(r)*ee(r)))));

vincolo1(r) $(ord(r)>1).. (sum((s,k) $(ord(s)>1), l_apiceq(k, r, s)*p_apiceq(k) + l_apiceqsegnato(k, r, s)*p_apiceqsegnato(k) + sum(k_primo, l_apicez(k_primo, k, r, s)*p_apicez(k_primo,k))))+E_apiceo(r)+E_apices(r) =e= E_apiceg(r)+E_apicep(r)+E_apices(r-1);

vincolo2(r).. E_apices(r) =l= Es;

vincolo3(t,k) $(ord(k)>1 and ord (t)>1).. I(k,t)=e=I(k,t-1)+sum(s $(swith(t,s)), q(k,s)-d(k,t));

vincolo4(s).. (sum(k, a(k)*q(k,s)+q_segnato(k,s))) + (sum(k_primo, sum(k, st(k_primo,k)*z(k_primo,k,s))))=e=e(s);

vincolo5(t).. sum(s $(swith(t,s)), e(s))=e=C(t);

vincolo6(k,s).. q(k,s)=l=v(k,s)*M;

vincolo7(k,s).. q_segnato(k,s)=l=v_segnato(k,s)*M;

vincolo8(s).. sum(k,v(k,s)+v_segnato(k,s)+sum(k_primo, z(k_primo,k,s)))=e=1;

vincolo9(s).. sum(k, omega(k,s))=e=1;

vincolo10(k,t,s) $(swith(t,s)).. a(k)*q(k,s)+q_segnato(k,s) =l= C(t)*omega(k,s);

vincolo11(k_primo,k,s) $(ord(s)>1).. z(k_primo,k,s)=g=omega(k_primo,s-1)+omega(k,s)-1;

vincolo12(r) $(ord(r)>1).. sum(s, l(r,s))=e=lr;

vincolo13(s).. sum(r, l(r,s))=e=e(s);

vincolo14(r,s).. sum(rp$(ord(rp)<=ord(r)),l(rp,s))-e(s) =g= (-1+u(r,s))*M;

vincolo15(r,s) $(ord(s)>1).. u(r,s)=l= u(r,s-1);

vincolo16(r,s) $(ord(s)>1).. l(r,s)=l=u(r,s-1)*lr;

vincolo17(k,r,s).. l_apiceq(k,r,s)=g=(v(k,s)-1)*M+l(r,s);

vincolo18 (k,r,s).. l_apiceqsegnato(k,r,s)=g=(v_segnato(k,s)-1)*M+l(r,s);

vincolo19(k_primo,k,r,s).. l_apicez(k_primo,k,r,s)=g=(z(k_primo,k,s)-1)*M+l(r,s);

vincolo20(r,s).. sum(k,l_apiceq(k,r,s)+l_apiceqsegnato(k,r,s)+sum(k_primo,l_apicez(k_primo,k,r,s)))=l=l(r,s);

vincolo21(t,s) $(swithout(t,s)).. e(s)*M=g=e(s+1);

vincolo22(k,t,s) $(swithout(t,s)).. v(k,s)+v(k,s+1)=l=1;

vincolo23(k,t,s) $(swithout(t,s)).. v_segnato(k,s)+v_segnato(k,s+1)=l=1;

vincolo24(r).. u(r, '0')=e=1;

vincolo25(k).. I(k,'0')=e=0;

vincolo26.. omega('0', '0')=e=1;

model EOGLSP_newframework /all/;


solve EOGLSP_newframework minimizing Y using MIP;
User avatar
bussieck
Moderator
Moderator
Posts: 1037
Joined: 7 years ago

Re: help please, I can't get out of a problem

Post by bussieck »

If you solve e.g. with Cplex the log says: "Row 'vincolo3(1,1)' infeasible, all entries at implied bounds.". So your model is infeasible and the solver points you to a particular equation. You find many posts in the forum dealing with infeasible models. Typical methods are IIS and FeasOpt. Both show large number of constraints in the "infeasible set", so there is no simple way to remove the infeasibility. Good luck.

-Michael
Post Reply