lingo解决线性规划问题的程序(经典)要点.pdf
《lingo解决线性规划问题的程序(经典)要点.pdf》由会员分享,可在线阅读,更多相关《lingo解决线性规划问题的程序(经典)要点.pdf(17页珍藏版)》请在三一文库上搜索。
1、Lingo12 软件培训教案 Lingo 主要用于求解线性规划,整数规划,非线性规划,V10 以上版本可编程。 例 1 一个简单的线性规划问题 0, 6002 100 350st. 32max yx yx x yx yxz !exam_1.lg4 源程序 max = 2*x+3*y; st_1 x+y d(j) ); ! 需求约束 ; endsubmodel !=; calc : solve (transfer); ! 运行子模块(解线性规划); divert(transfer_out.txt);! 向.txt文件按自定格式输出数据; write ( 最小运输成本 =,cost,newline
2、(1),最优运输方案 x=); for (rows(i): write ( newline(1); writefor(cols(j): ,format (x(i,j),3.0f) ) ); divert(); ! 关闭输出文件 ; endcalc end 打开 transfer_out.txt文件,内容为: 最小运输成本 =664 最优运输方案 x= 0 19 0 0 41 0 0 0 1 0 0 32 0 0 0 0 0 11 0 0 0 0 40 0 0 0 0 0 0 5 0 38 34 7 0 0 0 0 0 0 0 0 22 0 0 27 3 0 例 4data 段的编写技巧( 1)
3、 :从 txt 文件中读取原始数据 !exam_3.lg4 源程序中的 data也可以写为: data : s = file(transfer_data.txt); d = file(transfer_data.txt); c = file(transfer_data.txt); enddata 其中, transfer_data.txt的内容为: !transfer.lg4程序的数据 ; !产量约束 s= ; 60,55,51,43,41,52 !需求约束 d= ; 35 37 22 32 41 32 43 38 !运输单价 c= ; 6 2 6 7 4 2 9 5 4 9 5 3 8 5
4、8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3 !注:字符 是数据分割符,若无此符,视所有数据为一个数据块,只赋给一个变量; 例5lingo程序的的 3 种输入和 3 种输出方法 ; !exam_5.lg4 的源程序 ; sets : rows/13/: ; cols/14/: ; link(rows,cols): a, b, mat1, mat2; endsets data : b = 1,2,3,4 5,6,7,8 9,10,11,12; ! 程序内输入 ; a = file(a.txt); ! 外部t
5、xt文件输入 ; mat1 = ole (d:lingo12data.xls,mat1); !EXcel文件输入 ; enddata calc : text (a_out.txt) = a; ! 列向量形式输出数据 ; for (link: mat2 = 2*mat1); ole (d:lingo12data.xls) = mat2 ;! 把mat2 输出到 xls 文件 中的同名数据块 ; ! 向.txt文件按自定格式输出数据( 参照前例 ); Endcalc 例 6程序段中的循环和选择结构举例 !exam_6.lg4 的源程序 ; sets : rows/15/:; cols/13/:;
6、links(rows,cols):d; endsets data : d=0 2 3 4 3 2 1 3 2 4 7 2 2 1 6; enddata calc : i=1; while (i#le#5: a = d(i,1);b = d(i,2); c = d(i,3); ifc (a#eq#0: write (infeasible!,newline (1); else delta = b2-4*a*c; sqrt = sqrt ( if (delta#ge#0, delta,-delta); ifc (delta#ge#0: write (x1=,(-b+sqrt)/2/a, x2=,(-
7、b-sqrt)/2/a,newline (1); else write (x1=,-b/2/a,+,sqrt/2/a,i, x2=,-b/2/a,-,sqrt/2/a,i,newline (1); ); ); i=i+1; ); endcalc 本程序中的循环结构也可以用for (rows(i): 程序体 ); 进行计算。 例7指派问题(n 人 n 任务费用最小) B1 B2 B3 B4 B5 B6 A1 6 2 6 7 4 2 A2 4 9 5 3 8 5 A3 5 2 1 9 7 4 A4 7 6 7 3 9 2 A5 2 3 9 5 7 2 A6 5 5 2 2 8 1 解: 设决策变量
8、 ij x =1 或 0, 表示第 i 个人是否完成第j 项任务,i,j=1,2,n; 记 ij c =第 i 个人完成第 j 项任务的费用, i,j =1,2,n; n = 6. 设目标函数为总费用,约束条件为(1)每人只完成一项任务; (2)每项任 务只由一人完成。 于是形成如下规划问题: njnix njx nix xc ij n i ij n j ij n i n j ijij ,.,2,1,.,2,1,10 ,.,2,1,1 ,.,2,1,1st. zmin 1 1 11 或 !exam_7.lg4 的源程序 ; model : !6 人6任务指派问题 ; sets : rows/1
9、6/: ; !6 人6任务; links(rows,rows): c, x; ! 费用和决策变量 ; endsets !-; data : c = 6 2 6 7 4 2 4 9 5 3 8 5 5 2 1 9 7 4 7 6 7 3 9 2 2 3 9 5 7 2 5 5 2 2 8 1; enddata !=; submodel appointment: min = cost; ! 目标函数极小化 ; cost = sum (links: c*x); ! 目标函数:总费用 ; for (rows(i): sum (rows(j): x(i,j) = 1 ); ! 每人完成一项 ; for
10、(rows(j): sum (rows(i): x(i,j)= 1 ); ! 每项由一人完成 ; for (links: bin (x); !0-1变量约束 ; endsubmodel submodel binVar: for (links: bin (x); !0-1变量约束 ; endsubmodel !=; calc : solve (appointment,binVar); ! 运行子模块(解线性规划); divert(appointment_out.txt);! 向.txt文件按自定格式输出数 据; write ( 最小指派费用 =,cost,newline(1),分配方案 x=);
11、 for (rows(i): write ( newline(1); writefor(rows(j): , format (x(i,j),3.0f) ) ); divert(); ! 关闭输出文件 ; endcalc end 例8多目标规划转化为单目标规划问题举例 把上述运输问题稍加修改, 考虑到运输量可以要取整数, 就变成整数规划问 题,而且运输问题除了成本最小一个目标以外,有时也要考虑各发点的运输量尽 量均衡作为另一个目标。 本程序处理的方法一是两目标加权平均,方法二是只选 一个目标,另一个目标转化为约束,从而把多目标改为单目标。 !exam_8.lg4 源程序 ; model : !6
12、 发点8收点运输问题 ; sets : rows/16/: s; ! 发点的产量限制 ; cols/18/: d; ! 售点的需求限制 ; links(rows,cols): c, x; ! 运输单价,决策运输量 ; endsets !=; data : s = 60,55,51,43,41,52; d = 35 37 22 32 41 32 43 38; c = 6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3; enddata !=; submode
13、l obj_1: min = minCost; ! 目标函数极小化 ; minCost = sum (links: c*x); ! 目标函数:运输总成本 ; endsubmodel submodel obj_2: min = objValue; objValue = 0.4*obj1+0.6*obj2; ! 二目标加权平均 ; obj1 = sum (links: c*x); ! 目标函数 1:运输总成本 ; obj2 = max1-min1; ! 目标函数 2:发点运输量极差 ; for (links(i,j): sum (cols(j): x(i,j) min1 ; ); endsubmo
14、del submodel obj_3: min = obj2; obj2 = max1-min1; ! 目标函数:发点运输量极差; for (links(i,j): sum (cols(j): x(i,j) min1 ; ); cost1 = sum (links: c*x); ! 运输总成本 ; cost1 d(j) ); ! 需求约束 ; endsubmodel submodel subject_to_2: for (links: gin (x); ! 整数约束 ; endsubmodel !=; calc : solve (obj_1, subject_to_1, subject_to_
15、2); ! 运行子模块 (解线性整数规划) ; divert(intModel_out.txt); write ( newline (2),整数规划的最小运输成本 =,minCost,newline (1),最优运输方案 x=); for (rows(i): write ( newline(1); writefor(cols(j): , format (x(i,j), 3.0f) ) ); divert(); pause(); solve (obj_2, subject_to_1, subject_to_2); ! 运行子模块 (解线性整数规划) ; divert(intModel_out.t
16、xt, a);! 向.txt文件追加输出数据 ; write ( newline (2),二目标加权平均最小值 =,objValue,newline (1),最优运输方案 x=); for (rows(i): write ( newline(1); writefor(cols(j): , format (x(i,j), 3.0f) ) ); divert(); pause(); solve (obj_3, subject_to_1, subject_to_2); ! 运行子模块 (解线性整数规划) ; divert(intModel_out.txt, a);! 向.txt文件追加输出数据 ;
17、write ( newline (2),成本约束时极差最小值 =,obj2,newline (1),成本约束时运输量最平均方案x=); for (rows(i): write ( newline(1); writefor(cols(j): , format (x(i,j), 3.0f) ) ); divert(); endcalc end 本例中的运输量均衡指标, 可以用方差表示, 但变成非线性规划问题, 只能 求出局部最优解,而线性规划的最优解是全局最优解。 例9杂例 1 model : ! 费波那契数列 ; !exam_ 9.lg4 源程序; sets : II/1100/: Fi; !
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- lingo 解决 线性规划 问题 程序 经典 要点
链接地址:https://www.31doc.com/p-5197417.html