借助于Matlab用贯序算法求解目标规划问题.doc
- 文档编号:4712330
- 上传时间:2023-05-07
- 格式:DOC
- 页数:12
- 大小:179.50KB
借助于Matlab用贯序算法求解目标规划问题.doc
《借助于Matlab用贯序算法求解目标规划问题.doc》由会员分享,可在线阅读,更多相关《借助于Matlab用贯序算法求解目标规划问题.doc(12页珍藏版)》请在冰点文库上搜索。
《计量地理学》(徐建华,高等教育出版社,2005)配套实习指导
§17.借助于Matlab用贯序算法求解目标规划问题
虽然Matlab没有提供直接求解目标规划的优化工具,但是根据目标规划的求解思路——单纯形方法。
我们可以将一个目标规划问题分解成若干线性规划问题,通过序贯式算法借助于Matlab优化工具进行求解。
例1:
教材第6章第3节中的目标规划问题:
首先将上述问题化为标准形式:
然后按照以下步骤分解计算:
第一步:
求解如下线性规划问题:
mind1
2x1+x2+x3=11
x1-x2+d1_-d1=0
x1,x2,x3>=0,d1_>=0,d1>=0
对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:
[x,fval]=linprog(f,[],[],Aeq,beq,lb,[])
其中,参数如下:
Aeq=
2
1
1
0
0
0
0
0
0
1
-1
0
1
-1
0
0
0
0
beq=
11
0
f=
0
0
0
0
1
0
0
0
0
lb=
0
0
0
0
0
0
0
0
0
运行后,得求解结果如下:
Optimizationterminatedsuccessfully.
x=
0.1645
6.0628
4.6083
267.4155
261.5173
0
0
0
0
fval=
0
即:
d1=0
第二步:
求解如下线性规划问题:
mind2_+d2
2x1+x2+x3=11
x1-x2+d1_-d1=0
x1+2x2+d2_-d2=10
d1=0
x1,x2,x3>=0,d1_>=0,d1>=0,d2_>=0,d2>=0
对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:
[x,fval]=linprog(f,[],[],Aeq,beq,lb,[],x0)
其中,参数如下:
Aeq=
2
1
1
0
0
0
0
0
0
1
-1
0
1
-1
0
0
0
0
1
2
0
0
0
1
-1
0
0
0
0
0
0
1
0
0
0
0
beq=
11
0
10
0
f=
0
0
0
0
0
1
1
0
0
lb=
0
0
0
0
0
0
0
0
0
x0=
0.1645
6.0628
4.6083
267.4155
261.5173
0
0
0
0
运行后,得求解结果如下:
x=
0.0577
4.9712
5.9135
4.9135
0
0.0000
0.0000
0
0
fval=
5.1844e-010
即:
d2_+d2=5.1844e-010≈0
第三步:
求解如下线性规划问题:
mind3_
2x1+x2+x3=11
x1-x2+d1_-d1=0
x1+2x2+d2_-d2=10
8x1+10x2+d3_-d3=56
d1=0
d2_+d2=0
x1,x2,x3>=0;d1_>=0,d1>=0,d2_>=0,d2>=0,d3_>=0,d3>=0
对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:
[x,fval]=linprog(f,[],[],Aeq,beq,lb,[],x0)
其中,参数如下:
Aeq=
2
1
1
0
0
0
0
0
0
1
-1
0
1
-1
0
0
0
0
1
2
0
0
0
1
-1
0
0
8
10
0
0
0
0
0
1
-1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
1
1
0
0
beq=
11
0
10
56
0
0
f=
0
0
0
0
0
0
0
1
0
lb=
0
0
0
0
0
0
0
0
0
x0=
0.0577
4.9712
5.9135
4.9135
0
0
0
0
0
运行后,输出结果如下:
x=
2.2793
3.8603
2.5810
1.5810
0
0.0000
0.0000
0.0000
0.8380
fval=
3.6940e-013
最后得到如下一组满意解:
2.2793
3.8603
2.581
1.581
0
0
0
0
0.838
可以看出,以上求解的满意解方案不同于用Lindo软件求得的结果。
这是因为,该问题本身有多重解,而linprog函数求解算法又不同于Lindo的缘故。
有兴趣的读者可以进一步验证,上述解和借助于Lindo软件用贯序方法求解的结果都是满意解方案。
例2:
教材第6章第4节中的目标规划问题,土地利用问题:
耕地面积约束:
最低收获量约束:
目标约束为:
即:
非负约束:
对于上述目标规划问题,可以按照如下两个步骤进行分解求解:
第一步:
求解线性规划问题:
mind1_+d1
x11+x21+x31=100
x12+x22+x32=300
x13+x23+x33=200
11000x11+9500x12+9000x13>=190000
8000x21+6800x22+6000x23>=130000
14000x31+12000x32+10000x33>=350000
11000x11+9500x12+9000x13+8000x21+6800x22+6000x23+14000x31+12000x32+10000x33+d1_-d1=6100000
xij>=0(i,j=1,2,3);d1_>=0,d1>=0
对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:
[x,fval]=linprog(f,A,b,Aeq,beq,lb,[])
其中,参数如下:
A=
-11000
-9500
-9000
0
0
0
0
0
0
0
0
0
0
0
-8000
-6800
-6000
0
0
0
0
0
0
0
0
0
0
0
-14000
-12000
-10000
0
0
b=
-190000
-130000
-350000
Aeq=
1
0
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
1
0
0
1
0
0
1
0
0
11000
9500
9000
8000
6800
6000
14000
12000
10000
1
-1
beq=
100
300
200
6100000
f=
0
0
0
0
0
0
0
0
0
1
1
lb=
0
0
0
0
0
0
0
0
0
0
0
求解运行,输出结果:
x=
33.2724
108.3943
145.3961
16.4696
54.3202
0.6296
50.2580
137.2855
53.9743
0.0000
0.0000
fval=
2.6261e-014
即:
d1_+d1=2.6261e-014≈0
第二步:
求解线性规划问题:
mind2_+d2
x11+x21+x31=100
x12+x22+x32=300
x13+x23+x33=200
11000x11+9500x12+9000x13>=190000
8000x21+6800x22+6000x23>=130000
14000x31+12000x32+10000x33>=350000
11000x11+9500x12+9000x13+8000x21+6800x22+6000x23+14000x31+12000x32+10000x33+d1_-d1=6100000
d1_+d1=0
13200x11+11400x12+10800x13+12000x21+10200x22+9000x23+11200x31+9600x32+8000x33+d2_-d2=6600000
xij>=0(i,j=1,2,3);d1_>=0,d1>=0,d2_>=0,d2>=0
对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:
[x,fval]=linprog(f,A,b,Aeq,beq,lb,[])
其中,参数如下:
A=
-11000
-9500
-9000
0
0
0
0
0
0
0
0
0
0
0
0
0
-8000
-6800
-6000
0
0
0
0
0
0
0
0
0
0
0
0
0
-14000
-12000
-10000
0
0
0
0
b=
-190000
-130000
-350000
Aeq=
1
0
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
1
0
0
0
0
11000
9500
9000
8000
6800
6000
14000
12000
10000
1
-1
0
0
13200
11400
10800
12000
10200
9000
11200
9600
8000
0
0
1
-1
0
0
0
0
0
0
0
0
0
1
1
0
0
beq=
100
300
200
6100000
6600000
0
f=
0
0
0
0
0
0
0
0
0
0
0
1
1
lb=
0
0
0
0
0
0
0
0
0
0
0
0
0
运行输出求解结果:
x=
5.9011
232.5826
198.5503
12.8145
4.2771
0.7905
81.2844
63.1403
0.6592
0.0000
0.0000
0.0000
0.0000
fval=
1.0126e-015
即:
d2_+d2=1.0126e-015≈0
最后得到一个非劣解方案,如下表:
I等耕地
II等耕地
III等耕地
水稻
5.9011
232.5826
198.5503
大豆
12.8145
4.2771
0.7905
玉米
81.2844
63.1403
0.6592
同样可以看出,以上求解的满意解方案不同于用LINDO软件求得的结果。
这是因为,该问题本身有多重解,而linprog函数求解算法又不同于LINDO的缘故。
有兴趣的读者可以进一步验证,上述解和借助于LINDO软件用贯序方法求解的结果都是满意解方案。
133
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 借助于 Matlab 用贯序 算法 求解 目标 规划 问题