model steelT.mod; data steelT.dat; option solution_precision 10; option solver_msg 0; set AVAIL {1..T} default {}; param avail_obj {t in 1..T, AVAIL[t]}; param avail_dual {t in 1..T, AVAIL[t]}; param avail_orig; param previous_dual; for {t in 1..T} { let AVAIL[t] := {}; let avail_orig := avail[t]; let avail[t] := 0; let previous_dual := Infinity; repeat { let avail[t] := avail[t] + 1; solve; if time[t].dual = previous_dual then continue; let AVAIL[t] := AVAIL[t] union {avail[t]}; let avail_obj[t,avail[t]] := total_profit; let avail_dual[t,avail[t]] := time[t].dual; if time[t].dual = 0 then break; let previous_dual := time[t].dual; } let avail[t] := avail_orig; } display {t in 1..T}: {a in AVAIL[t]} (avail_obj[t,a], avail_dual[t,a]);