找回密码
 注册
Simdroid-非首页
查看: 157|回复: 0

[1stOpt] 多目标优化问题求解!

[复制链接]
发表于 2010-6-29 15:17:24 | 显示全部楼层 |阅读模式 来自 北京海淀
本帖最后由 shamohu 于 2010-6-29 15:21 编辑

不论理论还是实际,都不存在使多目标都达到最优的可行解,一般都是将多目标转换成单目标来求解。最常用的是权重法,下面以一简单实例来演示如何用1stOpt来处理多目标优化问题:
Max. f1(x1,x2,x3)=0.5*x1+0.6*x2+0.7*x3
Min. f2(x1,x2,x3)=(x1-2*x2)^2 +(2*x2-3*x3)^2 +(3*x1-x1)^2
     约束条件
               x1+x2+x3=100
               10≤x1≤80
               20≤x2≤90
               15≤x3≤100
此例中有两个目标函数,用权重法合并成单一目标函数如下, p为权重,范围=[0,1]:
Min. -p*(0.5*x1+0.6*x2+0.7*x3)+(1-p)*(x1-2*x2)^2 +(2*x2-3*x3)^2 +(3*x1-x1)^2
用关键字“LoopConstant”,计算并显示p从0.1到0.9变化时的求解情况:
代码:

  1. LoopConstant p=[0.1:0.02:0.9];
  2. Parameter 10≤x1≤80,20≤x2≤90,15≤x3≤100;
  3. ConstStr f1=0.5*x1+0.6*x2+0.7*x3, f2=(x1-2*x2)^2 +(2*x2-3*x3)^2 +(3*x1-x1)^2;
  4. PassParameter f1,f2;
  5. PlotLoopData f1[x], f2;
  6. minfunction -p*f1+(1-p)*f2;
  7.             x1+x2+x3=100;
复制代码
结果见图k1,从图可看出,f1的最大值和f2的最小值随权重p值的变化只有微小的变动。

下面再换一种方式求解:
1:不考虑第二个目标函数f2,而仅考虑f1,分别求出f1的最小值和最大值
2:仅考虑f2,而将f1作为等式约束,求出对应于不同f1的f2最小值。

1: 仅考虑f1

  1. Parameter 10≤x1≤80,20≤x2≤90,15≤x3≤100;
  2. Maxfunction 0.5*x1+0.6*x2+0.7*x3;
  3.             x1+x2+x3=100;
复制代码
得f1最大值为66,将上述代码中"Maxfunction"改为"Minfunction",得f1最小值为:55

2:以f1为约束,求f2最小值

  1. LoopConstant a=[55:0.5:66];                  //f1变化范围
  2. Parameter 10≤x1≤80,20≤x2≤90,15≤x3≤100;
  3. ConstStr f1=0.5*x1+0.6*x2+0.7*x3, f2=(x1-2*x2)^2 +(2*x2-3*x3)^2 +(3*x1-x1)^2;
  4. PassParameter f1,f2;
  5. PlotLoopData f1[x], f2;
  6. minfunction f2;
  7.             x1+x2+x3=100;
  8.             f1=a;                            //f1等式约束
复制代码
结果见图k2,该图显示了多目标函数的可行域解,相对于权重法更加直观,选择范围也更广,如果是三个目标函数,做出来的就是一个三维可行域曲面了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-7-3 17:42 , Processed in 0.030810 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表