model oszlopgen2.mod; data oszlopgen2.dat; for {k in K} { # kiszámoljuk az élhalmaz költségét let Csucsok[k] := {}; for {(i,j) in Elcsop[k]} { let Csucsok[k] := Csucsok[k] union {i} union {j}; # let a[i,j,k] := 1; } } let {k in K} c[k] := card(Csucsok[k]); let {(i,j) in E, k in K} a[i,j,k] := card({(i,j)} intersect Elcsop[k]); for {counter in 1 .. 100} { problem Mester; printf "Oldjuk meg a megszoritott relaxált mester problémát a következő élcsoportokkal:\n"; display Elcsop; option relax_integrality 1; option solver cplex; solve; for {k in K: z[k] > 0} { printf "z[%d] = %f\n",k,z[k]; display Elcsop[k]; } printf "Duális változók:\n"; display elfedes; printf "Oldjuk meg az árazási problémát:\n"; let {(i,j) in E} pi[i,j] := elfedes[i,j]; problem Arazas; expand redukalt_koltseg; expand maxhossz; option relax_integrality 0; option solver cplex; solve; # Álljunk meg az oszlopgenerálással ha # az optimális célfüggvény értéke az árazási # problémának elég közel van 0-hoz if redukalt_koltseg >= -1e-10 then break; display x; display y; printf "Új élcsoport\n"; display {(i,j) in E: y[i,j] == 1}; let h := card(K) + 1; let K := K union {h}; let Elcsop[h] := {(i,j) in E: y[i,j] == 1}; let Csucsok[h] := {}; for {(i,j) in Elcsop[h]} { let Csucsok[h] := Csucsok[h] union {i} union {j}; # let a[i,j,h] :=1; } let c[h] := card( Csucsok[h] ); let {(i,j) in E} a[i,j,h] := card({(i,j)} intersect Elcsop[h]); } # end for {counter in 1..100} printf "Oldjuk meg az IP-t:\n"; display Elcsop; problem Mester; option relax_integrality 0; expand; solve; for {k in K: z[k] > 0} { printf "z[%d] = %f\n",k,z[k]; display Elcsop[k]; }