set k set1 /1*21/ j set2 /1*21/ m set3 /1*8/ i set4 /1*6/ p auxiliary superset /1*20/ ; set dynset(p) dynamic set; dynset(p) = no ; table z1(i,m) first table 1 2 3 4 5 6 7 8 1 8.321655727 0.321535361 4.351311336 0 2.351533551 0 2.351313019 3.351313359 2 5.351351359 0.351533513 5.9511515351 0 3.155262196 0 2.835135111 3.835133166 3 1.93513115 0.000251211 6.955051518 0 3.651655141 0 2.56431588 3.81515151 4 2.351311139 0.351313111 8.513515138 0 3.564151117 0 2.354153188 3.513153518 5 10.531313113 0.68651656 7.684653164 0 3.444654564 0 2.846465496 3.654515656 6 9.351321697 0.915184574 2.65451654 0 3.656451181 0 2.646546546 3.652152941 ; table y(i,k) second table 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 1 2 2 1 5.10235192 1.035135553 2.515535729 6.353531351 2.515124178 0 7.156465451 8.513185453 1.351353351 2.351331102 0 18.35153159 20.3513351531 6.535155315 6.351533511 0 11.73513521 14.23132231 2 2 2 1 6.12035479 2.53315493 3.253153693 1.0351533151 2.127353535 0 5.51420069 2.516553157 4.335113514 5.004215313 0 18.35136543 19.35135465 4.513225149 4.313513519 0 12.33513153 12.535465321 3 2 2 1 8.092055897 1.513313517 5.435131351 2.35153355 6.351313535 0 8.851651537 2.516843212 6.35153139 5.3351315111 0 18.35153449 19.35131511 3.533551521 3.351531129 0 3.635136116 10.63513514 4 2 2 1 5.210205163 1.125131541 5.235135113 2.351531532 8.351351353 0 8.1351529 2.65482211 4.351311357 5.635135351 0 18.93153198 20.35131317 4.569565921 5.135153747 0 12.38531012 12.93513351 5 2 2 1 2.183515687 1.213051374 3.453135397 5.035152473 2.351512886 0 9.351111138 9.996543212 4.351359273 5.835131533 0 19.085153153 20.351313511 3.321561336 3.351535336 0 2.985131731 11.29353131 6 2 2 1 2.203513536 1.335101707 2.653113555 1.51351354 1.351313515 0 2.751135133 2.81225212 6.513135924 5.513153514 0 18.35155274 19.3513516 1.731351538 1.351353648 0 8.321351214 9.37531551 ; parameter lb_weights(m), ub_weights(m) ; parameter fs(j,i), flag, w_HAT(j,m), fsSOL(p,j) ; scalar eps1 ; eps1 = 0.00001 ; variables obj obj_2 w(j,m) dist(i,m) yVAR(k) binary variables gamma(j,m) ; equations Eq_obj distance1(i,m) distance2(i,m) y_lowerbound(k) y_upperbound(k) constraintA(p) Eq_obj_2 new_constraint constraintA1(i) ; distance1(i,m).. dist(i,m) =g= z1(i,m) - sum(j, w(j,m) * fs(j,i)) ; distance2(i,m).. dist(i,m) =g= sum(j, w(j,m) * fs(j,i)) - z1(i,m) ; new_constraint.. obj_2 =l= 110-eps1 ; constraintA1(i).. sum((j,m), w(j,m) * fs(j,i)) =g= 110 ; constraintA(dynset).. sum((j,m), w(j,m) * fsSOL(dynset,j)) =g= 110 ; y_lowerbound(k).. yVAR(k) =g= 0 ; y_upperbound(k).. yVAR(k) =l= 2 ; Eq_obj.. obj =e= sum((i,m), dist(i,m)); Eq_obj_2.. obj_2 =e= sum((m,j), w_HAT(j,m) * sum(k$(ord(j) eq ord(k)), yVAR(k))) ; ******************************************************************************** ******************************************************************************** Model PROBLEM1 / Eq_obj, distance1, distance2, constraintA1, constraintA / ; Model PROBLEM2 / Eq_obj_2, y_lowerbound, y_upperbound, new_constraint / ; option mip = cplex, minlp = baron, nlp = conopt ; PROBLEM1.OptFile = 1 ; PROBLEM2.OptFile = 1 ; parameter pcount, pcount_max, flag ; fs(j,i) = sum(k$(ord(j) eq ord(k)), y(i,k)) ; fsSOL(p,j) = fs(j,"2") ; lb_weights(m) = - 10 ; ub_weights(m) = 10 ; flag = 1 ; pcount = 1 ; pcount_max = card(p) ; while (pcount le pcount_max and flag = 1, solve PROBLEM1 using mip minimizing obj ; w_HAT(j,m) = w.l(j,m) ; solve PROBLEM2 using minlp minimizing obj_2 ; if(PROBLEM2.modelstat = 1 or PROBLEM2.modelstat = 8, fsSOL(p,j) $(p.val = pcount) = sum(k$(ord(j) eq ord(k)), yVAR.l(k)) ; dynset(p) $(p.val = pcount) = yes ; ) ; if(PROBLEM2.modelstat <> 1 and PROBLEM2.modelstat <> 8, flag = 0 ; ) ; pcount = pcount + 1 ; ) ;