首页 > 解决方案 > 是否可以直接在 GAMS 中求解双目标模型?

问题描述

有没有可以直接解决多目标模型的命令?我的意思是,不使用加权和或 epsilon 约束方法,我们可以解决游戏中的多目标模型吗?

非常感谢!

标签: gams-math

解决方案


这是 GAMS 中的 epsilon 约束模型,适用于求解双目标优化问题和寻找帕累托最优前沿。

$title Pareto optimal front determination

$onText
For more details please refer to Chapter 2 (Gcode2.16), of the following book:
Soroudi, Alireza. Power System Optimization Modeling in GAMS. Springer, 2017.
--------------------------------------------------------------------------------
Model type: NLP
--------------------------------------------------------------------------------
Contributed by
Dr. Alireza Soroudi
IEEE Senior Member
email: alireza.soroudi@gmail.com
We do request that publications derived from the use of the developed GAMS code
explicitly acknowledge that fact by citing
Soroudi, Alireza. Power System Optimization Modeling in GAMS. Springer, 2017.
DOI: doi.org/10.1007/978-3-319-62350-4
$offText

Variable of1, of2, x1, x2;
Equation eq1, eq2, eq3, eq4;

eq1.. 4*x1 - 0.5*sqr(x2) =e= of1;
eq2.. -sqr(x1) + 5*x2    =e= of2;
eq3.. 2*x1 + 3*x2        =l= 10;
eq4.. 2*x1 -   x2        =g=  0;

x1.lo = 1; x1.up = 2;
x2.lo = 1; x2.up = 3;

Model pareto1 / all /;

Set counter / c1*c21 /;
Scalar E;
Parameter report(counter,*), ranges(*);

solve pareto1 using nlp maximizing of1;
ranges('OF1max') = of1.l;
ranges('OF2min') = of2.l;

solve pareto1 using nlp maximizing of2;
ranges('OF2max') = of2.l;
ranges('OF1min') = of1.l;

loop(counter,
   E = (ranges('OF2max') - ranges('OF2min'))*(ord(counter) - 1)/(card(counter) - 1) + ranges('OF2min');
   of2.lo = E;
   solve pareto1 using nlp maximizing of1;
   report(counter,'OF1') = of1.l;
   report(counter,'OF2') = of2.l;
   report(counter,'E')   = E;
);
display report;

推荐阅读