my name is Leonardo from Italy. I'm a gams beginner. Reading the online doucmentation I have came up with this model I would like to employ to optimize the production planning process of my company. I'm attaching here a sample of the model (data has been taken randomly):
Code: Select all
Sets
art "Continuative production" / a1, a2, a3 /
pp "New production" / p1, p2, p3 /
forn "Suppliers" / f1, f2, f3 / ;
Parameters
t1(art) "Cycle times of continuative products" /a1 35,a2 18,a3 63/
q1(art) "Demand of continuative products" /a1 12,a2 17,a3 25/
cap(forn) "Production capacity in hours" /f1 3000, f2 4000,f3 3000/
t2(pp) "Cycle times of new producs " /p1 35,p2 18,p3 63/
q2(pp) "Demand of new products" /p1 28,p2 14,p3 32/
numeropp(forn) "Max new products" /f1 2, f2 3, f3 1/;
Table percorsi(art,forn) "Who can produce continuative products"
f1 f2 f3
a1 1 1 1
a2 1 0 1
a3 1 1 0 ;
Table dati(art,forn) "Already assigned production in pieces"
f1 f2 f3
a1 35 0 0
a2 0 0 0
a3 0 18 0 ;
Scalar M /50000000/;
Variables
x(art,forn) "Quantity of continuative products assigned"
y(pp,forn) "Quantity of new products"
k(pp, forn) "Dummy variable"
z "Output";
Integer Variables x,y;
Binary Variable k;
Equations
macroplan 'Maximize the production batch (expressed in hours) assigned to each supplier'
venduto1(art) 'Assign always all the pieces sold for a continuative product'
venduto2(pp) 'Assign always all the pieces sold for a new product'
capprod(forn) 'Do not exceed production capacity'
attivazione(pp,forn) 'If statement'
vincolo(forn) 'Assign a maximum number of new products';
macroplan .. sum((art,forn), t1(art)*percorsi(art,forn)*x(art,forn)) + sum((pp,forn), t2(pp)*y(pp,forn)) =e= z ;
venduto1(art) .. sum(forn, x(art,forn)) =e= q1(art);
venduto2(pp) .. sum(forn ,y(pp,forn)) =e= q2(pp);
capprod(forn) .. sum(art, t1(art)*[x(art,forn)+dati(art,forn)]) + sum(pp, t2(pp)*y(pp,forn)) =l= cap(forn);
attivazione(pp,forn).. M*k(pp,forn) =g= y(pp,forn);
vincolo(forn) .. sum(pp, k(pp,forn)) =l= numeropp(forn);
Model transport /all/ ;
Solve transport using MIP maximizing z;
display x.l, y.l;
1) Sometimes the program reports "Integer Infeasible". Is that because the model is wrongly written or just because a solution really doesn't exist?
2)Is there any way to add a constraint for the minum dimension of batch assigned to each supplier? For example, in the case of new products I would like to set k(pp,forn)*y(pp,forn) =g= 5, but I guess the program doesn't accept that because I can't maximize a variable in function of another dependent variable.
I hope you guys could really help me.
Thank you so much in advance.
All the best