$title Solve multi-objective power generation model (moo02,SEQ=152) $onText This example demonstrates how to solve a multi-objective power generation model and is based on EPSCM in the model library. Keywords: multi-objective optimization, power generation $offText $inlineCom [ ] $if not set NBOBJ $set NBOBJ 2 $if not set METHOD $set METHOD Sandwiching Set p 'power generation units' / Lignite, Oil, Gas, RES / i 'load areas' / base, middle, peak / pi(p,i) 'availability of unit for load types' / Lignite.(base,middle) Oil.(middle,peak), Gas.set.i RES.(base, peak) / es(p) 'endogenous sources' / Lignite, RES / k 'objective functions' / cost, CO2emission, endogenous / points 'pareto points' / point1*point1000 /; $set min -1 $set max +1 Parameter dir(k) 'direction of the objective functions 1 for max and -1 for min' / cost %min%, CO2emission %min%, endogenous %max% / pareto_obj(points,k) 'objective values of the pareto points'; Set pheader / capacity, cost, CO2emission /; Table pdata(pheader,p) Lignite Oil Gas RES capacity [GWh] 61000 25000 42000 20000 cost [$/MWh] 30 75 60 90 CO2emission [t/MWh] 1.44 0.72 0.45 0; Parameter ad 'annual demand in GWh' / 64000 / df(i) 'demand fraction for load type' / base 0.6, middle 0.3, peak 0.1 / demand(i) 'demand for load type in GWh'; demand(i) = ad*df(i); Variable z(k) 'objective function variables'; Positive Variable x(p,i) 'production level of unit in load area in GWh'; Equation objcost 'objective for minimizing cost in K$' objco2 'objective for minimizing CO2 emissions in Kt' objes 'objective for maximizing endogenous sources in GWh' defcap(p) 'capacity constraint' defdem(i) 'demand satisfaction'; objcost.. sum(pi(p,i), pdata('cost',p)*x(pi)) =e= z('cost'); objco2.. sum(pi(p,i), pdata('CO2emission',p)*x(pi)) =e= z('CO2emission'); objes.. sum(pi(es,i), x(pi)) =e= z('endogenous'); defcap(p).. sum(pi(p,i), x(pi)) =l= pdata('capacity',p); defdem(i).. sum(pi(p,i), x(pi)) =g= demand(i); Model example / all /; Set kk(k) 'active objective functions'; kk(k) = yes; $if %NBOBJ%==2 kk('endogenous') = no; $onEcho > cplex.opt threads 1 $offEcho $libInclude moo %METHOD% example LP kk dir z points pareto_obj -iterations=20 -gridpoints=5 -savepoint=1 -savepoint_filename= -savepoint_dir=savepoints -solver=cplex -optfile_init=1 -optfile_main=1 execute 'gdxmerge savepoints%system.DirSep%*.gdx > %system.NullFile%'; display pareto_obj;