Lingo与线性规划

合集下载

应用lingo软件实现线性规划和整数规划

应用lingo软件实现线性规划和整数规划

一、 实验目的应用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与线性规划

Ling o与线性规划线性规划得标准形式就是(1)其中称为口标函数,自变量称为决策变量,不等式组(1)称为约束条件、满足不等式组(1)得所有得集合称为可行域,在可行域里面使得Z取最小值得称为最优解,最优解对应得函数值称为最优值。

求解优化模型得主要软件有L i ng o、Ma t 1 a b> Ex c el等。

其中Lingo 就是一款专业求解优化模型得软件,有其她软件不可替代得方便功能。

本文将简要介绍其在线性规划领域得应用。

—、基本规定1、目标函数输入格式ma x二函数解析式;或者min二函数解析式;2、约束条件输入格式利用:>、V、〉=、〈二等符号。

但就是>与>二没有区别。

L ingo软件默认所以自变量都大于等于0、3、运算加(+),减(-),乘(*),除(/),乘方(x A a),要注意乘号(*)不能省略。

4、变量名不区分大小写字母,不超过32个字符,必须以字母开头。

5、标点符号每个语句以分号“;”结束,感叹号“!”开始得就是说明语句(说明语句也需要以分号";”结束)o但就是,mo d el, s e t s, data以":”结尾。

endsets, e n ddata, e n d尾部不加任何符号。

6、命令不考虑先后次序7、MODEL 语句一般程序必须先输入MODEL:表示开始输入模型,以“END”结束。

对简单(1)例1求目标函数得最小值,约束条件为输入Ling o 程序:min = 2*x1 + 3*x2;x I + x2 >= 350?x1 >= 1 0 0;2A *X 1 + x2 <= 600;有两种运行方式:1、点击工具条上得按钮 即可。

2、点击菜单:LINGO —Solve运行结果如下:下面对其各个部分进行说明:Gl o bal o p tima 1 solution f oun d :表示已找到全局最优解。

Ob j e ctive value :表示最优值得大小。

线性规划问题的Lingo求解

线性规划问题的Lingo求解

Lingo中参数设置与调整
01
参数设置
02
调整策略
Lingo允许用户设置求解器的参数, 如求解方法、迭代次数、收敛精度等 。这些参数可以通过`@option`进行 设置。
如果求解过程中遇到问题,如无解、 解不唯一等,可以通过调整参数或修 改模型来尝试解决。常见的调整策略 包括放松约束条件、改变目标函数权 重等。
02
比较不同方案
03
验证求解结果
如果存在多个可行解,需要对不 同方案进行比较,选择最优方案。
可以通过将求解结果代入原问题 进行验证,确保求解结果的正确 性和合理性。
感谢您的观看
THANKS
问题,后面跟随线性表达式。
02 03
约束条件表示
约束条件使用`subject to`或简写为`s.t.`来引入,后面列出所有约束条 件,每个约束条件以线性表达式和关系运算符(如`<=`, `>=`, `=`, `<`, `>`)表示。
非负约束
默认情况下,Lingo中的变量是非负的,如果变量可以为负,需要使用 `@free`进行声明。
问题的解通常出现在约束条件的边界上 。
变量通常是连续的。
特点 目标函数和约束条件都是线性的。
线性规划问题应用场景
生产计划
确定各种产品的最优生产量, 以最大化利润或最小化成本。
资源分配
在有限资源下,如何最优地分 配给不同的项目或任务。
运输问题
如何最低成本地将物品从一个 地点运输到另一个地点。
金融投资
03
求解结果
通过Lingo求解,得到使得总加工时间最短的生产计划安 排。
运输问题优化案例
问题描述
某物流公司需要将一批货物从A地运往B地,可以选择不同的运输方式和路径,每种方式和路径的运输时间和成本不 同。公司需要在满足货物送达时间要求的前提下,选择最优的运输方式和路径,使得总成本最低。

用LINGO求解线性规划问题

用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.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解决线性规划问题的程序(经典)Lingo12软件培训教案Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。

例1 一个简单的线性规划问题0 , 600 2 100 350 st. 3 2max >=<=+=<<=++=y x y x x y x y x z!exam_1.lg4 源程序 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; endsets data :ALPHA = 0.7; a=11 12 13 ; r2 = 1..3; b = 11 12 13; c = 11 12 13; enddatarows/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把上述程序进行改进,引进运行子模块和打印运算结果的语句:!exam_3.lg4 源程序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('transfer_out.txt');!向.txt文件按自定格式输出数据;@write('最小运输成本=',cost,@newline(1),'最优运输方案x=');@for(rows(i):@write(@newline(1));@writefor(cols(j): ' ',@format(x(i,j),'3.0f') ) );@divert(); !关闭输出文件;endcalcend打开transfer_out.txt文件,内容为:最小运输成本=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文件中读取原始数据!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 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种输出方法;!exam_5.lg4的源程序;sets: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('a.txt'); !外部txt文件输入;mat1 = @ole('d:\lingo12\data.xls',mat1); !EXcel文件输入; enddatacalc:@text('a_out.txt') = a; !列向量形式输出数据;@for(link: mat2 = 2*mat1);@ole('d:\lingo12\data.xls') = mat2 ;!把mat2输出到xls文件中的同名数据块;!向.txt文件按自定格式输出数据(参照前例);Endcalc例6 程序段中的循环和选择结构举例!exam_6.lg4的源程序;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): 程序体);进行计算。

运用Lingo进行线性规划求解(实例)

运用Lingo进行线性规划求解(实例)
LinDo/LinGo软件
LinDo
输入模型 求解
点击求解按钮 结果
即可
♂返回
!注释内容,可用中文

!目标函数:最大-max,最小-min,大小写不分
max 3 x1+5 x2+4 x3

!约束,以subject to开始

subject to

2 x1+3 x2<=1500
2 x2+4 x3<=800
3*x1+2*x2+5*x3<=2 000; end
注意与LinDo的区别
目标函数中加等号 变量与系数之间用“*” Model:-end可省略
♂返回
LinGo 模 式
Model: Sets: !定义集合
Endsets
Data:
!定义数据
Enddata 调用函数与计算
end
♂返回
model: !开始

@sum(set(set_index_list)|condition:expressi
on)
@min(max)(set(set_index_list)|condition:ex pression)
♂返回
Global optimal solution found at
iteration:
3

Objective value: 2675.000

Variable Value
Reduced Cost
C( 1) 3.000000
0.000000
C( 2) 5.000000
0.000000
C( 3) 4.000000
0.000000

用LINGO求解线性规划的例子

用LINGO求解线性规划的例子

附1:用LINGO求解线性规划的例子一奶制品加工厂用牛奶生产A1、A2两种奶制品,1桶牛奶可以在设备甲上用12小时加工成3公斤A1,或者在设备乙上用8小时加工成4公斤A2。

根据市场需求,生产的A1、A2能全部售出,且每公斤A1获利24元,每公斤A2获利16元。

现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间为480小时,并且设备甲每天至多能加工100公斤A1,设备乙的加工能力没有限制。

试为该厂制定一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:1)若用35元可以购买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?数学模型:设每天用x1桶牛奶生产A1 ,用x2桶牛奶生产A2目标函数:设每天获利为z元。

x1桶牛奶可生产3x1公斤A1,获利24*3x1,x2桶牛奶可生产4*x2公斤A2,获利16*4x2,故z=72x1+64x2约束条件:原料供应:生产A1、A2的原料(牛奶)总量不超过每天的供应50桶,即x1+x2≤50劳动时间:生产A1、A2的总加工时间不超过每天正式工人总的劳动时间480小时,即12x1+8x2≤480设备能力:A1的产量不得超过设备甲每天的加工能力100小时,即3x1≤100非负约束:x1、x2均不能为负值,即x1≥0,x2≥0综上所述可得max z=72x1+64x2s.t.x1+x2≤5012x1+8x2≤4803x1≤100x1≥0,x2≥0显然,目标函数和约束条件都是线性的,这是一个线性规划(LP),求出的最优解将给出使净利润最大的生产计划,要讨论的问题需要考虑参数的变化对最优解和影响,一般称为敏感性(或灵敏度)分析。

LINGO求解线性规划用LINGO求解线性规划时,首先在LINGO软件的模型窗口输入一个LP模型,模型以MAX或MIN 开始,按线性规划问题的自然形式输入(见下面例子所示)。

LINGO 线性规划问题的求解

LINGO  线性规划问题的求解

实验报告课程名称:运筹学项目名称:线性规划问题的求解姓名:专业:班级:1班学号:同组成员:一、实验准备:1.线性规划(Linear programming,简称LP)是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。

研究线性约束条件下线性目标函数的极值问题的数学理论和方法。

英文缩写LP。

它是运筹学的一个重要分支,广泛应用于军事作战、经济分析、经营管理和工程技术等方面。

为合理地利用有限的人力、物力、财力等资源作出的最优决策,提供科学的依据。

从实际问题中建立数学模型一般有以下三个步骤;(1)根据影响所要达到目的的因素找到决策变量;(2)由决策变量和所在达到目的之间的函数关系确定目标函数;(3)由决策变量所受的限制条件确定决策变量所要满足的约束条件。

2.所建立的数学模型具有以下特点:(1)每个模型都有若干个决策变量(x1,x2,x3……,xn),其中n为决策变量个数。

决策变量的一组值表示一种方案,同时决策变量一般是非负的。

(2)目标函数是决策变量的线性函数,根据具体问题可以是最大化(max)或实际中,为保证完成100套工架,所使用原材料最省,可以混合使用各种下料方案。

设按方案A,B,C,D,E下料的原材料数分别为x1,x2,x3,x4,x5根据表可以得到下面的线性规划模型:解:虽然连续投资问题属于动态优化问题,但可以用静态优化的方法解决,用决策变量xi1,xi2,xi3,xi4(i=12…,5)分别表示第i年年初为项目A,B,C,D,的投资额,根据问题的要求各变量的对应关系如表,表中空白处表示当年不能为该项目投资,也可认为投资额为0.实验报告成绩(百分制)__________ 实验指导教师签字:__________。

运用Lingo进行线性规划求解(实例)

运用Lingo进行线性规划求解(实例)
要点一
LINGO
支持多种线性规划算法,包括单纯形法、网络算法等。
要点二
Gurobi
主要采用高级优化算法,如分支定界法、动态规划等。
LINGO与Gurobi的比较
LINGO
支持各种类型的约束条件,包括整数约束、非线性约束 等。
Gurobi
特别擅长处理大规模、非线性问题,但对线性问题的处 理能力稍弱。
LINGO
界面简洁,建模语言直观,易于学习和掌握。
Excel
需要结合多个函数和工具进行建模,对于复杂问题操作相对繁琐。
LINGO与Excel的比较
LINGO
针对优化问题进行了优化,求解速度 较快,精度较高。
Excel
求解速度较慢,对于大规模问题可能 无法得到满意的结果。
LINGO与Gurobi的比较
LINGO软件特点
高效求解
LINGO采用先进的求解算法,能够快速求解大规 模线性规划问题。
灵活建模
LINGO支持多种建模语言,用户可以根据需要选 择合适的语言进行建模。
图形界面
LINGO提供直观的图形界面,方便用户进行模型 设计和结果查看。
LINGO软件应用领域
生产计划
LINGO可用于制定生产计划,优化资源配置, 提高生产效率。
金融投资
LINGO可以用于金融投资组合优化,帮助投 资者实现风险和收益的平衡。
物流优化
LINGO可以帮助企业优化物流配送路线,降 低运输成本。
资源分配
LINGO可用于资源分配问题,如人员、设备、 资金的分配,以达到最优效果。
2023
PART 02
线性规划基本概念
REPORTING
线性规划定义
线性规划是数学优化技术的一种,它通过将问 题抽象为数学模型,利用数学方法来寻找最优 解。

LinGo:投资问题——线性规划

LinGo:投资问题——线性规划

LinGo:投资问题——线性规划⼀.根据题⽬所给数据,建⽴⼀张表格⽅便查看项⽬A项⽬B项⽬C项⽬D可投资年1,2,3,4321,2,3,4,5收回本利年次年年末第5年第5年当年年末本利 1.06 1.15 1.20 1.02最⼤投资⾦额(万)-4030-⼆.设第i年投资第j个项⽬ X ij第j个项⽬的本利为r三.约束条件1.第⼀年投资的⾦额=100万x(1,1) + x(1,4) = 100;2.往后每年的投资⾦额要=今年年初回收的本利和x(2,1) + x(2,3) + x(2,4) = x(1,4) * r(4);x(3,1) + x(3,2) + x(3,4) = x(1,1) * r(1) + x(2,4) * r(4);x(4,1) + x(4,4) = x(2,1) * r(1) + x(3,4) * r(4);x(5,4) = x(3,1) * r(1) + x(4,4) * r(4);3.第2个项⽬的单次投资⾦额要<=40万x(3,2) <= 40;4.第3个项⽬的单次投资⾦额要<=30万x(2,3) <= 30;四.⽬标函数 : 第五年末的本利和max = r(1) * x(4,1) + r(2) * x(3,2) + r(3) * x(2,3) + r(4) * x(5,4);五.LINGO代码sets:row/1..5/;col/1..4/ : r;link(row,col) : x;endsetsdata:r = 1.06, 1.15, 1.20, 1.02;enddata!@for(link(i,j) : x(i,j) = 0);!1;x(1,1) + x(1,4) = 100;!2;x(2,1) + x(2,3) + x(2,4) = x(1,4) * r(4);!3;x(3,1) + x(3,2) + x(3,4) = x(1,1) * r(1) + x(2,4) * r(4);!4;x(4,1) + x(4,4) = x(2,1) * r(1) + x(3,4) * r(4);!5;x(5,4) = x(3,1) * r(1) + x(4,4) * r(4);x(3,2) <= 40;x(2,3) <= 30;[OBJ]max = r(1) * x(4,1) + r(2) * x(3,2) + r(3) * x(2,3) + r(4) * x(5,4);六.LINGO运算结果Global optimal solution found.Objective value: 119.6512Infeasibilities: 0.000000Total solver iterations: 1Variable Value Reduced CostR( 1) 1.060000 0.000000R( 2) 1.150000 0.000000R( 3) 1.200000 0.000000R( 4) 1.020000 0.000000X( 1, 1) 70.58824 0.000000X( 1, 2) 0.000000 0.000000X( 1, 3) 0.000000 0.000000X( 1, 4) 29.41176 0.000000X( 2, 1) 0.000000 0.000000X( 2, 2) 0.000000 0.000000X( 2, 3) 30.00000 0.000000X( 2, 4) 0.000000 0.2077600E-01X( 3, 1) 0.000000 0.000000X( 3, 2) 40.00000 0.000000X( 3, 3) 0.000000 0.000000X( 3, 4) 34.82353 0.000000X( 4, 1) 35.52000 0.000000X( 4, 2) 0.000000 0.000000X( 4, 3) 0.000000 0.000000X( 4, 4) 0.000000 0.1960000E-01X( 5, 1) 0.000000 0.000000X( 5, 2) 0.000000 0.000000X( 5, 3) 0.000000 0.000000X( 5, 4) 0.000000 0.000000Row Slack or Surplus Dual Price1 0.000000 1.1460722 0.000000 1.1236003 0.000000 1.0812004 0.000000 1.0600005 0.000000 1.0200006 0.000000 0.6880000E-017 0.000000 0.7640000E-01OBJ 119.6512 1.000000结论:第⼀年:A:70.58824 D:29.41176第⼆年:C:30第三年:B:40 D:34.82353第四年:A:35.52第五年:不投资。

Lingo与线性规划

Lingo与线性规划

Lingo与线性规划线性规划的标准形式是MinZz2GXi111 CnXnX[ f | f a mn X n b m[x n i=12 川,n其中Z rqXi * II「CnXn称为目标函数,自变量为称为决策变量,不等式组(1)称为约束条件•满足不等式组(1)的所有(Xl,||(,Xn)的集合称为可行域,在可行域里面使得Z取最小值的(Xl,|||,Xn)称为最优解,最优解对应的函数值称为最优值。

求解优化模型的主要软件有Lin go、Matlab、Excel等。

其中Lingo是一款专业求解优化模型的软件,有其他软件不可替代的方便功能。

本文将简要介绍其在线性规划领域的应用。

一、基本规定1、目标函数输入格式max=S数解析式;或者min=函数解析式;2、约束条件输入格式利用:>、<、>=、V=等符号。

但是>与>=没有区别。

Lin go软件默认所以自变量都大于等于0.3、运算加(+),减(・),乘C),除(/),乘方(xAa),要注意乘号⑴不能省略。

4、变量名不区分大小写字母,不超过32个字符,必须以字母幵头。

5、标点符号每个语句以分号“;”结束,感叹号“!”开始的是说明语句(说明语句也需 要以分号“;” 结束)。

但是 ‘ model ,sets ,data 以“:”结尾。

endsets ,enddata , end 尾部 不加任何符号。

6、命令不考虑先后次序7、MODE 语句一般程序必须先输入MODEL 表示开始输入模型,以“ END 结束。

对简单的模型,这 两个语句也可以省略。

8改变变量的取值范围例1求目标函数乙二2捲-3X2的最小值,约束条件为st '为 +X2 H350X->100 2% 2X2 一 600XX -0输入Lingo 程序:min = 2*x1 + 3*x2; x1 + x2 >= 350; x1 >= 100; 2*x1 + x2 <= 600;有两种运行方式:1、 点击工具条上的按钮 即可2、 点击菜单:LINGS Solve运行结果如下:@bin (变量名); 限制该变量为0或1. @bnda,变量名,b);限制该变量介于a,b 之间. / 曰宀、@gin (变量名);X ・■允许该变量为负数•限制该变量为整数Global optimal solution found. Objective value:Infeasitoilities;Total solver iterations:VariableRon Slack or Surplus1 2 3 4F 面对其各个部分进行说明:Global optimal solution found :表示已找到全局最优解。

LINGO软件在线性规划中的运用

LINGO软件在线性规划中的运用

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.心得体会运筹学是近几十年发展起来的一门新兴学科。

LINGO使用说明

LINGO使用说明

LINGO使用说明一、LINGO的基本特性1.建模语言:LINGO使用一种直观的建模语言,被称为LINGO语言,它使用简洁的语法和自然语言类似的表达方式,使用户能够轻松地描述问题。

2.线性优化:LINGO支持线性规划(LP)和整数线性规划(ILP),它的线性优化功能包括线性约束、线性目标函数和变量定义,可以解决诸如生产优化、资源分配等问题。

3.非线性优化:LINGO还支持非线性规划(NLP)和全局优化(GLO),可以解决包括非线性约束和非线性目标函数的问题。

它提供了多种求解方法和算法,如牛顿法、逐次线性规划等。

4.约束和限制:LINGO能够处理各种类型的约束和限制,包括等式约束、不等式约束、逻辑约束等。

用户可以根据具体问题定义约束,LINGO会自动处理约束的完整性和一致性。

5.求解器:LINGO内置了一系列高效的求解器,如线性规划求解器、非线性规划求解器、整数规划求解器等。

用户可以根据问题的复杂程度选择最适合的求解器。

6.结果分析:LINGO可以生成详细的结果报告,包括优化解、约束条件、目标函数值等。

用户可以通过结果报告来分析问题的解决方案,做出决策。

二、LINGO的使用方法2.创建模型:在LINGO中,用户需要先创建一个模型文件,来描述问题。

可以通过鼠标点击“新建模型”按钮或选择文件菜单中的“新建”选项来创建一个新的模型文件。

3.定义变量:在模型文件中,用户可以定义变量。

变量可以是整数、二进制或连续的,并为每个变量分配一个名称、类型和取值范围。

4.定义目标函数:在模型文件中,用户可以定义一个目标函数。

目标函数可以是线性的或非线性的,并定义在变量上。

5.定义约束:在模型文件中,用户可以定义约束。

约束可以是线性的或非线性的,并定义在变量上。

用户需要通过约束来限制变量的取值范围。

6.设置求解器:在模型文件中,用户可以选择合适的求解器来解决问题。

LINGO提供了多种求解器,用户可以根据问题的复杂程度选择最适合的求解器。

LINGO使用简介及简单线性规划模型的求解

LINGO使用简介及简单线性规划模型的求解
1
这些运算符的优先级由高到低为:
高 #not# ﹣(取反)

﹡/
﹢﹣
#eq# #ne# #gt# #ge# #lt# #le#
#and# #or#
低 <= = >=
1
数学函数
@abs(x)
返回x的绝对值
@sin(x)
返回x的正弦值,x采用弧度制
ห้องสมุดไป่ตู้
@cos(x)
返回x的余弦值
@tan(x)
1
集的类型
LINGO有两种:原始集(primitive set)和派生 集(derived set)。
一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,
也就是说,它的成员来自于其它已存在的集。
1
定义原始集
为了定义一个原始集,必须详细声明: ·集的名字 ·可选,集的成员 ·可选,集成员的属性 定义一个原始集,用下面的语法: setname[/member_list/][:attribute_list];
注意:用“[]”表示该部分内容可选。
1
集合的定义
Setname是你选择的来标记集的名字,最好具 有较强的可读性。集名字必须严格符合标准命 名规则:以拉丁字母或下划线(_)为首字符, 其后由拉丁字母(A—Z)、下划线、阿拉伯 数字(0,1,…,9)组成的总长度不超过32 个字符的字符串,且不区分大小写。
flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase #le# 若左边的运算符小于或等于右边的运算符,则为true;否则为
flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true

线性规划问题的Lingo求解

线性规划问题的Lingo求解

注:1、写程序要习惯给程序用title命名 2、为了方便查看报告,用行号区分约束 3、此程序的格式可以固定为标准形式的求解模式。
程序改进三:可以减少引入的变量个数,将模型修改为下面的形式 min f=12*x11+24*x12+8*x13+30*x21+12*x22+24*x23 s.t. x11+x12+x13<=4 x21+x22+x23<=8 -x11-x21<= -2 -x12-x22<= -4 -x13-x23<= -5 x11,x12,x13,x21,x22,x23>=0 写成lingo语言如下所示:
转成相应的Lingo语言如下:
模型改进(2):引入库存变量,再利用库存平衡方程使模型更加流畅简洁。设xi为第i 个月的产量,di为销售量,ei为存储费,ci为单位成本,设第i个月的库存为si,则:
min f ci xi ei si
i 1 i 1
4
4
si 1 si xi di s1 0 s.t. s5 0 0 x 10000, i 1, 2,3, 4 i si 0且为整数,i 1, 2,3, 4
因为具有项目D,所以可以认为该部门每年都把自己全部投出去,而且年末的总资
本等于第二年初的总投资额。由此可建立模型如下:
max
f 1.15 x4 A 1.40 x2C 1.25 x3 B 1.06 x5 D
初始资金总额 x1 A x1D 10 x x x 1.06 x 第二年的总投资额 2 A 2 C 2 D 1 D x2C 3 x3 A x3 B x3 D 1.15 x1 A 1.06 x2 D 第三年的总投资额 s.t. x3 B 4 x4 A x4 D 1.15 x2 A 1.06 x3 D 第四年的总投资额 第五年的总投资 x5 D 1.15 x3 A 1.06 x4 D x , x , x , x 0, i 1,...,5 iA iB iC iD 转换成Lingo程序如下所示:

用lingo求解线性规划问题

用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解决线性规划问题的程序(经典)

lingo解决线性规划问题的程序(经典)

2024/1/27
求解整数规划问题
Lingo支持整数变量的定义和求 解,能够处理复杂的整数规划 问题。
求解非线性规划问题
Lingo具备强大的非线性求解能 力,能够处理包含非线性目标 函数和约束条件的问题。
数据分析和可视化
Lingo提供丰富的数据分析和可 视化工具,帮助用户更好地理 解问题和分析结果。
03
目标函数
04
以总运费为目标函数,求解最优 运输方案。
Lingo程序实现
使用Lingo语言描述问题,调用 Lingo求解器求解。
2024/1/27
22
资源分配问题
问题描述
有若干项任务需要完成,每项任务需要一定数量 的资源,且每项任务完成后有一定的收益。问题 是如何分配有限的资源给各项任务,使得总收益 最大。
将数学模型中的目标函数 输入到Lingo程序中,注意 正确设置优化方向(最大 化或最小化)。
将数学模型中的约束条件 逐一输入到Lingo程序中, 确保语法和逻辑正确。
保存编写好的Lingo程序, 并点击运行按钮开始求解 线性规划问题。
2024/1/27
18
程序运行与结果分析
查看运行结果
分析结果合理性
Lingo软件会自动求解线性规划问题,并显 示运行结果,包括目标函数值、决策变量 取值等。
根据问题的实际情况,分析运行结果的合 理性,确保解符合问题的实际要求。
调整模型或参数
输出结果报告
如果运行结果不合理或不符合预期,可以 调整数学模型或参数设置,并重新运行程 序进行求解。
2024/1/27
将运行结果整理成报告形式,包括问题背景 、数学模型、运行结果、结果分析等部分, 以便后续参考和使用。

2024版lingo解决线性规划问题的程序经典要点

2024版lingo解决线性规划问题的程序经典要点

资源分配问题案例
01
问题描述
资源分配问题涉及如何将有限的资源分配给不同的项目或部 门,以实现整体效益最大化的目标。
02 03
Lingo模型构建
在资源分配问题中,决策变量通常表示分配给不同项目或部 门的资源数量。目标函数可以是最大化整体效益或满足特定 目标下的资源分配,约束条件则包括资源总量的限制、项目 或部门的需求限制等。
数据处理能力
Excel在数据处理和表格计算方面 非常强大,而Lingo则更适合处理 复杂的优化问题。
求解规模
对于较小规模的线性规划问题, Excel的规划求解工具可以胜任, 但对于大规模问题,Lingo更具优 势。
扩展性
Lingo可以通过编写程序来解决各 种复杂的优化问题,而Excel则受 限于其内置的函数和工具。
对偶单纯形法
内点法
启发式算法
单纯形法是求解线性规 划问题的经典方法,它 通过迭代的方式在可行 域的顶点上寻找最优解。
对偶单纯形法是单纯形 法的一种改进,它通过 对偶问题的求解来得到 原问题的最优解,适用 于初始基可行解不易找 到的情况。
内点法是一种适用于大 规模线性规划问题的求 解方法,它通过在可行 域内部寻找最优解来避 免单纯形法在迭代过程 中可能出现的退化情况。
Lingo程序编写注意事项
变量命名规范 变量命名应具有描述性,避免使用无意 义的字符或数字组合,以提高代码可读
性和可维护性。 避免重复计算
在循环或迭代过程中,避免重复计算 相同的表达式或值,以减小计算量和
时间复杂度。
注释清晰明了 在关键代码处添加注释,解释代码功 能和实现思路,便于他人理解和修改。
Lingo软件功能与特点
功能丰富
Lingo软件提供了丰富的数学规划求解功能,包括 线性规划、非线性规划、整数规划、二次规划等。 用户可以根据实际问题需求选择合适的求解方法。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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、点击工具条上的按钮即可。

2、点击菜单: LINGO→Solve运行结果如下:下面对其各个部分进行说明:Global optimal solution found :表示已找到全局最优解。

Objective value:表示最优值的大小。

可见本题函数最小值z min800。

Infeasibilities:矛盾约束的数目。

Total solver iterations:迭代次数。

Variable:变量。

本题有两个变量。

Value:变量对应的最优解,即x1250,x2100 。

Reduced Cost:变量 x i在最优解的基础上增加一个单位,目标函数值的改变量。

例如,一个变量的 Reduced Cost值为 8,那么当该变量增加一个单位,在最大化(最小化)问题中目标函数值将减少(增大) 8 个单位。

Slack or Surplus:表示接近等于的程度,即约束离相等还差多少。

在约束条件是 <=中,表示松弛程度,在约束条件是 >=中,不是过剩程度。

如果约束条件是=,则 Slack or Surplus为 0,该约束是个紧约束 (或有效约束 )。

如果一个约束是矛盾的,即模型无可行解则 Slack or surplus的值是负数。

知道 Slack or Surplus 的值,可以帮助我们发现优化模型中错误的约束条件。

在上例中第 2 和第 4 行松弛变量均为 0,说明对于最优解来讲 ,两个约束 (第 2 和 4 行 )均取等号 ,即都是紧约束,第 3 行为 150,即最优解使得第 3 行过剩 150.Dual Price :对偶价格的值,它表示约束条件中的常数,每增加一个单位,目标函数值改变的数量(在最大化问题中目标函数值是增加,在最小化问题中目标函数值是减少)。

比如,在上一个 Min 模型中第四行的 1,表示 2*x1 + x2 <= 600 增加一个单位到 2*x1 + x2 <= 601,可以使目标值增加 -1(因为第一行是目标函数的Dual Price 是-1),即 Objective value = 799; 如果增加 -1 个单位到 599 会使目标值增加到 801。

例2 求目标函数 z 4x12 x22 2x32 12的最小值,约束条件为st.. 3x1 2 x2x39x1x2x31x1, x2 , x3R输入 Lingo 程序:min = 4*x1^2-x2^2+2*x3^2+12;3*x1+2*x2+x3=9;x1+x2+x3=-1;@free(x1); @free(x2); @free(x3);运行结果:即当 x11,x28, x310时, z min152 。

二、灵敏度分析灵敏度分析是指:找出模型变量系数的一个变化范围,使得最优基( 即最优解) 保持不变。

一般只对线性规划模型做灵敏度分析。

1、灵敏度分析操作步骤第一步:菜单 lingo-->options-->general solver-->dualcomputations:prices & ranges-->ok.第二步:菜单 lingo-->range2、灵敏度报告中常见的词汇Current coefficient Allowable increase Allowable decrease:当前目标函数系数:允许增加量:允许减少量Current RHS :当前右边常数项INFINITY :表示正无穷。

例 1 求解下列模型:max = 72*x1+64*x2;x1+x2 <= 50;12*x1+8*x2 <= 480;3*x1 <= 100;并做灵敏度分析。

求解报告:灵敏度分析报告:灵敏度分析报告的解读:x1 的系数变化范围是( 72-8 ,72+24 )=(64 ,96 ); x2 的系数变化范围是(64-16 ,64+8 )=(48,72)。

注意:x1 系数的允许范围需要 x2 系数 64 不变,反之亦然。

由于目标函数的费用系数变化并不影响约束条件,因此此时最优基不变可以保证最优解也不变,但最优值变化。

右边常数项中,第 2 行原来为 50 ,当它在 [50-6.67 ,50+10] = [43.33 , 60]范围变化时,最优基保持不变。

第 3 行可以类似解释。

对第 4 行,原来为 100 ,当它在 [100-40 ,100+∞] = [60, +∞]范围变化时,最优基保持不变。

不过由于此时约束发生变化,最优基即使不变,最优解、最优值也会发生变化。

三、数据输入对于大型的优化问题,即自变量比较多的时候,还像上两节那样输入目标函数和约束条件就比较麻烦了。

一般输入数据的方法有两种:一、建立向量、矩阵输入;二、调用外部数据。

这里仅介绍第一种方法。

1、建立向量命令格式:集合名称 / 集合维数 / :向量名称例如:sets :set1/1..9/:x;set2/1..5/:a,b;endsets表示建立了两类集合。

第一类集合set1 ,维数为 9, x 和 y 是向量名。

向量x=(x(1), , , x(9) ), 其中 x(i) 是 x 的元素。

第二类集合 set2 ,维数为 5,a 和 b 都是向量名。

向量 a=( a(1), , , a (5) ),其中 a(i) 是 a 的元素。

向量 b=(b(1), , , b(5) ) , 其中 b (i) 是 b 的元素。

2、建立矩阵命令格式:集合名称(集合 1,集合 2) / :矩阵名称例如:sets :set1/1..3/:x;set2/1..4/:a;link(set1, set2):A;endsets表示建立了一个矩阵类link ,其矩阵的阶数为34,A是具体的矩阵名。

有两个命令是比较常见的:求和语句 :@sum(集合名 (i):含集合名(i)的语句);循环语句 :@for( 集合名 (i):循环的语句);例 3:求目标函数 z 11x115x2的最小值,约束条件为s..t 20 x130x236030x125x2200030 x135x2300x1 , x20输入 Lingo 程序:model:sets :set1/1..2/:c,x;set2/1..3/:b;link(set2,set1):A;endsetsmax=@sum(set1(i):c(i)*x(i));@for(set2(i): @sum(link(i,j):A(i,j)*x(j))<=b(i));data :c=11 15;A=20 3030 2530 25;b=360 2000 300;enddataend运行结果报告:例 4、某地区有三个蔬菜生产基地,估计每年可供应本地区的蔬菜量表为:生产基地A B C蔬菜生产量 (吨)783有四个地市需要该类蔬菜,需求表为:地区甲乙丙蔬菜生产量 (吨)663如果从各蔬菜生产基地到各地市的每吨蔬菜的运价表地市甲乙丙丁3( 单位:万元丁/吨)为:生产基地A5879B49107C8429为了降低运输费,需要合理调拨资源.(1)根据以上资料表制订一个使总的运费为最少的蔬菜调拨方案.(2)如果有机会增加生产基地的产量 1 吨,问应当优先增加那个基地的产量?(3)如果将 A 到乙市的运价减少为 5 万元 / 吨,问这会影响最优的调拨方案吗?设 A:第i个蔬菜生产基地,i 1,2,3 ,分别对应生产基地,,;i A B CB i:第 i个蔬菜需求地, i1,2,3,4 ,分别对应蔬菜需求地市甲、乙、丙、丁;Q:总运输费用;x ij:表示的是从第i 个生产基地向第j 个地市运输的蔬菜数量;c ij:表示的是从第i 个生产基地向第j 个地市运输蔬菜的运价;b i:第 i 个蔬菜生产基地的蔬菜产量;q i:第 j 个地市的蔬菜需求量;那么有优化模型:34 min Q c ij xiji 1j 1x11x12x13x14b1x21x22x23x24b2x31x32x33x34b3x 11x21x31q1st..x22x32q2x12 x13x23x33q3x14x24x34q4x ij0,i 1,2,3; j 1,2,3,4输入 Lingo 程序求解模型:model:sets :set1/1..3/:b;set2/1..4/:q;link(set1,set2):c,x;endsetsmin=@sum(link(i,j):c(i,j)*x(i,j));@for(set1(i): @sum(link(i,j): x(i,j))<=b(i));@for(set2(j): @sum(link(i,j): x(i,j))=q(j));data :c=5,8,7,94,9,10,78,4,2,9;b=7,8,3;q=6,6,3,3;enddataend运行结果如下:Global optimal solution found.Objective value:100.0000Infeasibilities:0.000000Total solver iterations:6Variable Value Reduced CostB( 1)7.0000000.000000B( 2)8.0000000.000000B( 3) 3.0000000.000000Q( 1) 6.0000000.000000Q( 2) 6.0000000.000000Q( 3) 3.0000000.000000Q( 4) 3.0000000.000000C( 1, 1) 5.0000000.000000C( 1, 2)8.0000000.000000C( 1, 3)7.0000000.000000C( 1, 4)9.0000000.000000C( 2, 1) 4.0000000.000000C( 2, 2)9.0000000.000000C( 2, 3)10.000000.000000C( 2, 4)7.0000000.000000C( 3, 1)8.0000000.000000C( 3, 2) 4.0000000.000000C( 3, 3) 2.0000000.000000C( 3, 4)9.0000000.000000X( 1, 1) 1.0000000.000000X( 1, 2) 6.0000000.000000X( 1, 3)0.000000 1.000000X( 1, 4)0.000000 1.000000X( 2, 1) 5.0000000.000000X( 2, 2)0.000000 2.000000X( 2, 3)0.000000 5.000000X( 2, 4) 3.0000000.000000X( 3, 1)0.0000007.000000X( 3, 2)0.0000000.000000X( 3, 3) 3.0000000.000000X( 3, 4)0.000000 5.000000Row Slack or Surplus Dual Price1100.0000-1.00000020.0000000.00000030.000000 1.00000040.000000 4.00000050.000000-5.00000060.000000-8.00000070.000000-6.00000080.000000-8.000000从该报告可以得到:1、最优的调拨方案为:地市甲乙丙丁生产基地A1600B5003C00302 、从Dual Price来看生产基地 A 的供应量增加 1 个单位,费用不变;生产基地 B 的供应量增加 1 个单位,费用减少1;生产基地 C的供应量增加 1 个单位,费用减少4;城市甲的需求量增加 1 个单位,费用减少 -5 ,即增加 5;城市乙的需求量增加 1 个单位,费用减少 -8 ,即增加 8;城市丙的需求量增加 1 个单位,费用减少 -6 ,即增加 6;城市丁的需求量增加 1 个单位,费用减少 -8 ,即增加 8;3、从Slack or Surplus来看,所有的约束都是紧约束。

相关文档
最新文档