《用LINGO软件求解“非线性规划”问题;.pdf》由会员分享,可在线阅读,更多相关《用LINGO软件求解“非线性规划”问题;.pdf(3页珍藏版)》请在三一文库上搜索。
1、用用 LINGOLINGOLINGOLINGO 软件求解软件求解“非非线性规划线性规划”问题问题 丁老师(超盾博客) 一一. . . . 选址选址问题(问题(选取选取位置位置,使总运量最小)使总运量最小) 例例某工程,6个工地同时开工,每个工地的位置),( iii baM,距离值(单位:km)、水泥日 需求量)(td(单位:吨)由下表给出: i i i i MMMM 1 M 2 M 3 M 4 M 5 M 6 M i a1.258.750.55.7537.25 i b1.250.754.7556.57.75 )(td3547611 目前暂定2个临时料场位于P(5,1)、Q(2,7)用于存储水泥
2、,日储量20吨。假设从料场到工地之 间均可开通直线道路相连。试寻找更好的料场位置,使得总运输量(吨公里)更小。 解解将题目和表格进行整理得到: 6个工地i(程序j) 1 M 2 M 3 M 4 M 5 M 6 M 工地坐标 i a(程序a(j)1.258.750.55.7537.25 i b(程序b(j)1.250.754.7556.57.75 需求 demand )(td(程序d(j)3547611 假设:(1),( 21 ppP、),( 21 qqQ为料场; (2)从P调 j c1吨水泥到 j M, 从Q调 j c2吨水泥到 j M(1表示P, 2表示Q), j = 1, ,6. “总吨公
3、里”的表示方法:“总:; 吨:c; 公里:两点间距”,目标函数是“非 线性”的,根据上述“总吨公里”的表示方法得到“非线性”规划模型: 2 2 2 126 2 2 2 125 2 2 2 124 2 2 2 123 2 2 2 122 2 2 2 121 2 2 2 116 2 2 2 115 2 2 2 114 2 2 2 113 2 2 2 112 2 2 2 111 )75 . 7 ()25. 7()5 . 6() 3( )5()75 . 5 ()75. 4()5 . 0( )75 . 0 ()75. 8()25. 1()25 . 1 ( )75 . 7 ()25 . 7 ()5 . 6
4、() 3( )5()75.25 . 1 ()75 . 4 ()5 . 0( )75 . 0 ()75. 8()25 . 1 ()25. 1(min + + + + + += qqcqqc qqcqqc qqcqqc ppcppc ppcppc ppcppcf = + + =+ =+ =+ =+ =+ =+ =+ = = )2, 1( 20 20 )6., 1( 11 6 7 4 5 3 0 . . 6 1 262524232221 161514131211 2 1 21 2616 2515 2414 2313 2212 2111 iec cccccc cccccc jdcdcc cc cc c
5、c cc cc cc c ts i j ij i jijjjj ij 用LINGO9.0求解,首先分析此问题中的向量和矩阵,有: (1) 3 个 6 维向量:a, b, d; (2) 3 个 2 维向量:p, q, e,其中 p 和 q 表示题目中给出的最初暂定的两个料场的坐标; (3) 1 个 26 调度矩阵:c. LINGO总程序: sets: demand/1.6/ : a, b, d;! 3个6维向量; supply/1.2/ : p, q, e;! 3个2维向量; link(supply, demand) : c;! 1个26调度矩阵; endsets data: a = 1.25,
6、 8.75, 0.5, 5.75, 3, 7.25; b = 1.25, 0.75, 4.75, 5, 6.5, 7.75; d = 3, 5, 4, 7, 6, 11; e = 20, 20; enddata init: ! 迭代初始点; p = 5, 2; q = 1, 7; endinit !link(i, j) : c(i, j) 表示 26 调度矩阵; !obj 表示在结果中标注目标函数所在行代码; objmin = sum( link(i, j) : c(i, j) * ( ( p(i) - a(j) )2 + ( q(i) - b(j) )2 )(1/2) ); ! 先变i后变j
7、; for( demand(j) : demand_consum( supply(i) : c(i, j) ) = d(j); ); ! 先变j后变i; for( supply(i) : supply_consum( demand(j) : c(i, j) ) = e(i); ); for( supply(i) : free(x); free(y); );! 所有变量可取负值; end 点击保存后,按“Ctrl + S”运行得到结果: Objective value:85.26604 (即:总运输量为85.26604吨公里) VariableValueReduced Cost P( 1)3.2548830.000000 P( 2)7.2500000.8084079E-07 Q( 1)5.6523320.000000 Q( 2)7.7500000.2675276E-06 P(1)、P(2)、Q(1)、Q(2)的值即为对初始点(题给最初临时料场)优化迭代后得到的料 场的选取,即料场选取在),( 21 ppP= P(3.254883, 5.652332)与),( 21 qqQ= Q(7.250000, 7.750000)比较好。注意:程序中的P(1)对应数学式中的 1 p,但程序中 的P(2)对应的是数学式中的 1 q而不是 2 p。