Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Esempio
ALIAS (i,j);
Codifica GAMS
Sintassi dei comandi
Esempio:
SCALAR a/227/,pp3/21/;
Codifica GAMS
Sintassi dei comandi
(l’allineamento è richiesto)
Codifica GAMS
Sintassi dei comandi
Dati matriciali (se presenti, dopo che sono stati
dichiarati gli indici relativi): esempio
TABLE mat(i,j)
ja jb jc
i1 5 71 42
i2 1 1 8
I3 15 43 12
i4 11 3 4 ;
VARIABLES nome-variabile-1(indice-1),
nome-variabile-2(indice-21,indice-22),
nome-variabile-3, … ;
Codifica GAMS
Sintassi dei comandi
x.lo(i) = 15
y.up(‘i1’,’ja’) = 3
Codifica GAMS
Sintassi dei comandi
Esempio
EQUATIONS cost, vinc1(i,j), vinc2;
Codifica GAMS
Sintassi dei comandi
MODEL prova/all/;
Codifica GAMS
Sintassi dei comandi
Comando di soluzione
SOLVE nome-del-modello USING nome-del-
metodo MAXIMIZING (oppure MINIMIZING)
nome-della-variabile;
I comandi SOLVE possono essere più di
uno.
DISPLAY nome-della-variabile1-senza-indici.l,
nome-della-variabile1-senza-indici.m,
nome-della-variabile2-senza-indici.l,
nome-della-variabile2-senza indici2.m,
…;
x1 + 2x2 ≤ 800
x1 + x2 ≤ 600
x1 , x 2 ≥ 0
Programmazione Lineare
Esempio agendine – sol. grafica
x1 + 2x2 ≤ 800
x1 + x2 ≤ 600
x1 , x 2 ≥ 0
Codifica GAMS
Esempio di un codice (agendine)
SETS tipo/sport,eleg/,risorse/lavoro,mater/;
PARAMETERS quantita(risorse)/lavoro 800,mater 600/,
ricavo(tipo)/sport 3,eleg 5/;
TABLE coeff(risorse,tipo)
sport eleg
lavoro 1 2
mater 1 1;
VARIABLES x(tipo),ricavtot; POSITIVE VARIABLE x;
EQUATIONS obiet,vinc(risorse);
obiet..ricavtot =e= sum(tipo,ricavo(tipo)*x(tipo));
vinc(risorse)..sum(tipo,coeff(risorse,tipo)*x(tipo)) =l= quantita(risorse);
MODEL age/all/;
OPTIONS lp=cplex;
SOLVE age USING lp MAXIMIZING ricavtot;
DISPLAY x.l,ricavtot.l;
Programmazione Lineare
Esempio porte-finestre
Due dimensioni (allocazione di risorse)
Una officina costruisce porte vetrate di alluminio
e finestre di legno, che vende rispettivamente a
300 e 500 Euro l’una. L’officina ha tre reparti, il
reparto alluminio, che dispone di 4 ore
settimanali, il reparto legno, che dispone di 12 ore
settimanali e il reparto vetro, che dispone di 18
ore settimanali. Ogni porta richiede 1 ora al
reparto alluminio e 3 ore al reparto vetro per la
fabbricazione, ogni finestra richiede 2 ore al
reparto legno e 2 ore al reparto vetro.
Programmare la produzione che permette di
ottenere il massimo ricavo settimanale.
Programmazione Lineare
Esempio porte-finestre
x1 ≤ 4
2x2 ≤ 12
3x1 + 2x2 ≤ 18
x1 , x 2 ≥ 0
Programmazione Lineare
Esempio porte-finestre
SETS prodotto/porte,finestre/,reparto/allum,legno,vetro/;
PARAMETERS ore(reparto)/allum 4,legno 12,vetro 18/,
ricavo(prodotto)/porte 300,finestre 500/;
TABLE coeff(reparto,prodotto)
porte finestre
allum 1 0
legno 0 2
vetro 3 2;
VARIABLES x(prodotto),ricavtot;POSITIVE VARIABLE x;
EQUATIONS obiet,vinc(reparto);
obiet..ricavtot =e= sum(prodotto,ricavo(prodotto)*x(prodotto));
vinc(reparto)..sum(prodotto,coeff(reparto,prodotto)*x(prodotto)) =l=
ore(reparto);
MODEL portefin/all/;
OPTIONS lp=cplex;
SOLVE portefin USING lp MAXIMIZING ricavtot;
DISPLAY x.l,ricavtot.l;
Programmazione Lineare
Esempio cinture
Due dimensioni (allocazione di risorse)
Una officina costruisce cinture sportive ed
eleganti, vendute rispettivamente a 15 e 25 Euro
l’una. Le ore di lavoro a disposizione ogni giorno
permettono di costruire 1000 cinture sportive
oppure 500 cinture eleganti, o una miscela dei
due tipi; il cuoio a disposizione ogni giorno
permette di costruire 800 cinture di qualsiasi tipo.
Le fibbie a disposizione permettono di costruire
700 cinture sportive e 400 cinture eleganti.
Programmare la produzione che permette di
ottenere il massimo ricavo.
Programmazione Lineare
Esempio cinture
x1 + 2x2 ≤ 1000
x1 + x2 ≤ 800
x1 ≤ 700
x2 ≤ 400
x1 , x 2 ≥ 0
Programmazione Lineare
Esempio cinture
SETS cin/sp,el/,ris/la,cu,fs,fe/;
PARAMETERS ric(cin)/sp 15,el 25/,qu(ris)/la 1000,cu 800,fs 700,fe
400/;
TABLE co(ris,cin)
sp el
la 1 2
cu 1 1
fs 1 0
fe 0 1;
VARIABLES x(cin),w;POSITIVE VARIABLE x;
EQUATIONS ob,vinc(ris);
ob..w =e= sum(cin,ric(cin)*x(cin));
vinc(ris)..sum(cin,co(ris,cin)*x(cin)) =l= qu(ris)
MODEL cinture/all/;OPTIONS lp=cplex;
SOLVE cinture USING lp MAXIMIZING w;
Programmazione Lineare
Esempio lavatrici
Due dimensioni (allocazione di risorse)
x1 + 2.5 x2 ≤ 155
1.5 x1 + 2.5 x2 ≤ 200
3 x1 + 3 x2 ≤ 240
2.5 x1 + 4 x2 ≤ 400
x1 , x2 ≥ 0
Programmazione Lineare
Esempio lavatrici
SETS lav/mat,lux/,rep/r1*r4/;
PARAMETERS ric(lav)/mat 1.5,lux 2.5/,disp(rep)/r1 155,r2 200,r3 240,r4
400/;
TABLE co(rep,lav)
mat lux
r1 1 2.5
r2 1.5 2.5
r3 3 3
r4 2.5 4;
VARIABLES x(lav),w;POSITIVE VARIABLE x;
EQUATIONS ob,vinc(rep);
ob..w =e= sum(lav,ric(lav)*x(lav));
vinc(rep)..sum(lav,co(rep,lav)*x(lav)) =l= disp(rep);
MODEL lavatrici/all/;OPTIONS lp=cplex;
SOLVE lavatrici Using LP maximizing w;
DISPLAY x.l,w.l;
Programmazione Lineare
Esempio pastificio
Due dimensioni (allocazione di risorse)
Un reparto di un’azienda alimentare produce pasta sotto
forma di farfalle e rigatoni, con un guadagno netto rispettivo
di 280 e 250 Euro a tonnellata. Ogni tonnellata di farfalle
richiede 1 ora per la macinazione, 4 ore per la produzione e 3
ore per la confezione, mentre ogni tonnellata di rigatoni
richiede 1 ora per la macinazione, 3 ore per la produzione e 4
ore per la confezione. Il reparto ha a disposizione 40 ore di
macchinario per la macinazione, 144 ore di macchinario per
la produzione e 180 ore di macchinario per la confezione.
Determinare il piano di lavoro che rende massimo il profitto
totale.
f. m. s. m. necessità
proteine 100 Kg/ton 20 Kg/ton 10 Kg
zuccheri 50 Kg/ton 200 Kg/ton 25 Kg
grassi 45 Kg/ton 36 Kg/ton 9 Kg
costo 150 €/ton 40 €/ton
Programmazione Lineare
Esempio dieta vitelloni
100x1 + 20x2 ≥ 10
50x1 + 200x2 ≥ 25
45x1 + 36x2 ≥ 9
x1 , x2 ≥ 0
Soluzione: x = (0,3), z = 15
Programmazione Lineare
Esempio dieta 2
SETS alim/a1,a2/,princ/prot,zucc/;
PARAMETERS costo(alim)/a1 7,a2 5/,rich(princ)/prot 600,zucc 1200/;
TABLE cont(princ,alim)
a1 a2
prot 100 200
zucc 300 400;
VARIABLES costot,x(alim);POSITIVE VARIABLE x;
EQUATIONS ob,minforn(princ);
ob..costot =e= sum(alim,costo(alim)*x(alim));
minforn(princ)..sum(alim,cont(princ,alim)*x(alim)) =g= rich(princ);
MODEL dieta2/all/;OPTIONS lp=cplex;
SOLVE dieta2 USING lp MINIMIZING costot;
DISPLAY x.l,costot.l;
Programmazione Lineare
Esempio telefonate
Due dimensioni (dieta)
Un’azienda pubblicitaria deve svolgere un’indagine
telefonica, per la quale necessita di almeno 150
risposte da donne sposate, 110 da donne non
sposate, 120 da uomini sposati e 100 da uomini non
sposati. Le telefonate fatte di giorno costano 1 € l’una
e danno probabilità di risposta del 30% di donne
sposate, 10% di donne non sposate, 10% di uomini
sposati e 10% di uomini non sposati, mentre quelle
fatte di sera costano 1,6 € l’una e danno probabilità di
risposta del 30% di donne sposate, 20% di donne non
sposate, 30% di uomini sposati e 15% di uomini non
sposati. Decidere quante telefonate effettuare per
minimizzare il costo dell’indagine.
Programmazione Lineare
Esempio telefonate
g s necessità
d.s. 0.3 0.3 150
d.n.s. 0.1 0.2 110
u.s. 0.1 0.3 120
u.n.s. 0.1 0.15 100
costo 1 1.6
Programmazione Lineare
Esempio telefonate
MIN x1 + 1.6x2
Variabili decisionali:
x1 = lotti prodotti dalla macchina Ma
x2 = lotti prodotti dalla macchina Mb
Programmazione Lineare
Esempio officina
MIN 110 x1 + 90 x2
x1 + x2 = 130
x1 ≤ 96
x2 ≤ 64
x1 , x2 ≥ 0
x1 + 3x2 ≤ 18
4x1 + 5x2 ≥ 40
x1 ≤ 6
x2 ≥ 5
x1 , x 2 ≥ 0
Programmazione Lineare
Esempio lamiere
SETS pezzi/p1*p2/;SCALAR totlam/18/,oresat/40/;
PARAMETERS lam(pezzi)/p1 1,p2 3/,lav(pezzi)/p1 4,p2 5/,
prezzo(pezzi)/p1 500,p2 1850/;
VARIABLES ricavo,x(pezzi);POSITIVE VARIABLE x;
x.up('p1')=6;x.lo('p2')=5;
EQUATIONS ob,maxlam,minlav;
ob..sum(pezzi,prezzo(pezzi)*x(pezzi)) =e= ricavo;
maxlam..sum(pezzi,lam(pezzi)*x(pezzi)) =l= totlam;
minlav..sum(pezzi,lav(pezzi)*x(pezzi)) =g= oresat;
MODEL lamiere/all/;OPTIONS lp=cplex;
SOLVE lamiere USING lp MAXIMIZING ricavo;
DISPLAY ricavo.l,x.l;
Programmazione Lineare
Esempio investimenti
Due dimensioni (misto)
Un investitore considera due investimenti, A
e B, la cui resa rispettiva è 30 e 25 € per
pacchetto di titoli. Per imposizione di
mercato il numero di pacchetti acquistati di
B deve essere compreso fra il numero di
pacchetti acquistati di A meno 3 e il doppio
del numero di pacchetti acquistati di A più 2.
Determinare la combinazione di acquisti che
permette di ottenere la massima resa.
Programmazione Lineare
Esempio investimenti
x1 - x2 ≤ 3
-2x1 + x2 ≤ 2
x1 , x2 ≥ 0
Infinitamente migliorabile
Programmazione Lineare
Esempio investimenti
SETS pac/p1,p2/,vi/v1,v2/;
PARAMETERS resa(pac)/p1 30,p2 25/,tn(vi)/v1 3,v2 2/;
TABLE coef(vi,pac)
p1 p2
v1 1 -1
v2 -2 1;
VARIABLES resatot,x(pac);POSITIVE VARIABLE x;
EQUATIONS ob,vinc(vi);
ob..resatot =e= sum(pac,resa(pac)*x(pac));
vinc(vi)..sum(pac,coef(vi,pac)*x(pac)) =l= tn(vi);
MODEL invest/all/;Options lp=cplex;
SOLVE invest USING lp MAXIMIZING resatot;
DISPLAY x.l,resatot.l;
Programmazione Lineare
Esempio miscela mat sfusi (2 dim)
Un commerciante acquista due materiali sfusi, MA e MB, li
mescola e vende la miscela ottenuta. Puo’ acquistare un
massimo di 12 ton al giorno di MA al prezzo di 290
Euro/ton ed un massimo di 21 ton al giorno di MB al
prezzo di 220 Euro/ton. Le sue apparecchiature devono
miscelare almeno 40 ton al giorno per essere redditizie. Il
costo di miscelazione e’ pari a 20 Euro/ton ed il prezzo di
vendita della miscela pari a 350 Euro/ton. Si richiede che
la miscela contenga almeno il 40% di MA. Pianificare le
quantita’ di MA e di MB da acquistare e miscelare al
giorno per ottenere il massimo guadagno totale. Ripetere
il problema nel caso in cui le sue apparecchiature devano
miscelare almeno 30 ton al giorno per essere redditizie.
Programmazione Lineare
Esempio miscela materiali sfusi
MAX 40 x1 + 110 x2
x1 ≤ 12
x2 ≤ 21
x1 + x2 ≥ 40 (30)
-0.6 x1 + 0.4 x2 ≤ 0
x1, x2 ≥ 0
P1 P2 P3 disponib.
Ma 1 ore/ton 4 ore/ton 5 ore/ton 50 ore
Mb 3 ore/ton 2 ore/ton 4 ore/ton 39 ore
Prof 240 €/ton 360 €/ton 500 €/ton
Max 9 ton
Programmazione Lineare
Esempio produzione2
Variabili decisionali: x1, x2, x3
(tonnellate di P1, P2, P3)
variabili non negative
Vincoli:
- Ore disponibili di Ma,
-Ore disponibili di Mb,
-Massimo numero di ton. vendibili di P2
Programmazione Lineare
Esempio produzione2
Modello matematico:
MAX 240x1+ 360x2+ 500x3
x1+ 4x2+ 5x3 ≤ 50
3x1+ 2x2+ 4x3 ≤ 39
x2 ≤ 9
x1, x2, x3 ≥ 0
Soluzione: x = 9 w = 12100
0
10
Programmazione Lineare
Esempio agricoltura2
SETS ris/sup,semin,seme/,pro/p1,p2,p3/;
PARAMETERS quant(ris)/sup 22,semin 63,seme 9/,resa(pro)/p1 400,p2
560,p3 850/;
TABLE consumo(ris,pro)
p1 p2 p3
sup 1 1 1
semin 2 3 4.5
seme 1 0 0;
VARIABLES x(pro),proftot;POSITIVE VARIABLE x;
EQUATIONS ob,disp(ris);
ob..proftot =e= sum((pro),resa(pro)*x(pro));
disp(ris)..sum(pro,consumo(ris,pro)*x(pro)) =l= quant(ris);
MODEL agri2/all/;OPTIONS lp=cplex;
SOLVE agri2 USING lp MAXIMIZING proftot; DISPLAY x.l,proftot.l;
Programmazione Lineare
Esempio asilo, tre dimens. (dieta)
I bambini di un asilo vengono alimentati
con latte, che contiene 60 grammi di
proteine e 30 unità di vitamine per litro e
costa 0,9 € per litro, carne, che contiene
180 grammi di proteine e 20 unità di
vitamine per kg e costa 6 € per kg, e infine
frutta, che contiene 45 grammi di proteine e
60 unità di vitamine per kg e costa 1 € per
kg. Ogni bambino richiede almeno 300
grammi di proteine e 240 unità di vitamine
al giorno. Determinare la dieta a minimo
costo.
Programmazione Lineare
Esempio asilo
prot. vit. costo
latte 60 g/l 1 un/l 0.9 €/l
carne 180 g/kg 4 un/kg 6 €/kg
frutta 45 g/kg 5 un/kg 3 €/kg
rich. 300g 240 un
Programmazione Lineare
Esempio asilo
MIN 0.9x1 + 6x2 + x3
60x1 + 180x2 + 45x3 ≥ 300
30x1 + 20x2 + 60x3 ≥ 240
x1, x2, x3 ≥ 0
Soluzione:
x1 = 0, x2 = 0, x3 = 20, costo = 10
Programmazione Lineare
Esempio tigri
SETS cibi/bue,cavallo,pastone/,principi/proteine,calorie/;
PARAMETERS costo(cibi)/bue 3,cavallo 4,pastone 0.5/,
richiesta(principi)/proteine 1000,calorie 12500/;
TABLE contenuti(principi,cibi)
bue cavallo pastone
proteine 150 200 50
calorie 2500 2000 800;
VARIABLES x(cibi),z;POSITIVE VARIABLE x;
EQUATIONS costot,vinc(principi);
costot..z =e= sum(cibi,costo(cibi)*x(cibi));
vinc(principi)..sum(cibi,contenuti(principi,cibi)*x(cibi)) =g=
richiesta(principi);
MODEL tigri/all/;OPTIONS lp=cplex;
SOLVE tigri USING lp MINIMIZING z;
DISPLAY x.l,z.l;
Programmazione Lineare
Esempio omogeneizzato
Tre dimensioni (misto)
Un omogeneizzato di frutta viene ottenuto
miscelando i frutti F1, che contiene 2 unità di
vitamina A e 4 unità di vitamina C per kg e costa
0.40 € per kg, F2, che contiene 1 unità di vitamina
A e 3 unità di vitamina C per kg e costa 0.35 € per
kg, F3, che contiene 3 unità di vitamina A e 2 unità
di vitamina C per kg e costa 0.25 € per kg. Si
richiede che la miscela contenga almeno 2 unità
di vitamina A e 3 unità di vitamina C per kg.
Determinare la composizione a minimo costo.
Programmazione Lineare
Esempio omogeneizzato
Tre dimensioni (misto)
Vit. A Vit. C costo
F1 2 un./kg 4 un./kg 0.40 €/ kg
F2 1 un./kg 3 un./kg 0.35 €/ kg
F3 3 un./kg 2 un./kg 0.25 €/ kg
rich. 2 un./kg 3 un./kg
Programmazione Lineare
Esempio omogeneizzato
Tre dimensioni (misto)
MIN 0.40 x1 + 0.35 x2 + 0.25 x3
2 x1 + x2 + 3 x3 ≥ 2
4 x1 + 3 x2 + 2 x3 ≥ 3
x1 + x2 + x3 = 1
x1, x2, x3 ≥ 0
5
b c
3
a
6 4 7
9
2
e d
Programmazione Lineare
Esempio flusso
MAX xab + xae
xab - xbc - xbd - xbe = 0
xae + xbe + xde = 0
xbd + xcd - xde = 0
-3 ≤ xab ≤ 3
-9 ≤ xae ≤ 9
-5 ≤ xbc ≤ 5
-4 ≤ xbd ≤ 4
-6 ≤ xbe ≤ 6
-7 ≤ xcd ≤ 7
-2 ≤ xde ≤ 2
xij libere in segno
Soluzione: 3, 8, 5, 4, -6, -6,-2; 11.
Programmazione Lineare
Esempio flusso
SETS str/ab,ae,bc,bd,be,cd,de/;
VARIABLES flutot,x(str);FREE VARIABLE x;
x.lo('ab')=-3;x.up('ab')=3;
x.lo('ae')=-9;x.up('ae')=9;
x.lo('bc')=-5;x.up('bc')=5;
x.lo('bd')=-4;x.up('bd')=4;
x.lo('be')=-6;x.up('be')=6;
x.lo('cd')=-7;x.up('cd')=7;
x.lo('de')=-2;x.up('de')=2;
EQUATIONS ob,eqb,eqd,eqe;
ob..flutot =e= x('ab')+x('ae');
eqb..x('ab')-x('bc')-x('bd')-x('be') =e= 0;
eqd..x('bd')+x('cd')-x('de') =e= 0;
eqe..x('ae')+x('be')+x('de') =e= 0;
MODEL flussi/all/;OPTIONS lp=cplex;
SOLVE flussi USING lp MAXIMIZING flutot;
DISPLAY x.l,flutot.l;
Programmazione Lineare
Esempio trasporti 2 (4 dimensioni)
Una ditta fornitrice di calcestruzzo pronto per la
gettata possiede due magazzini di materie prime, Ma
e Mb, in grado di rifornire rispettivamente 17 e 19
betoniere al giorno. Vengono richieste da due cantieri
diversi, C1 e C2, rispettivamente 18 e 11 betoniere di
calcestruzzo entro la giornata. I costi di trasporto
unitario sono dati in tabella:
C1 C2
Ma 14 31
Mb 21 16
Si organizzi il trasporto in modo da minimizzare il
costo totale.
Programmazione Lineare
Esempio trasporti 2
MIN 14 xa1 + 31 xa2 + 21 xb1 + 16 xb2
xa1 + xa2 ≤ 17
xb1 + xb2 ≤ 19
xa1 + xb1 ≥ 18
xa2 + xb2 ≥ 11
xa1, xa2, xb1, xb2 ≥ 0
Soluzione: x = C1 C2 z = 435
Ma 17 0
Mb 1 11;
Programmazione Lineare
Esempio trasporti 2
SETS mag/ma,mb/,cant/c1,c2/;
PARAMETERS disp(mag)/ma 17,mb 19/,ric(cant)/c1 18,c2 11/;
TABLE cost(mag,cant)
c1 c2
ma 14 31
mb 21 16;
VARIABLES x(mag,cant),costot;POSITIVE VARIABLE x;
EQUATIONS ob,part(mag),arr(cant);
ob..costot =e= sum((mag,cant),cost(mag,cant)*x(mag,cant));
part(mag)..sum(cant,x(mag,cant)) =l= disp(mag);
arr(cant)..sum(mag,x(mag,cant)) =g= ric(cant);
MODEL trapic/all/;OPTIONS lp=cplex;
SOLVE trapic USING lp MINIMIZING costot;
DISPLAY x.l,costot.l;
Programmazione Lineare
Esempio trasporti (12 dimensioni)
Una ditta fornitrice di calcestruzzo possiede tre
magazzini, A, B, C, capaci di fornire rispettiva-
mente 80, 65 e 45 betoniere al giorno, e deve
servire quattro cantieri, 1, 2, 3, 4, che richiedono
15, 25, 30, 50 betoniere al giorno. Il costo unitario
di trasporto è dato in tabella:
1 2 3 4
A 41 27 28 24
Cij= B 40 29 42 23
C 37 30 27 21
Organizzare il rifornimento al minimo costo di
trasporto totale.
Programmazione Lineare
Esempio trasporti
di = 80, 65, 45; rj = 15, 25, 30, 50
xij = 1 2 3 4
A 0 25 30 0
B 0 0 0 20
C 15 0 0 30
z = 3160
Programmazione Lineare
Esempio miscelazione
3 benzine, a, b, c, vengono ottenute miscelando 4
prodotti, 1, 2, 3, 4. Le 3 benzine vengono vendute
al prezzo rispettivo di 5.5, 4.5 e 3.5; i 4 prodotti
sona a disposizione in quantità rispettive di 3000,
2000, 4000 e 1000 e costano 3, 6, 4 e 5. Vi sono i
seguenti vincoli di miscelazione:
prod. 1 2 3 4
benz a ≤30% ≥40% ≤50% lib
b ≤50% ≥10% lib lib
c ≥70% lib lib lib
Determinare le miscele a massimo guadagno
Programmazione Lineare
Esempio miscelazione
MAX (5.5-3)xa1+(5.5-6)xa2+(5.5-4)xa3+(5.5-5)xa4+
(4.5-3)xb1+(4.5-6)xb2+(4.5-4)xb3+(4.5-5)xb4+
(3.5-3)xc1+(3.5-6)xc2+(3.5-4)xc3+(3.5-5)xc4
xa1+xb1+xc1≤3000
xa2+xb2+xc2≤2000
xa3+xb3+xc3≤4000
xa4+xb4+xc4≤1000
Programmazione Lineare
Esempio miscelazione
xa1 ≤ 0.3 (xa1+xa2+xa3+xa4)
xa2 ≥ 0.4 (xa1+xa2+xa3+xa4)
xa3 ≤ 0.5 (xa1+xa2+xa3+xa4)
xb1 ≤ 0.5 (xb1+xb2+xb3+xb4)
xb2 ≥ 0.1 (xb1+xb2+xb3+xb4)
xc1 ≥ 0.7 (xc1+xc2+xc3+xc4)