Originally posted by: ljb843
int NbISets=...;
int NbJSets=...;
int NbKSets=...;
int NbTSets=...;
int NbJSopens=...;
int NbTSopens=...;
range ISets =1..NbISets;
range JSets =1..NbJSets;
range KSets =1..NbKSets;
range TSets =1..NbTSets;
float DemandKS[KSets];
float returnKS[KSets];
execute{
var y1, y2, y3, y4, y5, y6;
y1=Math.random();
y2=(-2)*Math.log(y1);
y3=Math.sqrt(y2);
y4=6.28*y1;
y5=Math.sin(y4);
y6=y3*y5;
DemandKS[1]=11000+1000*y6;
DemandKS[2]=7500+500*y6;
DemandKS[3]=15000+1000*y6;
DemandKS[4]=12000+1000*y6;
DemandKS[5]=19000+1000*y6;
returnKS[1]=8000+2000*Math.random();
returnKS[2]=6000+1000*Math.random();
returnKS[3]=12000+2000*Math.random();
returnKS[4]=10000+1000*Math.random();
returnKS[5]=16000+2000*Math.random();
}
float Morepunishrate[KSets] = ...;
float Lesspunishrate[KSets] = ...;
float AbilityJS[JSets]=...;
float AbilityTS[TSets]=...;
float returnrateJS[JSets]=...;
float returnrateTS[TSets]=...;
float FixedfeeJS[JSets]= ...;
float FixedfeeTS[TSets]= ...;
float CheckfeerateJS[JSets]= ...;
float CheckfeerateTS[TSets]= ...;
float DisposefeerateJS[JSets]= ...;
float DisposefeerateTS[TSets]= ...;
float CostIJ[ISets][JSets]= ...;
float CostJI[JSets][ISets]= ...;
float CostJK[JSets][KSets]= ...;
float CostKJ[KSets][JSets]= ...;
float CostKT[KSets][TSets]= ...;
float CostTI[TSets][ISets]= ...;
float buypriceIS[ISets]= ...;
dvar float+ TransIJ[ISets][JSets];
dvar float+ TransJI[JSets][ISets];
dvar float+ TransJK[JSets][KSets];
dvar float+ TransKJ[KSets][JSets];
dvar float+ TransTI[TSets][ISets];
dvar float+ TransKT[KSets][TSets];
dvar boolean OpenJS[JSets];
dvar boolean OpenTS[TSets];
dvar float+ buyIS[ISets];
dexpr float transfeeIJ=sum(i in ISets,j in JSets)CostIJ[i][j]*TransIJ[i][j];
dexpr float transfeeJI=sum(i in ISets,j in JSets)CostJI[j][i]*TransJI[j][i];
dexpr float transfeeJK=sum(j in JSets,k in KSets)CostJK[j][k]*TransJK[j][k];
dexpr float transfeeKJ=sum(j in JSets,k in KSets)CostKJ[k][j]*TransKJ[k][j];
dexpr float transfeeKT=sum(k in KSets,t in TSets)CostKT[k][t]*TransKT[k][t];
dexpr float transfeeTI=sum(t in TSets,i in ISets)CostTI[t][i]*TransTI[t][i];
dexpr float checkfeeJS=sum(j in JSets,k in KSets)CheckfeerateJS[j]*TransKJ[k][j];
dexpr float checkfeeTS=sum(t in TSets,k in KSets)CheckfeerateTS[t]*TransKT[k][t];
dexpr float buyfeeIS=sum( i in ISets)buypriceIS[i]*buyIS[i];
dexpr float fixedfeeJS=sum( j in JSets)FixedfeeJS[j]*OpenJS[j];
dexpr float fixedfeeTS=sum( t in TSets)FixedfeeTS[t]*OpenTS[t];
dexpr float disposefeeTS=sum(t in TSets,k in KSets)DisposefeerateTS[t]*returnrateTS[t]*TransKT[k][t];
dexpr float disposefeeJS=sum(j in JSets,k in KSets)DisposefeerateJS[j]*returnrateJS[j]*TransKJ[k][j];
dexpr float morepunishfeeKS=sum(k in KSets)Morepunishrate[k]*maxl(DemandKS[k]-sum(j in JSets) TransJK[j][k],0);
dexpr float lesspunishfeeKS=sum(k in KSets)Lesspunishrate[k]*maxl(sum(j in JSets)TransJK[j][k]-DemandKS[k],0);
minimize
fixedfeeTS+fixedfeeJS+transfeeKT+transfeeTI+transfeeIJ+transfeeJI+transfeeJK+transfeeKJ+checkfeeJS+checkfeeTS+buyfeeIS+disposefeeTS+disposefeeJS+morepunishfeeKS+lesspunishfeeKS;
subject to {
forall( k in KSets)
ctKS:
sum(t in TSets) TransKT[k][t]+sum(j in JSets) TransKJ[k][j]==returnKS[k];
forall( t in TSets)
ctTSablity:
returnrateTS[t]*sum(k in KSets) TransKT[k][t]== sum(i in ISets) TransTI[t][i];
forall( j in JSets)
ctJSablity:
returnrateJS[j]*sum(k in KSets) TransKJ[k][j]== sum(i in ISets) TransIJ[i][j];
forall( i in ISets)
ctSupply:
sum(t in TSets)TransTI[t][i]+sum(j in JSets)TransJI[j][i]+buyIS[i]==sum(j in JSets)TransIJ[i][j];
forall( j in JSets)
ctJSbalance:
sum(i in ISets)TransIJ[i][j]== sum(k in KSets)TransJK[j][k] ;
forall( t in TSets)
ctTSability :
sum( k in KSets)TransKT[k][t]<=OpenTS[t]*AbilityTS[t];
forall( j in JSets)
ctJSability2 :
sum( k in KSets)TransKJ[k][j]<=OpenJS[j]*AbilityJS[j];
sum( t in TSets)OpenTS[t]<=NbTSopens;
sum( j in JSets)OpenJS[j]<=NbJSopens;
}
main {
for(var i=1;i<=10;i++)
{
writeln();
writeln("i= ",i);
var source = new IloOplModelSource("RMLP.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
var opl = new IloOplModel(def,cplex);
var data = new IloOplDataSource("RMLP.dat");
opl.addDataSource(data);
opl.generate();
cplex.solve();
if (cplex.solve()) {
var curr = cplex.getObjValue();
writeln();
writeln("OBJECTIVE: ",curr);
writeln("solution=",thisOplModel.OpenJS);
write("OpenJS= [ ");
for(var j in thisOplModel.JSets)
write(thisOplModel.OpenJS[j], " ");
writeln("]");
write("OpenTS= [ ");
for( var t in thisOplModel.TSets)
write(thisOplModel.OpenTS[t], " ");
writeln("]");
and it got result:
i= 1
No solution
i= 2
OBJECTIVE: 424112.6091577759
solution=OpenJS
OpenJS= [ [a IloNumVar] [a IloNumVar] [a IloNumVar] ]
OpenTS= [ [a IloNumVar] [a IloNumVar] [a IloNumVar] [a IloNumVar] ]
avgOBJ = 42411.2609157776
why "OpenJS= [ [a IloNumVar] [a IloNumVar] [a IloNumVar] ]"
thank you very much!!!
#DecisionOptimization#OPLusingCPLEXOptimizer