1、计量地理学(徐建华,高等教育出版社,2005)配套实习指导17.借助于Matlab用贯序算法求解目标规划问题虽然Matlab没有提供直接求解目标规划的优化工具,但是根据目标规划的求解思路单纯形方法。我们可以将一个目标规划问题分解成若干线性规划问题,通过序贯式算法借助于Matlab优化工具进行求解。例1:教材第6章第3节中的目标规划问题:首先将上述问题化为标准形式:然后按照以下步骤分解计算:第一步:求解如下线性规划问题:min d12x1+x2+x3=11x1-x2+d1_-d1=0x1,x2,x3=0,d1_=0,d1=0对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数
2、求解,函数调用命令为:x,fval=linprog(f,Aeq,beq,lb,)其中,参数如下:Aeq=2110000001-101-10000beq= 110f=000010000lb=000000000运行后,得求解结果如下:Optimization terminated successfully.x = 0.1645 6.0628 4.6083 267.4155 261.5173 0 0 0 0fval = 0即:d10第二步:求解如下线性规划问题:min d2_+d22x1+x2+x3=11x1-x2+d1_-d1=0x1+2x2+d2_-d2=10d1=0x1,x2,x3=0,d1_
3、=0,d1=0,d2_=0,d2=0对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:x,fval=linprog(f,Aeq,beq,lb,x0)其中,参数如下:Aeq=2110000001-101-10000120001-100000010000beq=110100f=000001100lb=000000000x0=0.16456.06284.6083267.4155261.51730000运行后,得求解结果如下:x = 0.0577 4.9712 5.9135 4.9135 0 0.0000 0.0000 0 0fval = 5.1844e-0
4、10即:d2_d25.1844e-0100第三步:求解如下线性规划问题:min d3_2x1+x2+x3=11x1-x2+d1_-d1=0x1+2x2+d2_-d2=108x1+10x2+d3_-d3=56d1=0d2_+d2=0x1,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=2110000001-101-10000120001-100810000001-10000100000
5、00001100beq=110105600f=000000010lb=000000000x0=0.05774.97125.91354.913500000运行后,输出结果如下:x = 2.2793 3.8603 2.5810 1.5810 0 0.0000 0.0000 0.0000 0.8380fval = 3.6940e-013最后得到如下一组满意解:2.27933.86032.5811.58100000.838可以看出,以上求解的满意解方案不同于用Lindo软件求得的结果。这是因为,该问题本身有多重解,而linprog函数求解算法又不同于Lindo的缘故。有兴趣的读者可以进一步验证,上述解
6、和借助于Lindo软件用贯序方法求解的结果都是满意解方案。例2:教材第6章第4节中的目标规划问题,土地利用问题:耕地面积约束:最低收获量约束: 目标约束为:即: 非负约束:对于上述目标规划问题,可以按照如下两个步骤进行分解求解:第一步:求解线性规划问题:min d1_+d1x11+x21+x31=100x12+x22+x32=300x13+x23+x33=20011000x11+9500x12+9000x13=1900008000x21+6800x22+6000x23=13000014000x31+12000x32+10000x33=35000011000x11+9500x12+9000x13
7、+8000x21+6800x22+6000x23+14000x31+12000x32+10000x33+d1_-d1=6100000xij=0 (i,j=1,2,3); d1_=0, d1=0对上述线性规划问题,可以借助于Matlab优化工具中的linprog函数求解,函数调用命令为:x,fval=linprog(f,A,b,Aeq,beq,lb,)其中,参数如下:A=-11000-9500-900000000000000-8000-6800-600000000000000-14000-12000-1000000b=-190000-130000-350000Aeq=10010010000010
8、010010000010010010011000950090008000680060001400012000100001-1beq=1003002006100000f=00000000011lb=00000000000求解运行,输出结果:x = 33.2724 108.3943 145.3961 16.4696 54.3202 0.6296 50.2580 137.2855 53.9743 0.0000 0.0000fval = 2.6261e-014即:d1_+d1=2.6261e-0140第二步:求解线性规划问题:min d2_+d2x11+x21+x31=100x12+x22+x32=3
9、00x13+x23+x33=20011000x11+9500x12+9000x13=1900008000x21+6800x22+6000x23=13000014000x31+12000x32+10000x33=35000011000x11+9500x12+9000x13+8000x21+6800x22+6000x23+14000x31+12000x32+10000x33+d1_-d1=6100000d1_+d1=013200x11+11400x12+10800x13+12000x21+10200x22+9000x23+11200x31+9600x32+8000x33+d2_-d2=660000
10、0xij=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-90000000000000000-8000-6800-60000000000000000-14000-12000-100000000b=-190000-130000-350000Aeq=10010010000000100100100000001001001000011000950090008000680060
11、001400012000100001-100132001140010800120001020090001120096008000001-10000000001100beq=100300200610000066000000f=0000000000011lb=0000000000000运行输出求解结果: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.0000fval = 1.0126e-015即:d2_+d2=1.0126e-0150最后得到一个非劣解方案,如下表:I等耕地II等耕地III等耕地水稻5.901 1232.582 6198.550 3大豆12.814 54.277 10.790 5玉米81.284 463.140 30.659 2同样可以看出,以上求解的满意解方案不同于用LINDO软件求得的结果。这是因为,该问题本身有多重解,而linprog函数求解算法又不同于LINDO的缘故。有兴趣的读者可以进一步验证,上述解和借助于LINDO软件用贯序方法求解的结果都是满意解方案。133