/********************************************* * OPL 12.6.0.0 Model * Author: Kyle Eyvindson * Creation Date: 11.3.2016 *********************************************/ int no_Stands = ...; int no_Scenarios = ...; range Stands = 1..no_Stands; range Scenarios = 1..no_Scenarios; float data_harvest[Scenarios][Stands]=...; float data_area[Stands]=...; float alpha = 0.9; float target = ...; int iter_CVAR=...; dvar float CVAR; dvar float+ mod_L_plus[Scenarios]; dvar float+ mod_L_neg[Scenarios]; dvar float+ Z; dvar float+ posZ[Scenarios]; dvar float+ negZ[Scenarios]; dvar float+ volume[Scenarios]; dvar float+ area; dvar float+ E_Vol; dvar boolean decision[Stands]; minimize sum(i in Stands)decision[i]*data_area[i]; subject to { CVAR <= 1000*iter_CVAR; CVAR == Z+(1/((1-alpha)*no_Scenarios))*sum(scenario in Scenarios) (posZ[scenario]); forall(scenario in Scenarios) mod_L_plus[scenario] -Z+negZ[scenario] - posZ[scenario] == 0; forall(scenario in Scenarios) (target-volume[scenario]) - mod_L_plus[scenario]+mod_L_neg[scenario] == 0; forall(scenario in Scenarios) volume[scenario] == sum(stand in Stands) (decision[stand]*data_harvest[scenario][stand]); area ==sum(i in Stands)decision[i]*data_area[i]; E_Vol == sum(j in Scenarios)volume[j]; } // UNCOMMENT IF YOU WANT TO RUN THE OPTIMIZATION ONCE FOR CVAR CONSTRAINT OF 5000 AND PRODUCE AN OUTPUT FILE /* main { var status = 0; thisOplModel.generate(); var Forest = thisOplModel; var data = Forest.dataElements; var def = Forest.modelDefinition; var ofile = new IloOplOutputFile("decision.txt"); Forest = new IloOplModel(def,cplex); Forest.addDataSource(data); Forest.generate(); cplex.solve() for (var d =1; d <= Forest.no_Stands; d++) { ofile.write(Forest.decision[d],","); } ofile.write(Forest.decision[Forest.no_Stands]); } */ // UNCOMMENT IF YOU WANT TO RUN THE OPTIMIZATION 50 TIMES AND PRODUCE AN OUTPUT FILE /* main { var status = 0; thisOplModel.generate(); var Forest = thisOplModel; var data = Forest.dataElements; var def = Forest.modelDefinition; var ofile = new IloOplOutputFile("decision_50_iterations.txt"); Forest = new IloOplModel(def,cplex); Forest.addDataSource(data); Forest.generate(); for (var iter_int=1; iter_int <= 50; iter_int++) { data.iter_CVAR = iter_int; Forest = new IloOplModel(def,cplex); Forest.addDataSource(data); Forest.generate(); if ( cplex.solve() ) { for (var d =1; d <= Forest.no_Stands-1; d++) { ofile.write(Forest.decision[d],","); } ofile.write(Forest.decision[Forest.no_Stands],"\r"); } else { writeln("No solution!"); break; } } } */