- 积分
- 32
- 注册时间
- 2004-9-29
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 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变化时的求解情况:
代码:
- LoopConstant p=[0.1:0.02:0.9];
- Parameter 10≤x1≤80,20≤x2≤90,15≤x3≤100;
- 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;
- PassParameter f1,f2;
- PlotLoopData f1[x], f2;
- minfunction -p*f1+(1-p)*f2;
- x1+x2+x3=100;
复制代码 结果见图k1,从图可看出,f1的最大值和f2的最小值随权重p值的变化只有微小的变动。
下面再换一种方式求解:
1:不考虑第二个目标函数f2,而仅考虑f1,分别求出f1的最小值和最大值
2:仅考虑f2,而将f1作为等式约束,求出对应于不同f1的f2最小值。
1: 仅考虑f1
- Parameter 10≤x1≤80,20≤x2≤90,15≤x3≤100;
- Maxfunction 0.5*x1+0.6*x2+0.7*x3;
- x1+x2+x3=100;
复制代码 得f1最大值为66,将上述代码中"Maxfunction"改为"Minfunction",得f1最小值为:55
2:以f1为约束,求f2最小值
- LoopConstant a=[55:0.5:66]; //f1变化范围
- Parameter 10≤x1≤80,20≤x2≤90,15≤x3≤100;
- 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;
- PassParameter f1,f2;
- PlotLoopData f1[x], f2;
- minfunction f2;
- x1+x2+x3=100;
- f1=a; //f1等式约束
复制代码 结果见图k2,该图显示了多目标函数的可行域解,相对于权重法更加直观,选择范围也更广,如果是三个目标函数,做出来的就是一个三维可行域曲面了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|