set INSIEME1; set INSIEME2; check card(INSIEME1)=card(INSIEME2); param costo{INSIEME1,INSIEME2}; var x{INSIEME1,INSIEME2}>=0; subject to un_solo_elemento_in_insieme2 {i in INSIEME1}: sum{j in INSIEME2} x[i,j] =1; subject to un_solo_elemento_in_insieme1 {j in INSIEME2}: sum{i in INSIEME1} x[i,j]=1; minimize incompatibilita_totale : sum{i in INSIEME1, j in INSIEME2} costo[i,j]*x[i,j]; --------------------------------------------------------------- set INSIEME1 := c1 c2 c3 c4 c5; set INSIEME2 := p1 p2 p3 p4 p5; param costo : p1 p2 p3 p4 p5 := c1 7 4 3 5 11 c2 8 14 2 12 3 c3 5 7 4 3 20 c4 9 14 12 11 5 c5 6 5 7 11 8 ; *************************************************************** set NODI := S n1 n2 n3 n4 n5 n6 n7 n8 n9 D; param sorgente := S ; param destinazione := D ; set ARCHI := (S,n1) (S,n2) (S,n3) (n1,n4) (n1,n6) (n2,n5) (n2,n6) (n3,n4) (n3,n5) (n4,n7) (n4,n8) (n5,n8) (n5,n9) (n6,n8) (n6,n9) (n7,D) (n8,n9) (n8,D) (n9,D); param cap := S n1 8 S n2 6 S n3 11 n1 n4 2 n1 n6 7 n2 n5 1 n2 n6 3 n3 n4 4 n3 n5 1 n4 n7 5 n4 n8 2 n5 n8 1 n5 n9 6 n6 n8 3 n6 n9 4 n7 D 10 n8 n9 2 n8 D 8 n9 D 6 ; -------------------------------- set NODI; param sorgente symbolic in NODI; param destinazione symbolic in NODI, <> sorgente; set ARCHI within {NODI,NODI}; param cap {ARCHI} >= 0; var x{(i,j) in ARCHI} >= 0, <= cap[i,j]; subject to equilibrio {k in NODI diff {sorgente,destinazione}}: sum {(i,k) in ARCHI} x[i,k] = sum {(k,j) in ARCHI} x[k,j]; maximize flusso_totale: sum {(j,destinazione) in ARCHI} x[j,destinazione]; **************************************************** set SORGENTI:= a1 a2 a3; set DESTINAZIONI=b1 b2 b3 b4; param costo_unitario_trasporto: b1 b2 b3 b4 := a1 2 3 5 2 a2 3 5 2 3 a3 4 6 3 3; param disp_sorgente:= a1 20 a2 30 a3 50 ; param rich_destinazione:= b1 10 b2 40 b3 30 b4 20 ; --------------------------------------------- set SORGENTI; set DESTINAZIONI; param costo_unitario_trasporto{SORGENTI, DESTINAZIONI}; param disp_sorgente{SORGENTI} >=0; param rich_destinazione{DESTINAZIONI}>=0; check sum{i in SORGENTI} disp_sorgente[i]= sum{j in DESTINAZIONI} rich_destinazione[j]; var x{SORGENTI,DESTINAZIONI}>=0; subject to uso_sorgente{i in SORGENTI}: sum{j in DESTINAZIONI} x[i,j]=disp_sorgente[i]; subject to richiesta_soddisfatta{j in DESTINAZIONI}: sum{i in SORGENTI} x[i,j]=rich_destinazione[j]; minimize costo_totale : sum{i in SORGENTI, j in DESTINAZIONI} costo_unitario_trasporto[i,j]*x[i,j]; **************************************************** set S := a b c d e f; param cost: a b c d e f := a . 7 11 3 4 9 b . . 5 6 14 10 c . . . 6 8 2 d . . . . 7 4 e . . . . . 11 f . . . . . .; -------------------------------------------------------- set S ordered; param n := card {S}; set SS := 0 .. (2**n - 1); set POW {k in SS} := {i in S: (k div 2**(ord(i)-1)) mod 2 = 1}; set LINKS := {i in S, j in S: ord(i) < ord(j)}; param cost {LINKS} >= 0; var X {LINKS} binary; minimize TotCost: sum {(i,j) in LINKS} cost[i,j] * X[i,j]; subj to Tour {i in S}: sum {(i,j) in LINKS} X[i,j] + sum {(j,i) in LINKS} X[j,i] = 2; subj to SubtourElim {k in SS diff {0,2**n-1}}: sum {i in POW[k], j in S diff POW[k]: (i,j) in LINKS} X[i,j] + sum {i in POW[k], j in S diff POW[k]: (j,i) in LINKS} X[j,i] >= 2; *****************************************************************