线性规划与LINGO编程
- 格式:ppt
- 大小:1.12 MB
- 文档页数:75
Lingo 与线性规划线性规划的标准形式是Minz c 1 x 1 c n x na 11x1a 1n xnb 1 s..ta m1 x1a mnxn(1)b mx i 0, i 1,2,, n其中 z c 1 x 1 c n x n 称为目标函数, 自变量 x i 称为决策变量 ,不等式组 (1)称为约束条件 .满足不等式组 (1)的所有 ( x 1, , x n ) 的集合称为可行域,在可行域里面使得z取最小值的 ( x 1* , , x n * ) 称为最优解,最优解对应的函数值称为最优值。
求解优化模型的主要软件有 Lingo 、Matlab 、Excel 等。
其中 Lingo 是一款专业求解优化模型的软件, 有其他软件不可替代的方便功能。
本文将简要介绍其在线性规划领域的应用。
一、基本规定1、目标函数输入格式max=函数解析式; 或者 min=函数解析式;2、约束条件输入格式利用: >、<、>=、<=等符号。
但是 >与 >=没有区别。
Lingo 软件默认所以自变量都大于等于 0.3、运算 加 (+), 减(-), 乘(*), 除(/), 乘方 (x^a) ,要注意乘号 (*) 不能省略。
4、变量名不区分大小写字母,不超过 32 个字符,必须以字母开头。
5、标点符号每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需要以分号“ ; ”结束)。
但是,model ,sets ,data 以“:”结尾。
endsets ,enddata , end 尾部不加任何符号。
6、命令不考虑先后次序7、MODEL 语句一般程序必须先输入 MODEL :表示开始输入模型,以“ END ”结束。
对简单的模型,这两个语句也可以省略。
8、改变变量的取值范围 @bin(变量名 ) ;@bnd(a, 变量名 ,b ) ;@free( 变量名 ) ; @gin(变量名 ) ;例 1 求目标函数 z 2x 1限制该变量为 0 或 1.限制该变量介于 a,b 之间 .允许该变量为负数 .限制该变量为整数 .3x 2 的最小值,约束条件为s..t x1x2350x11002x12x2600x1 , x20输入 Lingo 程序:min = 2*x1 + 3*x2;x1 + x2 >= 350;x1 >= 100;2*x1 + x2 <= 600;有两种运行方式:1、点击工具条上的按钮即可。
一、 实验目的应用lingo 软件实现线性规划和整数规划。
二、 实验内容:1.线性规划方法的lingo 软件实现。
2.整数规划方法的Lingo 软件实现三、 实验环境:1 硬件要求:计算机一台2 操作系统:WindowsXP3 软件要求:lingo10四、实验步骤及程序编写:1.线性规划模型。
某战略轰炸机群奉命摧毁敌人军事目标。
已知该目标有四个要害部位,只要摧毁其中之一即可达到目的。
为完成此项任务的汽油消耗量限制为48000升、重型炸弹48枚、轻型炸弹32枚。
飞机携带重型炸弹时每升汽油可飞行2千米,带轻型炸弹时每升汽油可飞行3千米。
又知每架飞机每次只能装载一枚炸弹,每出发轰炸一次除来回路程汽为了使摧毁敌方军事目标的可能性最大,应如何确定飞机轰炸的方案。
解:设用了x 枚重型炸弹,用了y 枚轻型炸弹,攻击的是第i 个部位,再设一标志变量f 定义如下: ⎩⎨⎧=个部位不攻击第个部位攻击第i i f i 01目标函数为: ()[]∑=⨯⨯+⨯=41max i i li ih f p y px()()480002004/3/2004/2/≤++⨯+++⨯i i i i d d y d d x48≤x ,32≤y141=∑=i if2、整数规划模型。
某厂生产甲、乙两种产品,生产甲种产品每件要消耗煤9t ,电力4kw ,使用劳动力3个,获利70元;生产乙种产品每件消耗煤4t ,电力5kw ,使用劳动力10个,获利120元。
有一个生产日,这个厂可动用的煤是360t ,电力是200kw ,劳动力是300个,问应该如何安排甲、乙两种产品的生产,才能使工厂在当日的获利最大,并问该厂当日的最大获利是多少? 解:模型建立:⎪⎪⎩⎪⎪⎨⎧<+<+<++=取整x x x x x x x x x x t s f 2121212121,3001032005436049..12070max五、程序调试及实验总结1.线性规划模型。
一、Lingo 能做什么——Lingo 的简单模型1、简单线性规划求解(目标函数)2134maxx x z += s.t.(约束条件)⎪⎪⎩⎪⎪⎨⎧≥≤≤+≤+0,781022122121x x x x x x x(决策变量) x 1,x 2手工计算的方法注:Lingo 中“<”代表“<=”,“>”代表“>=”,Lingo 中默认的变量都是大于等于0的,不用显式给出。
求解结果:z=26,x1=2,x2=62、整数规划求解219040Max x x z += ⎪⎩⎪⎨⎧≥≤+≤+0,702075679212121x x x x x xLingo 程序求解3、0-1规划求解Max 432215.18.04.0x x x x f +++=10106234321≤+++x x x x10,,,4321或=x x x x12344、非线性规划求解||4||3||2||min 4321x x x x z +−−=s.t. ⎪⎪⎩⎪⎪⎨⎧−=+−−=−+−=+−−2132130432143214321x x x x x x x x x x x x12345、背包问题一个旅行者的背包最多只能装 6kg 物品,现有4 件物品的重量和价值分别为 2 kg ,3 kg ,3 kg ,4 kg ;1 元,1.2元,0.9元,1.1元。
问应怎样携带那些物品使得携带物品的价值最大?建模:记j x 为旅行者携带第j 件物品的件数, 取值只能为 0 或 1。
求目标函数43211.19.02.1x x x x f +++=在约束条件643324321≤+++x x x x 下的最大值.用Lingo 软件求解0-1规划计算结果6、指派问题有四个工人,要指派他们分别完成4项工作,每人做各项工作所消耗的时间如下表: 问指派哪个人去完成哪项工作,可使总的消耗时间为最小? 设:第i 个工人做第j 项工作用时ij t ,标志变量ij f 定义如下:变量名 取值⎩⎨⎧=其他件工作个工人去做第指派第01j i f ijmin∑∑==×4141i j ij ijt fs.t. 141=∑=i ijf()4,3,2,1=j 每份工作都有一人做∑==411j ijf()4,3,2,1=i 每人都只做一项工作(1) 集合定义部分(从“SETS :”到“ENDSET ”):定义集合及其属性,语句“work/A,B,C,D/”其结果正是定义了4个集合元素,没有定义变量名。
lingo解决线性规划问题的程序Lingo12软件培训教案Lingo 主要⽤于求解线性规划,整数规划,⾮线性规划,V10以上版本可编程。
例1 ⼀个简单的线性规划问题0 ,600 2100350 st.3 2max >=<=+=<<=++=y x y x x y x y x z! 源程序max = 2*x+3*y;[st_1] x+y<350;[st_2] x<100;2*x+y<600; !决策变量黙认为⾮负; <相当于<=; ⼤⼩写不区分当规划问题的规模很⼤时,需要定义数组(或称为矩阵),以及下标集(set) 下⾯定义下标集和对应数组的三种⽅法,效果相同::r1 = r2 = r3, a = b = c.sets :r1/1..3/:a;r2 : b;r3 : c;link2(r1,r2): x;link3(r1,r2,r3): y;endsetsdata :ALPHA = ;a=11 12 13 ;r2 = 1..3;b = 11 12 13;c = 11 12 13;enddata例2 运输问题解:设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m;j =1,2,…n记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8.设⽬标函数为总成本,约束条件为(1)产量约束;(2)需求约束。
于是形成如下规划问题:nj m i x n j d xm i s x x c ij j n i ij i mj ij m i nj ij ij ,...,2,1,,...,2,1,0 ,...,2,1,,...,2,1, st.z min 1111==>=<==<==∑∑∑∑====把上述程序翻译成LINGO 语⾔,编制程序如下:! 源程序model: !6发点8收点运输问题;sets:rows/1..6/: s; !发点的产量限制;cols/1..8/: 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 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddata!------------------------------------;min = @sum(links: c*x); !⽬标函数=运输总成本;@for(rows(i):@sum(cols(j): x(i,j))<=s(i) ); ! 产量约束;@for(cols(j):@sum(rows(i): x(i,j))=d(j) ); !需求约束;end例3把上述程序进⾏改进,引进运⾏⼦模块和打印运算结果的语句:! 源程序model: !6发点8收点运输问题;sets:rows/1..6/: s; !发点的产量限制;cols/1..8/: 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 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddata!==================================;submodel transfer:min = cost; ! ⽬标函数极⼩化;cost = @sum(links: c*x); !⽬标函数:运输总成本;@for(rows(i):@sum(cols(j): x(i,j)) < s(i) ); ! 产量约束;@for(cols(j):@sum(rows(i): x(i,j)) > d(j) ); !需求约束; endsubmodel!==================================;calc:@solve(transfer); !运⾏⼦模块(解线性规划);@divert('');!向.txt⽂件按⾃定格式输出数据;@write('最⼩运输成本=',cost,@newline(1),'最优运输⽅案x=');@for(rows(i):@write(@newline(1));@writefor(cols(j): ' ',@format(x(i,j),'') ) );@divert(); !关闭输出⽂件;打开⽂件,内容为:最⼩运输成本=664最优运输⽅案x=0 19 0 0 41 0 0 01 0 0 32 0 0 0 00 11 0 0 0 0 40 00 0 0 0 0 5 0 3834 7 0 0 0 0 0 00 0 22 0 0 27 3 0例4 data段的编写技巧(1):从txt⽂件中读取原始数据 ! 源程序中的data也可以写为:data:s = @file('');d = @file('');c = @file('');enddata其中,的内容为:!程序的数据;!产量约束s= ;60,55,51,43,41,52 ~!需求约束d= ;35 37 22 32 41 32 43 38 ~!运输单价c= ;6 2 67 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3 ~!注:字符~是数据分割符,若⽆此符,视所有数据为⼀个数据块,只赋给⼀个变量;例5lingo程序的的3种输⼊和3种输出⽅法;rows/1..3/: ;cols/1..4/: ;link(rows,cols): a, b, mat1, mat2;endsetsdata:b = 1,2,3,45,6,7,89,10,11,12; !程序内输⼊;a = @file(''); !外部txt⽂件输⼊;mat1 = @ole('d:\lingo12\',mat1); !EXcel⽂件输⼊;enddatacalc:@text('') = a; !列向量形式输出数据;@for(link: mat2 = 2*mat1);@ole('d:\lingo12\') = mat2 ;!把mat2输出到xls⽂件中的同名数据块; !向.txt⽂件按⾃定格式输出数据(参照前例);Endcalc例6程序段中的循环和选择结构举例!的源程序;sets:rows/1..5/:;cols/1..3/:;links(rows,cols):d;endsetsdata:d=0 2 34 3 21 3 24 7 22 1 6;enddatacalc: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));@elsedelta = b^2-4*a*c;sqrt = @sqrt(@if(delta#ge#0, delta,-delta));@ifc(delta#ge#0:@write('x1=',(-b+sqrt)/2/a,'x2=',(-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): 程序体);进⾏计算。
Southwestuniversityofscienceandtechnology实验报告LINGO软件在线性规划中的运用学院名称环境与资源学院专业名称采矿工程学生姓名学号指导教师二〇一五年十一月实验LINGO软件在线性规划中的运用1.实验目的掌握LINGO软件求解线性规划问题的基本步骤,了解LINGO软件解决线性规划问题的基本原理,熟悉常用的线性规划计算代码,理解线性规划问题的迭代关系。
2.实验仪器、设备或软件电脑,LINGO软件3.实验内容(1)LINGO软件求解线性规划问题的基本原理;(2)编写并调试LINGO软件求解线性规划问题的计算代码;4.实验步骤(1)使用LINGO计算并求解线性规划问题;(2)写出实验报告,并浅谈学习心得体会(线性规划的基本求解思路与方法及求解过程中出现的问题及解决方法)。
5.题目有一艘货轮,分前、中、后三个舱位,它们的容积与最大允许载重量如表1所示。
现有三种货物待运,已知有关数据列于表2中。
又为了航运安全,要求前、中、后舱在实际载重量上大体保持各舱最大允许载重量的比例关系。
具体要求前、后舱分别与中舱之间载重量比例上偏差不超过15%,前、后舱之间不超过10%。
问该货轮应装载A、B、C各多少件,运费收入为最大?要求写出建模分析,数学模型建立,并分别用lingo和matlab编写程序代码,并计算出结果和分析结果。
前舱中舱后舱最大允许载重量(t) 2000 3000 1500容积(m3) 4000 5400 1500商品数量(件) 每件体积(m3/件) 每件重量(t/件) 运价(元/件)A 600 10 8 1000B 1000 5 6 700C 800 7 5 6006.实验过程!设前舱运A为x11,运B:x12,运C:x13;!设中舱运A为x21,运B:x22,运C:x23;!设后舱运A为x31,运B:x32,运C:x33;!单位:件;!目标函数;max=1000*(x11+x21+x31)+700*(x12+x22+x32)+600*(x13+x23+x33);!数量约束;x11+x21+x31<=600;x12+x22+x32<=1000;x13+x23+x33<=800;!容量约束;x11*10+x12*5+x13*7<=4000;x21*10+x22*5+x23*7<=5400;x31*10+x32*5+x33*7<=1500;!重量约束;x11*8+x12*6+x13*5<=2000;x21*8+x22*6+x23*5<=3000;x31*8+x32*6+x33*5<=1500;!平衡约束;x11*8+x12*6+x13*5<=1.15*(x21*8+x22*6+x23*5);x21*8+x22*6+x23*5<=1.15*(x11*8+x12*6+x13*5);x31*8+x32*6+x33*5<=1.15*(x21*8+x22*6+x23*5);x21*8+x22*6+x23*5<=1.15*(x31*8+x32*6+x33*5);x11*8+x12*6+x13*5<=1.1*(x21*8+x22*6+x23*5);x21*8+x22*6+x23*5<=1.1*(x11*8+x12*6+x13*5);!整数约束;@gin(x11);@gin(x12);@gin(x13);@gin(x21);@gin(x22);@gin(x23);@gin(x31);@gin(x32);@gin(x33);7.心得体会运筹学是近几十年发展起来的一门新兴学科。
2014年数学建模作业:线性规划及lingo编程Ⅰ-1 灵敏度分析某公司计划生产I、II两种产品,每天生产条件如表,问(1)该公司应如何安排生产计划才能使总利润最多?(2)若产品Ⅰ的利润降至1.5百元/单位,而产品Ⅱ的利润增至2百元/单位,最优生产计划有何变化?(3)若产品Ⅰ的利润不变,则产品Ⅱ的利润在什么范围内变化时,该公司的最优生产计划将不发生变化?在0.67-2不变(4)设备A和调试工序每天能力不变,而设备B能力增加到32,问最优生产计划如何变化?B在18-30内不变。
在B=32时,Ⅰ-2投资问题某银行经理计划用一笔资金进行有价证券的投资,可供购进的证券以及其信用等级、到期年限、收益如下表所示。
按照规定,市政证券的收益可以免税,其它证券的收益需按50%的税率纳税。
此外还有以下限制:①政府及代办机构的证券总共至少要购进400万元;②所购证券的平均信用等级不超过1.49,信用等级数字越小,信用程度越高;③所购证券的平均到期年限不超过5年。
(1)若该经理有1000万元资金,应如何投资?(2)(3)(2)如果能够以2.75%的利率借到不超过100万元资金,该经理应如何操作?去借钱吧,收益为3.039% ,收益更高,(3)在1000万元资金情况下,若证券A的税前收益增加为4.5%,投资应否改变?若证券C的税前收益减少为 4.8%,投资应否改变?表证券信息B 代办机构2 15 5.4C 政府 1 4 5.0D 政府 1 3 4.4E 5 2 4.5Ⅰ-3 一家保姆服务公司专门向顾主提供保姆服务。
根据统计,下年的需求是:春季6000工(1人做1天为1个工),夏季7500工,秋季5500工,冬季9000工。
公司新招聘的保姆必须经过5天的培训才能上岗。
每个保姆每季度工作(新保姆包括培训)65天。
保姆从该公司而不是从雇主那里得到报酬,每人每月工资800元。
春季开始时公司拥有120名保姆,在每个季度结束时,将有15%的保姆自动离职。
实验1 用LINGO求解线性规划问题LINGO使用简介LINGO软件是美国的LINDO系统公司(Lindo System Inc)开发的一套用于求解最优化问题的软件包.LINGO除了能用于求解线性规划和二次规划外,还可以用于非线性规划求解以及一些线性和非线性方程(组)的求解.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,而且执行速度快.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果,这里简单介绍LINGO的使用方法.LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络优化和排队论模型中的最优化问题等.一个LINGO程序一般会包含集合段、数据输入段、优化目标和约束段、初始段和数据预处理段等部分,每一部分有其独特的作用和语法规则,读者可以通过查阅相关的参考书或者LINGO的HELP文件详细了解,这里就不展开介绍了.LINGO的主要功能特色为:既能求解线性规划问题,也有较强的求解非线性规划问题的能力;输入模型简练直观;运算速度快、计算能力强;内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述大规模的优化模型;将集合的概念引入编程语言,很容易将实际问题转换为LINGO模型;并且能方便地与Excel、数据库等其他软件交换数据.LINGO的语法规定:(1)求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示;(2)每个语句必须以分号“;”结束,每行可以有许多语句,语句可以跨行;(3)变量名称必须以字母(A~Z)开头,由字母、数字(0~9)和下划线所组成,长度不超过32个字符,不区分大小写;(4)可以给语句加上标号,例如[OBJ] MAX=200*X1+300*X2;(5)以惊叹号“!”开头,以分号“;”结束的语句是注释语句;(6)如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;(7)LINGO模型以语句“MODEL:”开头,以“END”结束,对于比较简单的模型,这两个语句可以省略.实验目的1.对于给定的实际应用问题,正确的建立线性规划问题数学模型,并用LINGO求解;2.掌握灵敏度分析以及资源的影子价格的相关分析方法.实验数据与内容问题1.1某工厂在计划期内要安排生产A、B两种产品,已知生产单位产品所需设备台时及对甲、乙两种原材料的消耗,有关数据如表1.1.问:应如何安排生产计划,使工厂获利最大?.问题1.2 某公司饲养实验用的动物以供出售,已知这些动物的生长对饲料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需要蛋白质60g ,矿物质3g ,维生素8mg ,该公司能买到5种不同的饲料,每种饲料1kg 所含各种营养成分和成本如表1.2所示,如果每个小动物每周食用饲料不超过52kg ,求既能满足动物生长需要,又使总成本最低的饲料配方.实验指导问题1.1设计划生产两种产品分别为,则建立线性规划问题数学模型B A ,21,x x ⎪⎪⎩⎪⎪⎨⎧≥≤≤≤++=0,12416482.32max 21212121x x x x x x t s x x S 在LINGO 的MODEL 窗口内输入如下模型:model :max =2*x1+3*x2;x1+2*x2<=8;4*x1<=16;4*x2<=12;end选菜单Lingo|Solve(或按Ctrl+S),或用鼠标点击“求解”按纽,如果模型有语法错误,则弹出一个标题为“LINGO Error Message ”(错误信息)的窗口,指出在哪一行有怎样的错误,每一种错误都有一个编号(具体含义可查阅相关文献或LINGO 的Help ).改正错误以后再求解,如果语法通过,LINGO 用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGO Solver Status ”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、耗费内存、所花时间等信息,点击Close 关闭窗口,屏幕上出现标题为“Solution Report ”(解的报告)的信息窗口,显示优化计算(线性规划中换基迭代)的步数、优化后的目标函数值、列出各变量的计算结果.求解结果:Global optimal solution found at iteration: 5Objective value: 14.00000Variable Value Reduced CostX1 4.000000 0.000000X2 2.000000 0.000000Row Slack or Surplus Dual Price1 14.00000 1.0000002 0.000000 1.5000003 0.000000 0.12500004 4.000000 0.000000该报告说明:运行5步找到全局最优解,目标函数值为14,变量值分别为.“Reduced Cost ”的含义是需缩减成本系数或需增加利润系数(最优解中取值非零的决策变量的Reduced Cost 值等于零).“Row ”是输入模型中的行号,目标函数是第一行;“Slack or Surplus ”的意思是松弛或剩余,即约束条件左边与右边的差值,对于“124,2==x x ≤”的不等式,右边减左边的差值为Slack (松弛),对于“”的不等式,左边减右边的差值为Surplus (剩余),当约束条件两边相等时,松弛或剩余的值等于零.“Dual Price ”的意思是对偶价格(或称为影子价格),上述报告中Row2的松弛值为0,表明生产甲产品4单位、乙产品2单位,所需设备8台时已经饱和,对偶价格1.5的含义是:如果设备增加1台时,能使目标函数值增加1.5.报告中Row4的松弛值为4,表明生产甲产品4单位、乙产品2单位,所需原材料乙8公斤还剩余4公斤,因此增加原材料乙不会使目标函数值增加,所以对偶价格为0.≥问题1.2设需要饲料分别为 kg ,则建立线性规划数学模型:54321,,,,A A A A A 54321,,,,x x x x x 123451234512345123451234512345min 0.20.70.40.30.50.320.6 1.8600.10.050.020.20.0530.050.10.020.20.088.52,,,,0S x x x x x x x x x x x x x x x x x x x x s t x x x x x x x x x x =++++++++≥⎧⎪++++⎪⎪≥++++⎨⎪++++≤⎪≥⎪⎩≥ 在LINGO 的MODEL 窗口内输入如下模型:Min=0.2*x1+0.7*x2+0.4*x3+0.3*x4+0.5*x5;0.3*x1+2*x2+x3+0.6*x4+1.8*x5>60;0.1*x1+0.05*x2+0.02*x3+0.2*x4+0.05*x5>3;0.05*x1+0.1*x2+0.02*x3+0.2*x4+0.08*x5>8;x1+x2+x3+x4+x5<52;求解输出结果如下:Global optimal solution found at iteration: 4Objective value: 22.40000Variable Value Reduced CostX1 0.000000 0.7000000X2 12.00000 0.000000X3 0.000000 0.6166667X4 30.00000 0.000000X5 10.00000 0.000000Row Slack or Surplus Dual Price1 22.40000 -1.0000002 0.000000 -0.58333333 4.100000 0.0000004 0.000000 -4.1666675 0.000000 0.8833333因此,每周每个动物的配料为饲料、、分别为12、30和10kg ,合计为52,可使得饲养成本达到最小,最小成本为22.4元;不选用饲料和的原因是因为这两种饲料的价格太高了,没有竞争力.“Reduced Cost ”分别等于0.7和0.617,说明当这两种饲料的价格分别降低0.7元和0.62元以上时,不仅选用这两种饲料而且使得饲养成本降低.从“Slack or Surplus”可以看出,蛋白质和维生素刚达到最低标准,矿物质超过最低标准4.12A 4A 5A kg kg kg 1A 3A g ;从“Dual Price”可以得到降低标准蛋白质1单位可使饲养成本降低0.583元,降低标准维生素1单位可使饲养成本降低4.167元,但降低矿物质的标准不会降低饲养成本,如果动物的进食量减少,就必须选取精一些的饲料但要增加成本,大约进食量降低1可使得饲养成本增加0.88元.kg 对于目标函数系数和约束条件右端常数项的灵敏度分析,可以通过LINGO 软件求解的灵敏度分析给出.如果要看灵敏度分析结果,必须激活灵敏度计算功能才会在求解时给出灵敏度分析结果,默认情况下这项功能是关闭的.想要激活它,必须运行LINGO|Options …命令,选择Gengral Solver ,在Dual Computation 列表框中,选择Prices and Ranges 选项并确定.对于例1.1问题进行灵敏度分析,结果如下:以下是灵敏度分析的结果Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowable AllowableVariable Coefficient Increase DecreaseX1 2.000000 INFINITY 0.5000000X2 3.000000 1.000000 3.000000Righthand Side RangesRow Current Allowable AllowableRHS Increase Decrease2 8.000000 2.000000 4.0000003 16.00000 16.00000 8.0000004 12.00000 INFINITY 4.000000对于例1.2问题进行灵敏度分析,结果如下:Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowable AllowableVariable Coefficient Increase DecreaseX1 0.2000000 INFINITY 0.7000000X2 0.7000000 INFINITY 0.1358974X3 0.4000000 INFINITY 0.6166667X4 0.3000000 1.400000 1.000000X5 0.5000000 0.1247059 INFINITYRighthand Side RangesRow Current Allowable AllowableRHS Increase Decrease2 60.00000 4.800000 4.8000003 3.000000 4.100000 INFINITY4 8.000000 0.3428571 0.48000005 52.00000 1.846154 1.411765思考题某投资公司拟制定今后5年的投资计划,初步考虑下面四个投资项目:项目A:从第1年到第4年每年年初可以投资,于次年年末收回成本,并可获利润15%;项目B:第3年年初可以投资,到第5年年末可以收回成本,并获得利润25%,但为了保证足够的资金流动,规定该项目的投资金额上限为不超过总金额的40%;项目C:第2年年初可以投资,到第5年年末可以收回成本,并获得利润40%,但公司规定该项目的最大投资金额不超过总金额的30%;项目D:5年内每年年初可以购买公债,于当年年末可以归还本金,并获利息6%.该公司现有投资金额100万元,请帮助该公司制定这些项目每年的投资计划,使公司到第5年年末核算这5年投资的收益率达到最大.建立线性规划问题的数学模型,并用LINGO求解.。
用lingo求解线性规划问题中国石油大学胜利学院程兵兵摘要食物营养搭配问题是现代社会中常见的问题,其最终的目的是节省总费用.本文通过对营养问题的具体剖析.构建了一般的线性规划模型。
并通过实例应用Lingo数学软件求解该问题.并给出了价值系数灵敏度分析,得出蔬菜价格的变动对模型的影响.关键词线性规划,lingo,灵敏度分析。
一、问题重述与分析营养师要为某些特殊病人拟订一周的菜单,可供选择的蔬菜及其费用和所含营养成分的数量以及这类病人每周所需各种营养成分的最低数量如下表1所示。
有以下规定:一周内所用卷心菜不多于2份,其他蔬菜不多于4份。
问题一:若病人每周需要14份蔬菜,问选用每种蔬菜各多少份,可使生活费用最小.问题二:当市场蔬菜价格发生怎样波动时,所建模型的适用性。
表 1 所需营养和费用营养搭配是一个线性规划问题,在给定蔬菜的情况下,要求菜单所需的营养成分必须达到要求,并在此条件下求出什么样的搭配所花费的费用最少.第一个要求是满足各类营养的充足,根据表中数据列出不等式。
第二要求为问题一中,蔬菜的份数必须为14,第三要求为在一周内,卷心菜不多于2份,其他不多于4份,根据以上条件列出各类蔬菜份数的限定条件,并可表示出费用的表达式.对于第二问,就是价值系数的变化对总费用的影响,模型的适用范围。
三、模型假设第一,假设各蔬菜营养成分保持稳定,满足题干要求。
第二,假设各蔬菜价格在一定时间内保持相对稳定。
第三,假设各类蔬菜供应全部到位,满足所需要求量. 第四,假设所求出最优解时不要求一定为整数。
四、符号约定(1)Z 代表目标函数,此题即为费用。
(2)i c 为价值系数,此题即为每份蔬菜的价格。
下标i 代表蔬菜的种类。
(3)i x 为决策变量,表示各种蔬菜的数量。
(4)i b 为最低限定条件,表示蔬菜最低营养需要。
五、模型建立根据以上各种假设和符号约定,建立模型如下。
所求的值就是min,也就是最优化结果.s 。
用LINGO求解线性规划问题实验1 用LINGO求解线性规划问题LINGO使用简介LINGO软件是美国的LINDO系统公司(Lindo System Inc)开发的一套用于求解最优化问题的软件包.LINGO除了能用于求解线性规划和二次规划外,还可以用于非线性规划求解以及一些线性和非线性方程(组)的求解.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,而且执行速度快.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果,这里简单介绍LINGO的使用方法.LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络优化和排队论模型中的最优化问题等.一个LINGO程序一般会包含集合段、数据输入段、优化目标和约束段、初始段和数据预处理段等部分,每一部分有其独特的作用和语法规则,读者可以通过查阅相关的参考书或者LINGO的HELP文件详细了解,这里就不展开介绍了.LINGO的主要功能特色为:既能求解线性规划问题,也有较强的求解非线性规划问题的能力;输入模型简练直观;运算速度快、计算能力强;内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述大规模的优化模型;将集合的概念引入编程语言,很容易将实际问题转换为LINGO模型;并且能方便地与Excel、数据库等其他软件交换数据.LINGO的语法规定:(1)求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示;(2)每个语句必须以分号“;”结束,每行可以有许多语句,语句可以跨行;(3)变量名称必须以字母(A~Z)开头,由字母、数字(0~9)和下划线所组成,长度不超过32个字符,不区分大小写;(4)可以给语句加上标号,例如[OBJ] MAX=200*X1+300*X2;(5)以惊叹号“!”开头,以分号“;”结束的语句是注释语句;(6)如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;(7)LINGO模型以语句“MODEL:”开头,以“END”结束,对于比较简单的模型,这两个语句可以省略.实验目的1.对于给定的实际应用问题,正确的建立线性规划问题数学模型,并用LINGO求解;2.掌握灵敏度分析以及资源的影子价格的相关分析方法.实验数据与内容问题1.1 某工厂在计划期内要安排生产A、B两种产品,已知生产单位产品所需设备台时及对甲、乙两种原材料的消耗,有关数据如表1.1.问:应如何安排生产计划,使工厂获利最大?表1.1 资源配置问题的数据产品资源AB可利用资源设备128台时甲416公斤乙412公斤单位利润2元3元建立线性规划问题的数学模型,用LINGO求出最优解并做相应的分析.问题1.2 某公司饲养实验用的动物以供出售,已知这些动物的生长对饲料中3种营养成分(蛋白质、矿物质和维生素)特别敏感,每个动物每周至少需要蛋白质60g,矿物质3g,维生素8mg,该公司能买到5种不同的饲料,每种饲料1kg所含各种营养成分和成本如表1.2所示,如果每个小动物每周食用饲料不超过52kg,求既能满足动物生长需要,又使总成本最低的饲料配方.表1.2 配料(食谱)问题的数据饲料营养1A2A4A5A营养最低要求蛋白质(g) 0.3210.61.860矿物质(g) 0.10.050.20.053维生素(mg) 0.050.10.020.20.088成本(元/ kg)0.20.70.40.5实验指导问题1.1设计划生产两种产品分别为,则建立线性规划问题数学模型 BA,21,xx.......≥≤≤≤++=0,12416482.32max21212121xxxxxxtsxxS在LINGO的MODEL窗口内输入如下模型:model:max=2*x1+3*x2;x1+2*x2<=8;4*x1<=16;4*x2<=12;end选菜单Lingo|Solve(或按Ctrl+S),或用鼠标点击“求解”按纽,如果模型有语法错误,则弹出一个标题为“LINGO Error Message”(错误信息)的窗口,指出在哪一行有怎样的错误,每一种错误都有一个编号(具体含义可查阅相关文献或LINGO的Help).改正错误以后再求解,如果语法通过,LINGO用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGO Solver Status”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、耗费内存、所花时间等信息,点击Close关闭窗口,屏幕上出现标题为“Solution Report”(解的报告)的信息窗口,显示优化计算(线性规划中换基迭代)的步数、优化后的目标函数值、列出各变量的计算结果.求解结果:Global optimal solution found at iteration: 5Objective value: 14.00000Variable Value Reduced CostX1 4.000000 0.000000X2 2.000000 0.000000Row Slack or Surplus Dual Price1 14.00000 1.0000002 0.000000 1.5000003 0.000000 0.12500004 4.000000 0.000000该报告说明:运行5步找到全局最优解,目标函数值为14,变量值分别为.“Reduced Cost”的含义是需缩减成本系数或需增加利润系数(最优解中取值非零的决策变量的Reduced Cost值等于零).“Row”是输入模型中的行号,目标函数是第一行;“Slack orSurplus”的意思是松弛或剩余,即约束条件左边与右边的差值,对于“124,2==xx≤”的不等式,右边减左边的差值为Slack(松弛),对于“”的不等式,左边减右边的差值为Surplus(剩余),当约束条件两边相等时,松弛或剩余的值等于零.“Dual Price”的意思是对偶价格(或称为影子价格),上述报告中Row2的松弛值为0,表明生产甲产品4单位、乙产品2单位,所需设备8台时已经饱和,对偶价格1.5的含义是:如果设备增加1台时,能使目标函数值增加1.5.报告中Row4的松弛值为4,表明生产甲产品4单位、乙产品2单位,所需原材料乙8公斤还剩余4公斤,因此增加原材料乙不会使目标函数值增加,所以对偶价格为0.≥问题1.2设需要饲料分别为 kg,则建立线性规划数学模型:54321,,,,AAAAA54321,,,,xxxxx123451234512345123451234512345min0.20.70.40.30.50.32 0.61.8600.10.050.020.20.0530.050.10.020.20.088.52,,,,0Sxxxxxxxx xxxxxxxxxxxxstxxxxxxxxxx=++++++++≥..++++..++++..++++≤.≥..在LINGO的MODEL窗口内输入如下模型:Min=0.2*x1+0.7*x2+0.4*x3+0.3*x4+0.5*x5;0.3*x1+2*x2+x3+0.6*x4+1.8*x5>60;0.1*x1+0.05*x2+0.02*x3+0.2*x4+0.05*x5>3;0.05*x1+0.1*x2+0.02*x3+0.2*x4+0.08*x5>8; x1+x2+x3+x4+x5<52;求解输出结果如下:Global optimal solution found at iteration: 4 Objective value: 22.40000Variable Value Reduced CostX1 0.000000 0.7000000X2 12.00000 0.000000X3 0.000000 0.6166667X4 30.00000 0.000000X5 10.00000 0.000000Row Slack or Surplus Dual Price1 22.40000 -1.0000002 0.000000 -0.58333333 4.100000 0.0000004 0.000000 -4.1666675 0.000000 0.8833333因此,每周每个动物的配料为饲料、、分别为12、30和10kg,合计为52,可使得饲养成本达到最小,最小成本为22.4元;不选用饲料和的原因是因为这两种饲料的价格太高了,没有竞争力.“Reduced Cost”分别等于0.7和0.617,说明当这两种饲料的价格分别降低0.7元和0.62元以上时,不仅选用这两种饲料而且使得饲养成本降低.从“Slack or Surplus”可以看出,蛋白质和维生素刚达到最低标准,矿物质超过最低标准4.12A4A5Akgkgkg1A3Ag;从“Dual Price”可以得到降低标准蛋白质1单位可使饲养成本降低0.583元,降低标准维生素1单位可使饲养成本降低4.167元,但降低矿物质的标准不会降低饲养成本,如果动物的进食量减少,就必须选取精一些的饲料但要增加成本,大约进食量降低1可使得饲养成本增加0.88元.kg对于目标函数系数和约束条件右端常数项的灵敏度分析,可以通过LINGO软件求解的灵敏度分析给出.如果要看灵敏度分析结果,必须激活灵敏度计算功能才会在求解时给出灵敏度分析结果,默认情况下这项功能是关闭的.想要激活它,必须运行LINGO|Options…命令,选择Gengral Solver,在Dual Computation列表框中,选择Prices and Ranges选项并确定.对于例1.1问题进行灵敏度分析,结果如下:以下是灵敏度分析的结果Ranges in which the basis is unchanged:Objective Coefficient RangesCurrent Allowable AllowableVariable Coefficient Increase DecreaseX1 2.000000 INFINITY 0.5000000X2 3.000000 1.000000 3.000000Righthand Side RangesRow Current Allowable AllowableRHS Increase Decrease2 8.000000 2.000000 4.0000003 16.00000 16.00000 8.0000004 12.00000 INFINITY 4.000000对于例1.2问题进行灵敏度分析,结果如下:Ranges in which the basis is unchanged: Objective Coefficient RangesCurrent Allowable AllowableVariable Coefficient Increase Decrease X1 0.2000000 INFINITY 0.7000000X2 0.7000000 INFINITY 0.1358974X3 0.4000000 INFINITY 0.6166667X4 0.3000000 1.400000 1.000000X5 0.5000000 0.1247059 INFINITY Righthand Side RangesRow Current Allowable AllowableRHS Increase Decrease2 60.00000 4.800000 4.8000003 3.000000 4.100000 INFINITY4 8.000000 0.3428571 0.48000005 52.00000 1.846154 1.411765思考题某投资公司拟制定今后5年的投资计划,初步考虑下面四个投资项目:项目A:从第1年到第4年每年年初可以投资,于次年年末收回成本,并可获利润15%;项目B:第3年年初可以投资,到第5年年末可以收回成本,并获得利润25%,但为了保证足够的资金流动,规定该项目的投资金额上限为不超过总金额的40%;项目C:第2年年初可以投资,到第5年年末可以收回成本,并获得利润40%,但公司规定该项目的最大投资金额不超过总金额的30%;项目D:5年内每年年初可以购买公债,于当年年末可以归还本金,并获利息6%.该公司现有投资金额100万元,请帮助该公司制定这些项目每年的投资计划,使公司到第5年年末核算这5年投资的收益率达到最大.建立线性规划问题的数学模型,并用LINGO求解.。