用LINGO软件求解“非线性规划”问题
实验二、利用Lingo求解整数规划及非线性规划问题
三、Lingo 循环编程举例
例5
sets: ren/A,B,C,D,E/:rent; job/1..5/:jobt; link(ren,job):time; endsets
!定义集合;
data: time=1,0.5,2,1.75,4
2,1,3,1.5,3.5 1.75,1.5,2.5,1,3 2.5,2,1.5,0.5,4 1,1.5,2,2,3; enddata
例 3 用Lingo软件求解非线性规划问题
min z x1 12 x2 22
x2 x1 1,
x1
x2
2,
x1
0,
x2
0.
Lingo 程序: min=(x1-1)^2+(x2-2)^2;
x2-x1=1;
x1+x2<=2;
注意: Lingo 默认变量的取值从0到正无穷大, 变量定界函数可以改变默认状态. @free(x): 取消对变量x的限制(即x可取任意实数值)
maxE=@max(students(i):English); !英语的最高分; averageM=@sum(students(i):Math)/4; !数学的平均分; @for(students(i):total(i)=Math(i)+English(i));
!每个学生数学与英语分数之和.
(4) 衍生集合的定义. 包括如下参数:
@for(yshu(j):@sum(bliang(i):x(i)*c(j,i))<=b(j));
!约束条件;
例6、指派问题
公司在各地有4项业务,选定了4位业务员去处理。由于 业务能力、经验和其它情况不同,4业务员去处理4项业 务的费用(单位:元)各不相同,见下表:
LINGO语言应用讲座
LINGO 语言应用讲座(一)Lingo 解方程、求极值以及简单规划问题例1求解非线性方程组⎪⎩⎪⎨⎧=+++=+4222222y y x x y x其LINGO 代码如下:model :x^2+y^2=2;2*x^2+x+y^2+y=4;@bnd(0.4,x,0.5);@bnd(1,y,2); end例2某工厂有两条生产线,分别用来生产M 和P 两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M 产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而美国P 产品需要2个劳动日,该厂工人每天共计能提供160劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?解 设两种产品的生产量分别为1x 和2x ,则该问题的数学模型为 目标函数 21300200m ax x x z +=.约束条件 ⎪⎪⎩⎪⎪⎨⎧=≥≤+≤≤.2,1,0,1602,120,1002121i x x x x x i其LINGO 代码如下:Model:MAX=200*X1+300*X2; X1<=100; X2<=120;X1+2*X2<=160; EndGlobal optimal solution found.Objective value: 29000.00 Total solver iterations: 0Variable Value Reduced Cost X1 100.0000 0.000000 X2 30.00000 0.000000Row Slack or Surplus Dual Price 1 29000.00 1.0000002 0.000000 50.000003 90.00000 0.0000004 0.000000 150.0000该报告说明:运行2步找到全局最优解,目标函数值为29000,变量值分别为X1=100,X2=30.“Reduced Cost ”的含义是缩减成本系数(最优解中变量的Redced Cost 值自动取零),“Row ”是输入模型中的行号,“Slack or Surplus ”的意思为松弛或剩余,即约束条件左边与右边的差值,对于“<=”不等式,左边减右边的差值称为Surplus (剩余),当约束条件的两边相等时,松弛或剩余的值为零,如果约束条件无法满足,即没有可行解,则松弛或剩余的值为负数.“Dual price ”的意思是影子价格,上面报告中Row 2的松弛值为0,意思是第二行的约束条件,即第一条生产线的最大生产能力已经到达饱和状态(100个),影子价格为50,含义是:如果该生产线最大生产能力增加1,能使目标函数值,即利润增加50,;报告中Row3的松弛值为90,表示按照最优解安排生产(X20=30),则第三行的约束条件,即第条生产线的最大值不起作用,故影子价格为0; 例3 求解非线性规划问题4321max x x x x z +++=, ⎪⎪⎪⎩⎪⎪⎪⎨⎧≥≥≥≥≤+++≤++≤+≤.0,0,0,0,4.5321.121.1331.1,4841.121.1,4401.1,400..43214321321211x x x x x x x x x x x x x x t s其LINGO 代码如下: Model:Max=x1^(1/2)+x2^(1/2)+x3^(1/2)+x4^(1/2); x1<=400;1.1*x1+x2<=440;1.21*x1+1.1*x2+x3<=484;1.33*x1+1.21*x2+1.1*x3+x4<=532.4; end例 4.求函数)ln cos 5.1()(3x x x x e x f x++=-在区间(0.2,4)内的极小点和极小值以及极大值点和极大值.Model :Max =(x^3+1.5*@cos (x)+x*@log (x))*@exp (-x); @bnd (0.2,x,4); endModel :Min =(x^3+1.5*@cos (x)+x*@log (x))*@exp (-x); @bnd (0.2,x,4);end例5 基金的优化使用(2001年数学建模竞赛题).假设某校基金会得到了一笔数额为M万元的基金,打算将其存入银行,小基金会计划在n年内每年用部分本息奖励优秀师生,要求每年的奖金额相同,且在n年末仍保留原基金数额.银行存款税后年利率见表1.1.2.表1.1.2 银行存款税后利率表存期1年2年3年5年校基金会希望获得最佳的基金使用计划,以提高每年的奖金额,请在M=5000万元、n=5年的情况下设计具体存款方案.解 分析:假设首次发放奖金的时间是在基金到位后一年,一行每隔一年发放一次,每年发放的时间大致相同,小基金会希望获得最佳的基金使用计划,一提高每年的奖金额,且在n 年末仍保留原基金数额M ,实际上n 年中发放的奖金总额全部来自与利息.如果全部基金都存为一年定期,每年都用到期利息发放奖金,则每年的奖金数为5000*0.018=90万,这是没有优化的存款方案.显然,准备在两年后使用的款项应当存成两年定期,必存两次一年定期的收益高,以此类推.目标是合理分配基金的存款方案,使得n 年的利息总额最多.定义 收益比0432.1%16.212=+=a .按照银行存款税后利率表计算得到个存款年限对应的最优收益比见表1.1.3.表1.1.3 各存款年限对应的最优收益比存期年限1年2年3年4年(3+1方式) 5年最优收益比1.0181.04321.077761.097159681.144经分析得到两点结论:(1)一次性存成最长期,优于两个(或两个以上)较短期的组合(中途转存). (2)当存款年限需要组合时,收益比与组合的先后次序无关.建立模型 把总基金M 分成5+1份,分别用621,,,x x x 表示,其中521,,,x x x 分别存成1-5年定期,到期后本息合计用于当年发放奖金,6x 存5年定期,到期的本息合计等于原基金总数M.用S 表示每年用于奖励优秀师生的奖金额,用i a 表示第i 年的最优收益比. 目标函数是每年的奖金额最大,即max S.约束条件有3个:①各年度的奖金数额相等;②奖金总数为M ;③n 年末保留原基金总额M.于是得到模型如下: max S ,⎪⎪⎩⎪⎪⎨⎧=∑====.,,5,,2,1,..6561M x a M x i S x a t s i i i i (1.1.2)这是线性规划模型,用LINGO 软件求解,令M=5000,编写程序如下:其LINGO 代码如下:MAX=S;1.018*x1=S;1.0432*x2=S;1.07776*x3=S;1.07776*1.018*x4=S;1.144*x5=S;1.144*x6=M;M=5000;X1+x2+x3+x4+x5+x6=M;Global optimal solution found.Objective value: 135.2227Total solver iterations: 0Variable Value Reduced CostS 135.2227 0.000000X1 132.8317 0.000000X2 129.6230 0.000000X3 125.4664 0.000000X4 123.2479 0.000000X5 118.2016 0.000000X6 4370.629 0.000000M 5000.000 0.000000Row Slack or Surplus Dual Price1 135.2227 1.0000002 0.000000 -0.21105483 0.000000 -0.20595654 0.000000 -0.19935225 0.000000 -0.19582736 0.000000 -0.18780937 0.000000 -0.18780938 0.000000 0.40266319 0.000000 0.2148538例6某公司6个供货栈,库存货物总数分别为60,55,51,43,41,52,现由8个客户各要一批货,数量分别为35,37,22,32,42,32,43,38,各供货栈到8个客户处的单位货物运输价见表2表2供货栈到客户的单位货物运价(元/每单位)试确定各货栈到各客户的货物调运数量,使总的运费最小.解 引入决策变量ij x ,代表从第i 个货栈到第j 个客户的货物运量.用符号ij c 表示从第i 个货栈到第j 个客户的单位货物运价,i a 表示第i 个货栈的最大供货量,i d 表示第j 个客户的订货量.目标函数是总运输费用最小.约束条件有三条:①各货栈运出的货物总量不超过其库存数;②各客户收到的货物总量等于其订货数量;③决策变量ij x 非负.则本问题的数学模型为:∑∑===6181min i j ijij x c z ,⎪⎪⎪⎩⎪⎪⎪⎨⎧==≥==∑=≤∑==.8,,2,1,6,,2,1,0,8,,2,1,,6,,2,1,..6181 j i x j d x i a x t s ij j i ij i j ij(1.2.1)1.集合定义部分LINGO 将集合(SET )的概念引入建模语言,集合是一组相关对象构成的组合,代表模型中的实际事物,并于数学变量及常量联系起来,是实际问题到数学的抽象.例1.2.1中的6个仓库可以看成是一个集合,8个客户可以看成另外一个集合.每个集合在使用之前需要预先给出定义,定义集合时要明确三方面内容:集合的名称、集合内的成员(组成集合的个体,也称元素)、集合的属性(可以看成是与该集合有关的变量或常量,相当于数组).本例先定义仓库集合:WH/W1..W6/AI;其中WH 是集合的名称,W1..W6是集合内的成员,“..”是特定的省略号(如果不用省略号,也可以把成员一一列出来,成员之间用逗号或空格分开),表明该集合有个成员,分别对应6个货栈,AI 是集合的属性,它可以看成是一个一维数组,有6个分量,分别表示各货栈现有货物的总数.集合、成员、属性的命名规则与变量相同,可按自己的意愿,用有一定意义的字母数字串来表示,式中“/”和“/:”是规定的语法规则.本例还定义客户集合: VD/V1..V8/DJ;该集合有8个成员,DJ 是集合的属性(有8个分量)表示各客户的需求量.以上两个集合称为初始集合(或称基本集合,原始集合),初始集合的属性都相当一维数组.为了表示数学模型中从货栈到客户的运输关系以及与此相关的运输单价ij c 和运量ij x ,再定义一个表示运输关系(路线)的集合:LINKS(WH,VD):C,X;该集合以初始集合WH 和VD 为基础,称为衍生集合(或称派生集合).C 和X 是该衍生集合的两个属性.衍生集合的定义语句有如下要素组成:(1)集合的名称; (2)对应的初始集合;(3)集合的成员(可以省略不写明); (4)集合的属性(可以没有).定义衍生集合时可以用罗列的方式将衍生集合的成员一一列出来,如果省略不写,则默认衍生集合的成员取它所对应初始集合的所有可能的组合,上述衍生集合LINKS 的定义中没有指明成员,而它对应的初始集合WH 有6个成员,VD 有8个成员,因此LINKS 成员取WH 和VD 的所有可能组合,即集合LINKS 有48个成员,48个成员可以排列成一个矩阵,其行数与集合WH 的成员个数相等,列数与VD 的成员个数相等.相应地,集合LINKS 的属性C 和X 都相当于二维数组,各有48个分量,C 表示货栈i w 到客户j v 的单位货物运价,X 表示货栈i w i w 到客户jv的运量.本模型完整的集合定义为: SETS:WH/W1..W6/:AI; VD/V1..V8/:DJ; LINKS(WH,VD):C:X; ENDSETS注 集合定义部分以语句SETS :开始,一语句ENDSETS 结束,这两个语句必须单独成一行.ENDSETS 后面不加标点符号.2.数据初始化(数据段)以上集合中属性X (有48个分量)是决策变量,是待求未知数,属性AI 、DJ 和C (分别有6,8,48个分量)都是已知数,LINGO 建模语言通过数据初始化部分来实现对已知属性赋以初始值,格式为:DATA:AI=60,55,43,41,52;DJ=35,37,22,32,41,32,43,38; C=6,2,6,7,4,2,5,9 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注 数据初始化部分以语句DATA :开始,以语句ENDDATA 结束,这两个语句必须单独成一行.数据之间的逗号和空格可以互相替换.3.目标函数和约束条件 目标函数表达式∑∑===6181mini j ij ij x c z 用LINGO 语句表示为:MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J));式中@SUM 是LINGO 提供的内部函数,其作用是对某个集合的所有成员,求指定表达式的和,该函数需要两个参数,第一个参数是集合名称,指定对该集合的所有成员求和,如果此集合是一个初始集合,它有m 个成员,则求和运算对这m 个成员进行,相当于求∑=mi 1,第二个参数是一个表达式,表示求和运算对该表达式进行.此处@SUM 的第一个参数是LINKS(I,J),表达式求和运算对衍生集合LINKS 进行,该集合的维数是2,共有48个成员,运算规则是:先对48个成员分别求表达式C(I,J)*X(I,J)的值,然后求和,相当于求∑∑==6181i j ij ij x c ,表达式中的C 和X 是集合LINKS 的两个属性,它们各有48个分量.注 如果表达式中参与运算的属性属于同一个集合,则 @SUM 语句中索引(相当于矩阵或数组的下标)可以省略(隐藏),假如表达式中参与运算的属性属于不同的集合,则不能省略属性的索引.本例的目标函数可以表示成:MIN= (LINKS:C*X);约束条件)6,,2,1(81 =≤∑=i a x ij ij 实际上表示了6个表达式,用LINGO 语言表示该约束条件,语句为:@FOR(WH(I):@SUM(VD(J):X(I,J))<=AI(I));语句中的@FOR 是LINGO 提供的内部函数,它的作用是对某个集合的所有成员分别生成一个约束表达式,它有两个参数,第一个参数为WH ,它表示货栈,共有6个成员,故应生成6个约束表达式, @FOR 的第二个参数为是约束表达式的具体内容,此处再调用@SUM 函数,表示约束表达式的左边求和,是对集合VD 的8个成员,并且对表达式X(I,J)中第二维J 求和,即∑=81j ij x ,约束表达式的右边是集合WH 的属性AI ,它有个约束表达式一一对应.本语句中的属性分别属于不同的集合,所以不能省略索引I,J.注 @SUM 和@FOR 函数可以嵌套使用.同样地,约束条件8,,2,1,61 ==∑=j d x j j ij 用LINGO 语句表示为:@FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(J)); 4. 完整的模型综上所述,本问题完整的LINGO 模型如下: MODEL: SETS:WH/W1..W6/:AI; VD/V1..V8/:DJ; LINKS(WH,VD):C,X; ENDSETS DATA:AI=60,55,43,41,52;DJ=35,37,22,32,41,32,43,38; C=6,2,6,7,4,2,5,94,9,5,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;ENDDATAMIN=@SUM(LINKS(I,J):C(I,J)*X(I,J)); !目标函数;@FOR(WH(I):@SUM(VD(J):X(I,J))<=AI(I)); !约束条件;@FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(J));END注 LINGO模型以语句MODEL:开始,以语句END结束,这两个语句单独成一行.完整的模型由集合定义、数据段、目标函数和约束条件等部分所组成,这几个部分的先后次序无关紧要,!开头的语句是注释语句(可有可无).选菜单Lingo|Solve(或按Ctrl+S),或鼠标点击“求解”按钮,在“Solution Report”信息窗口中,看到具体求解结果为:Global optimal solution found at step: 17(计算步骤数)Objective value: 664.0000(目标函数值)Variable Value Reduced Cost(以下是调运方案) X(W1,V1) 0.0000000 5.000000X(W1,V2) 19.00000 0.000000……(以上省略了X(W1,V3)至X(W6,V6)的具体数值)X(W6,V7) 3.000000 0.000000X(W6,V8) 0.0000000 3.000000计算结果表明:目标函数值为664.0000,最优运输方案见表1.2.2.表1.2.2 最优运输方案问题:1.用LINGO 求解下列方程组的所有实数解:(1)⎩⎨⎧=+-=+.09.075.0,1322y x y x (2)⎩⎨⎧=+++=+.42,22222y y x x y x 2. 已知方程组⎪⎩⎪⎨⎧-=++=,9002600,)1300(13750022y y x u u y 且22236≤+y x ,其中x,y 是变量,u 是常数,问u 在什么范围内时该方程组有解?若u=1.2,求该方程组的解.3. 用LINGO 求解下列线性规划:(1)432181026m ax x x x x z +++=,⎪⎪⎩⎪⎪⎨⎧=≥≤++-≤++-≤--+.4,,1,0,10324,258233,204465..432143214321 i x x x x x x x x x x x x x t s i (2)65432181121110913m ax x x x x x x z +++++=,⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=≥≤++≤++=+=+=+.6,,1,0,9003.12.15.0,8001.14.0,500,600,400..654321635241 i x x x x x x x x x x x x x t s i4.求解下列非线性规划:(1)21m in x x z --=,⎪⎩⎪⎨⎧≤≤≤≤+-+-≤++-≤.40,30,369688324,2882..21121314122131412x x x x x x x x x x x t s 5.用LINGO 求函数x x x x x x x f sin 502.05.1202.09)(5432++-+-=在区间(2,8)内的极小值点和极小值6.求函数)ln cos 5.1()(3x x x x e x f x ++=-在区间(0.2,4)内的极小点和极小值以及极大值点和极大值..(提示:sinx 表示为@sin(x), cosx 示为 @cos(x), lnx 表示为 @log(x), e x 表示为@exp(x))(本资料素材和资料部分来自网络,仅供参考。
实验二、利用Lingo求解整数规划及非线性规划问题
建立数学模型
根据问题要求,建立相应的数 学模型,包括变量、约束条件 和目标函数等。
设置求解参数
根据问题类型和规模,设置合 适的求解参数,如求解方法、 迭代次数等。
分析结果
对求解结果进行分析,验证模 型的正确性和可行性。
05 整数规划问题求解实例
问题描述
问题背景
本实验将通过一个具体的整数规划问题,展示如 何利用LINGO软件进行求解。该问题涉及到生产 计划优化,目标是最大化利润,同时满足一系列 约束条件。
非线性规划问题在数学、经济、工程等领域有广泛应用,是 优化理论的重要分支。
非线性规划问题的分类
01
按照目标函数的性质,非线性规划问题可以分为凸规
划和凹规划。
02
按照约束条件的性质,非线性规划问题可以分为无约
束、有界约束和等式约束三种类型。
03
按照决策变量的个数,非线性规划问题可以分为单变
量和多变量规划。
定义约束条件
使用LINGO的FROM命令定义约束条件,例 如FROM ... >= ... (P1,P2,...,Pn)。
LINGO求解过程及果分析
求解过程
在LINGO中输入模型,选择求解器类型(整数求解器或线性求解器),设置参数,运行求解过程。
结果分析
查看求解结果,包括最优解、最优值、松弛解等信息。对结果进行解释和评估,分析其对实际问题的 指导意义。
07 实验总结与展望
实验收获与体会
掌握整数规划和非线性规划的基本概念和求解方法
通过实验,我深入了解了整数规划和非线性规划的基本概念和求解方法,包括数学模型 建立、约束条件处理、目标函数处理等。
熟练使用LINGO软件
通过实验,我掌握了LINGO软件的基本操作和参数设置,能够利用LINGO软件求解整 数规划和非线性规划问题。
运筹学lingo实验报告(一)
运筹学lingo实验报告(一)运筹学lingo实验报告介绍•运筹学是一门研究在给定资源约束下优化决策的学科,广泛应用于管理、工程、金融等领域。
•LINGO是一种常用的运筹学建模和求解软件,具有丰富的功能和高效的求解算法。
实验目的•了解运筹学的基本原理和应用。
•掌握LINGO软件的使用方法。
•运用LINGO进行优化建模和求解实际问题。
实验内容1.使用LINGO进行线性规划的建模和求解。
2.使用LINGO进行整数规划的建模和求解。
3.使用LINGO进行非线性规划的建模和求解。
4.使用LINGO进行多目标规划的建模和求解。
实验步骤1. 线性规划•确定决策变量、目标函数和约束条件。
•使用LINGO进行建模,设定目标函数和约束条件。
•运行LINGO求解线性规划问题。
2. 整数规划•在线性规划的基础上,将决策变量的取值限制为整数。
•使用LINGO进行整数规划的建模和求解。
3. 非线性规划•确定决策变量、目标函数和约束条件。
•使用LINGO进行非线性规划的建模和求解。
4. 多目标规划•确定多个目标函数和相应的权重。
•使用LINGO进行多目标规划的建模和求解。
实验结果•列举各个实验的结果,包括最优解、最优目标函数值等。
结论•运筹学lingo实验是一种有效的学习运筹学和应用LINGO的方法。
•通过本实验能够提高对运筹学概念和方法的理解,并掌握运用LINGO进行优化建模和求解的技能。
讨论与建议•实验过程中是否遇到困难或问题,可以进行讨论和解决。
•提出对于实验内容或方法的建议和改进方案。
参考资料•提供参考书目、文献、教材、网站等资料,以便学生深入学习和研究。
致谢•对与实验指导、帮助或支持的人员表示感谢,如老师、助教或同学等。
以上为运筹学lingo实验报告的基本框架,根据实际情况进行适当调整和补充。
实验报告应简洁明了,清晰表达实验目的、内容、步骤、结果和结论,同时可以加入必要的讨论和建议,以及参考资料和致谢等信息。
LINGO软件简介
LINGO 软件简介LINGO 软件是一个处理优化问题的专门软件,它尤其擅长求解线性规划、非线性规划、整数规划等问题.一个简单示例有如下一个混合非线性规划问题:⎪⎩⎪⎨⎧≥≤≤+++---+为整数2132121321322212121,;0,,210022..15023.027798max x x x x x x x x x x t s x x x x x x x .LINGO 程序模型:max =98x1+277x2-x1^2-0.3x1x2-2x2^2+150x3; x1+2x2+2x3<=100; x1<=2x2;gin x1;gin x2; Lingo 默认变量非负注意:binx 表示x 是0-1变量;ginx 表示x 是整数变量;bndL,x,U表示限制LxU ;freex 表示取消对x 的符号限制,即可正、可负.结果:Global optimal solution found.Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45 Variable Value Reduced CostX1 6.000000 -76.70000X2 31.00000 -151.2000X3 16.00000 -150.0000Row Slack or Surplus Dual Price1 9561.200 1.0000002 0.000000 0.0000003 56.00000 0.000000———————— 非常简单在LINGO 中使用集合为了方便地表示大规模的规划问题,减少模型、数据表示的复杂程度,LINGO 引进了“集合”的用法,实现了变量、系数的数组化下标表示.例如:对⎪⎪⎩⎪⎪⎨⎧==-++-==≤++∑=.,,;10)0(;4,3,2,1),()())()1()(;4,3,2,1,20)(..)}(20)(450)(400{min4,3,2,1均非负INV OP RP INV I I DEM I OP I RP I INV I INV I I RP t s I INV I OP I RP I求解程序:model :sets :mark/1,2,3,4/:dem,rp,op,inv;也可以vmark/1..4/:dem,rp,op,inv;endsetsmin=sum mark:400rp+450op+20inv;也可以markI:400rpI+450opI+20invI;for markI: rpI<40;for markI|Igt1: invI=invI-1+rpI+opI-demI;inv1=10+rp1+op1-dem1;data:dem=40,60,75,35;enddataend上面程序在model…end之间有1集合定义、2数据输入和3其他三部分内容.集合定义部分从sets:到endsets:定义了一个指标集合mark可以理解为数组下标及其范围和其4个属性dem、rp、op、inv用此向量的数组变量.数据输入部分从data:到enddata依次给出常量dem的值.其他部分:给出优化目标及约束.一般而言,LINGO中建立优化模型的程序可以由五部分组成,或称为五段section:1集合段SETS:这部分以“SETS:”开始,以“ENDSETS”结束,作用在于定义必要的集合变量SET及其元素member,含义类似于数组的下标和属性attribute,含义类似于数组.2目标与约束段:这部分实际上定义了目标函数、约束条件等,但这部分没有段的开始和结束标记;该段一般常用到LINGO内部函数,尤其是和集合相关的求和函数SUM和循环函数FOR等.3数据段DATA:这部分以“DATA:”开始,以“ENDDATA”结束,作用在于对集合的属性数组输入必要的常数数据.格式为:attribute属性=value_list常数列表;常数列表中的数据之间可以用逗号、空格或回车符分隔.如果想要在运行时才对参数赋值,可以在数据段使用输入语句,其格式为“变量名=;”,但仅限对单个变量赋值,而不能用于属性变量数组的单个元素.4初始段INIT:这部分以“INIT:”开始,以“ENDINIT”结束,作用在于对集合的属性数组定义初值因为求解算法一般是迭代算法,提供一个较好的初值,能提高计算效果.定义初值的语句格式为:attribute属性=value_list常数列表;这与数据段中的用法类似.5计算段CALC:这部分以“CALC:”开始,以“ENDCALC”结束,作用在于对一些原始数据进行预处理加工,使其成为模型直接需要的数据.该段中通常是计算赋值语句.基本集合与派生集合为了处理二维数组变量等有多个下标的问题,LINGO引入了“派生集”的概念.我们把直接列出元素的指标集合叫“基本集合”,而基于其他集合派生出来的二维或多维指标集合称为“派生集”.派生集的定义格式为:派生集名原始集合1,原始集合2,…,原始集合n:属性变量列表;实际上就是笛卡儿积的意思,即:派生集={i1,i2, (i)n| i1集合1, i2集合2,…, in集合n}.1一个应用例子布局问题:某些建筑工地的位置用平面坐标a,b表示及水泥日用量d已知.现有A、B两临时料场位于P5,1、Q2,7,日储量20.问A、B两料场分别向各工地运输多少吨水泥,使总吨公里数最小若重新安排两料场的位置,应怎样安排才能使总吨公里数最小这样安排可节省多少吨公里设工地位置ai ,bi,水泥日用量为dii=1,2,…,6;料场位置xi,yi,日储量ej,j=1,2;从料场j向工地i运送量为cij.该问题的数学模型为:LINGO求解程序为:MODEL:sets:Imark/1..6/:a,b,d;Jmark/1,2/:x,y,e;IJmarkImark,Jmark:c;endsetsdata:Location for demand需求点位置;a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;Quantities of the demand and supply供需量;d=3,5,4,7,6,11;e=20,20;enddatainit:Initial location for the supply初始点;x,y=5,1,2,7;endinitObjective function目标;OBJ min=sum IJmarki,j: ci,jxj-ai^2+yj-bi^2^1/2; demand contraints需求约束;for Imarki:DEMAND_CON SUM Jmarkj:ci,j=di;; supply constrains供给约束;for Jmarkj:SUPPLY_CON SUM Imarki:ci,j<=ej;;for Jmark: free x;free y;;2一个动态规划的例子:最短路问题从S城市到T城市之间找一条最短路径,道路情况如下:数学模型为:LINGO求解程序:model:sets:cities/s,a1,a2,a3,b1,b2,c1,c2,t/:L; 属性Li表示城市S到城市i的最优行驶路线的里程;roadscities,cities/ 派生集合roads表示的是网络中的道路;s,a1 s,a2 s,a3 由于并非所有城市间都有道路直接连接,所以将路具体列出;a1,b1 a1,b2 a2,b1 a2,b2 a3,b1 a3,b2b1,c1 b1,c2 b2,c1 b2,c2 属性Di,j是城市i到城市j的直接距离已知;c1,t c2,t/:D;endsetsD= 6 3 36 5 8 67 46 7 8 95 6;L=0,,,,,,,,; 因为Ls=0;enddatafor citiesi|igt index s: 这行中"indexs"可以直接写成"1";Li=min roadsj,i:Lj+Dj,i;; 这就是最短路关系式;endVariable ValueL S0.000000L A16.000000L A23.000000L A33.000000L B110.00000L B27.000000L C115.00000L C216.00000L T20.00000最短路径为: S-〉A3-〉B2-〉C1-〉T3指派问题设有6个人做6件事.其中cij表示第i人做第j事的收益;设第i人做第j事时xij =1,否则xij=0.该问题的规划模型:说明:其中“-”表示某人无法做该事.可令其为-表示绝对不行或0领薪不用干活LINGO求解程序:MODEL:sets:Imark/1..6/:i;Jmark/1..6/:j;IJmarkImark,Jmark:c,x;endsetsdata:第i人做第j事的收益;c=20,15,16,5,4,717,15,33,12,8,69,12,18,16,30,1312,8,11,27,19,14-99,7,10,21,10,32-99,-99,-99,6,11,13;enddataOBJ max=sum IJmarki,j: cx;每人做一项工作;for Imarki: SUM Jmarkj:xi,j=1;;每事一人做;for Jmarkj: SUM Imarki:xi,j=1;;for IJmark: bin x;本约束可以不要,因为有解时必为0或1; END4生产与销售计划问题某公司用两种原油A 和B 混合加工成两种汽油甲和乙.甲、乙两种汽油含原油A 的最低比例分别为50%和60%,每吨售价分别是4800元和5600元.该公司现有原油A 和B 的库存量分别为500吨和1000吨,还可以从市场上买到不超过1500吨的原油A.原油A 的市场价为:购买量不超500吨时单价为10000元/吨;购买量超过500吨但不超1000吨时,超过500吨部分单价为8000元/吨;购买量超过1000吨部分的单价是6000元/吨.该公司应如何安排原油的采购和加工以获得最大利润数学模型: 设原油A 用于生产甲、乙两种汽油的数量分别是x11和x12,原油B 用于生产甲、乙两种汽油的数量分别是x21和x22;购买原油A 的数量是x 吨,采购支出为cx 千元/吨.为了处理分段函数cx,将原油采购量x 分解为对应价格10千元/吨的采购量x1、对应对应价格8千元/吨的采购量x2和对应价格6千元/吨的采购量x3,它们应满足:0)500(21=-x x 表示要么x1=500要么x2=0,即x1的量不达到500时x2=00)500(32=-x x 表示要么x2=500要么x3=0,即x2的量不达到500时x3=0此时采购支出3216810)(x x x x c ++=模型改变为:LINGO 求解程序:model :init:x1=500;x2=500;x3=0;x12=1500;x22=1000;x11=0;x21=0;endinitmax=4.8x11+4.8x21+5.6x12+5.6x22-10x1-8x2-6x3; x11+x12<=x+500;x21+x22<=1000;0.5x11-0.5x21>=0;0.4x12-0.6x22>=0;x=x1+x2+x3;x1-500x2=0;x2-500x3=0;bnd0,x1,500;bnd0,x2,500;bnd0,x3,500;。
LINGO软件求解优化问题
x 2 y 2 z 30
3 x y 2 z 20
40
2x
y
10
z
50
x , y , z 0
• 2、求解非线性规划
m inf(x24y)2(12x)2
三、Lingo运算符和函数
1、运算符及其优先级
算术运算符 +-*/^
关系运算符 <(=) = >(=)
三、Lingo基本语法
1、定义了目标函数为MIN=.. MAX=.. 2、以一个分号“;”结尾
——除SETS, ENDSETS, DATA , ENDDATA, END之外 3、可以放在约束条件的右端,同时数字也可 放在约束条件的左端。 4、假定各变量非负。 5、注释:“!”
6、<、>为≤、≥
例1:加工奶制品的生产计 划
使用绝对值、符号函数、多个变量求最大/最小值、四舍 五入、取整函数等 • 尽量使用线性模型,减少非线性约束和非线性变量的个数 如x/y <5 改为x<5y • 合理设定变量上下界,尽可能给出变量初始值 • 模型中使用的参数数量级要适当
– 如小于103
练习
• 1、求解线性规划
min( 2 x 3 y 5 z )
SAS软件优化功能 其他
连续优化
离散:整数规划 IP: ILP PIP 0-1
线性规划 LP
二次规划 QP
非线性规划 NLP
LINDO
LINGO
优势:模型表述简单 求解引擎强大
数学规划模型
• 决策变量 x =(x1, x2, …, xn ) • 目标函数 Min Z = f (x)
• 约束条件 s.t x A ( Rn )
5、Options 7个选 项卡
LINGO使用说明(比较简单)
Lingo介绍Lingo是美国LINDO系统公司(Lindo Symtem Inc)开发的求解数学规划系列软件中的一个(其他软件为LINGDO,GINO,What’s Best等),它的主要功能是求解大型线性、非线性和整数规划问题,目前的版本是lingo11.0。
lingo分为Demo、solve suite、hyper、industrial、extended等六类不同版本,只有Demo版本是免费的,其他版本需要向LINDO系统公司(在中国的代理商)购买,Lingo的不同版本对模型的变量总数、非线性变量个数、整型变量个数和约束条件的数量做出不同的限制(其中extended版本无限制)。
Lingo的主要功能特色为:(1)既能求解线性规划,也有较强的求解非线性规划的能力;(2)输入模型简练直观;(3)运行速度快、计算能力强;(4)内置建模语言,提供几十种内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型;(5)将集合的概念引入编程语言,很容易将实际问题转换为Lingo语言;(6)能方便地与excel、数据库等其他软件交换数据。
学校图书馆40本《lingo和excel在数学建模中的应用》,袁新生、邵大宏、郁时炼主编,科学出版社Lingo 程序设计简要说明在数学建模中会遇到如规划类的题型,在这种模型中总存在着一个目标,并希望这个目标的取值尽可能的大或小,同时与这个目标有关的一系列变量之间存在一些约束。
在构造出目标函数和约束条件的表达式后,我们需要对求出这个最值和各变量的取值。
一般我们用LINGO 来对模型进行求解,本文将通过举一个简单的例子,围绕这个例子逐步学习LINGO 的使用。
LINGO 只是一个求解工具,我们主要的任务还是模型的建立! 当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
lingo解非线性规划
在LINGO中使用LINDO模型
优化建模
④ 运行程序的LINGO报告窗口(如下图)
注:LINGO不询问是否进行敏感性分析,敏感性分析 需要将来通过修改系统选项启动敏感性分析后,再调 用“REPORT|RANGE”菜单命令来实现。现在同样可 以把模型和结果报告保存在文件中。
优化建模
一个简单的LINGO程序
例 直接用LINGO来解如下二次规划问题:
Max98x127x72x120.3x1x22x22 1
s.t. x1x2100
2
x12x2
3
x1,x20 为整数
4
输入窗口如下:
程序语句输入的备注:
max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2;
优化建模
•LINGO总是根据“MAX=”或“MIN=”寻找目标函数。
IN(V0)10
加上变量的非负约束
优化建模
注:LINDO中没有数组,只能对每个季度分别定义变量, 如正常产量就要有RP1,RP2,RP3,RP4 4个变量等。 写起来就比较麻烦,尤其是更多(如1000个季度)的时候。
记四个季度组成的集合QUARTERS={1,2,3,4}, 它们就是上面数组的下标集合,而数组DEM,RP,OP, INV 对集合QUARTERS中的每个元素1,2,3,4分别对应于 一个值。LINGO正是充分利用了这种数组及其下标的关 系,引入了“集合”及其“属性”的概念,把 QUARTERS={1,2,3,4}称为集合,把DEM,RP,OP, INV称为该集合的属性(即定义在该集合上的属性)。
集合及其属性
• QUARTERS集合的属性
• DEM
• RP
优化建模
LINGO的使用方法说明大全
LINGO的使用简介LINGO软件是美国的LINGO系统公司开发的一套专门用于求解最优化问题的软件包.LINGO除了能够用于求解线性规划和二次规划外,还可以用于非线性规划求解、以及一些线性和非线性方程(组)的求解等.LINGO软件的最大特色在于它允许优化模型中的决策变量为整数,即可以求解整数规划,而且执行速度快.LINGO是用来求解线性和非线性优化问题的简易工具.LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果.在这里仅简单介绍LINGO的使用方法.LINGO(Linear INteractive and General Optimizer )的基本含义是交互式的线性和通过优化求解器.它是美国芝加哥大学的 Linus Schrage 教授于1980年开发了一套用于求解最优化问题的工具包,后来经过完善成何扩充,并成立了LINDO系统公司.这套软件主要产品有:LINDO,LINGO,LINDO API和What’sBest.它们在求解最优化问题上,与同类软件相比有着绝对的优势.软件有演示版和正式版.正式版包括:求解包(solver suite)、高级版(super)、超级版(hyper)、工业版(industrial)、扩展版(extended).不同版本的LINGO对求解问题的规模有限制,如附表3-1所示.附表3-1 不同版本LINGO对求解规模的限制版本类型总变量数整数变量数非线性变量数约束数演示版 300 30 30 150求解包 500 50 50 250高级版 2000 200 200 1000超级版 8000 800 800 4000工业版 32000 3200 32000 16000扩展版无限无限无限无限3.1 LINGO程序框架LINGO可以求解线性规划、二次规划、非线性规划、整数规划、图论及网络最优化问题和最大最小求解问题,以及排队论模型中最优化等问题.一个LINGO程序一般会包括以下几个部分:(1) 集合段:集部分是LINGO模型的一个可选部分.在LINGO模型中使用集之前,必须在集部分事先定义.集部分以关键字“sets:”开始,以“endsets”结束.一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分.一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须先定义.(2)数据段:在处理模型的数据时,需要为集部分定义的某些元素在LINGO求解模型之前为其指定值.数据部分以关键字“data:”开始,以关键字“enddata"结束.(3) 目标和约束段:这部分用来定义目标函数和约束条件等.该部分没有开始和结束的标记.主要是要用到LINGO的内部函数,尤其是与集合有关的求和与循环函数等.(4)初始段:这个部分要以关键字“INIT:”开始,以关键字“ENDINIT"结束,它的作用是对集合的属性定义一个初值.在一般的迭代算法中,如果可以给一个接近最优解的初始值,会大大减少程序运行的时间.(5)数据预处理段:这一部分是以关键字“CALC:”开始,以关键字“ENDCALC”结束.它的作用是把原始数据处理成程序模型需要的数据,它的处理是在数据段输入完以后、开始正式求解模型之前进行的,程序语句是按顺序执行的.3.2 LINGO中集合的概念在对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等.LINGO允许把这些相联系的对象聚合成集(sets).一旦把对象聚合成集,就可以利用集来最大限度地发挥LINGO建模语言的优势.现在将深入介绍如何创建集,并用数据初始化集的属性.3.2。
Lingo
当前时间
2
Lingo
Lingo工具栏
File|Open (F3)
打开文件
File|Print (F7)
打印文件
Edit|Copy
(Ctrl+C) 复制
Edit|Find
(Ctrl+F) 查找
Edit|Undo
(Ctrl+Z) 取消操作
Edit|Match LINGO|Options
决策变量值
第1式剩余52 目标函数值 第3式剩余14
决策变量增加1时 目标函数的变化量
影子价格
13
Lingo
“Reduced Cost”列出最优单纯形表中判别 数所在行的变量的系数,表示当变量有微 小变动时,目标函数的变化率; “Slack or Surplus”松弛或剩余,即约束条 件左边与右边的差值,当约束条件的左右 两边相等时,其值为0; “Dual Price”影子价格,表示当对应约束有 微小变动时,目标函数的变化率。
x2 y2 2 2x2 x y2 2 y 6
4
Lingo
点击这里运行程序
x2 y2 2 2x2 x y2 2 y 6
5
Lingo
求解器状态框
当前模型的类型: LP (线性规划模型) QP (二次规划模型) ILP (混合整数线性规划模型) IQP (混合整数二次规划模型) PILP (纯整数线性规划模型) PIQP (纯整数二次规划模型) NLP (非线性规划模型) INLP (混合整数非线性规划模型) PINLP (纯整数非线性规划模型)
Edit | Go To Line (Ctrl+T) 定位某行
LINGO|Picture
Lingo软件在求解数学优化问题的使用技巧
3*x3+2*y3+z3<=375;
END
得到的解如下:
X1=200,Y1=0,Z1=0;
X2=58.33333, Y2=312.5,Z2=0;
X3=0,Y3=187.5,Z3=0;
最大总净收益为253333.3元。
3.公司在各地有4项业务,选定了4位业务员去处理。由于业务能力、经验和其它情况不同,4业务员去处理4项业务的费用(单位:元)各不相同,见下表:
常见的集合函数如下:
@FOR(set_name:constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions)描述。
@MAX(set_name:expression)返回集合上的表达式(expression)的最大值。
=
返回如下情形下的净现值:单位时段利率为 ,第 个时段支付单位费用,即:
=
(5)概率函数
@PSN(X)标准正态分布的分布函数。
@PSL(X)单位正态线性损失函数(即返回 的期望值,其中Z为标准正态随机变量)
@PPS(A,X)均值为A的Possion分布的分布函数(当X不是整数时,采用线性插值进行计算)。
(4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。作用在于对集合的属性(数组)定义初值。格式为:attribute=value_list。由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。通常可改变初值来得到不同的解,从而发现更好的解。
编写LINGO程序要注意的几点:
@PPL(X)Possion分布的线性损失函数(即返回 的期望值,其中Z为Possion分布随机变量)
用LINGO解决非线性规划问题
注意比较:
当去掉第二个约束条件y<=0.5时,最小值 为-3 当x=0, y=1时;
当去掉所有约束条件无条件最值时,最小
值为-5 当x=1, y=2时;
15
三、用LINGO解决非线性规划问题
例3 求解非线性规划问题:
16
三、用LINGO解决非线性规划问题
17
三、用LINGO解决非线性规划问题
18
X1+ 3X2<=18;
X1,X2为决策变量;
2X1+ X2<=16;
4X2<=20; 第二到四行均为约束条件
8
二、用LINGO解决基本的线性规划问题
我们编辑程序并求解后,得到LINGO Model窗口、 Solution report窗口和Solver status窗口如下:
9
二、用LINGO解决基本的线性规划问题
6
二、用LINGO解决基本的线性规划问题
例1 求解如下的线性规划模型:
m ax z 50 x1 70 x2 ,
x1 3 x2 1 8,
2 x 1 x 2 1 6 ,
4x2 20,
x 1 , x 2 0
7
二、用LINGO解决基本的线性规划问题
我们编辑一个LINGO程序:
MAX=50X1+70X2; 目标函数;
三、用LINGO解决非线性规划问题
例4 求解二次规划问题:
直接使用LINGO最大化过程:
max=98x1+277x2-x1^2-0.3x1x2-2x2^2; x1 + x2 <= 100; x1 <= 2x2; ginx1;ginx2;
19
三、用LINGO解决非线性规划问题
用Lingo软件编程求解规划问题解决方案
案例背满 足不同产品的需求,并优化资源利用, 实现成本最小化。
问题描述
该公司生产多种产品,每种产品有不 同的需求和资源消耗。目标是确定每 种产品的最优生产量,以最小化总成 本,同时满足需求和资源约束。
Lingo建模与编程实现
决策变量定义
定义每种产品的生产量为决策变量。
02
规划问题建模
问题分析与定义
明确问题背景和目标
01
了解问题的实际背景,确定问题的优化目标,如成本最小化、
收益最大化等。
识别决策变量
02
找出影响目标的关键因素,即决策变量,并确定其取值范围和
类型。
列出约束条件
03
分析问题的限制条件,如资源限制、时间限制等,列出所有约
束条件。
数学模型建立
1 2
选择合适的数学模型 根据问题的特点和目标,选择合适的数学模型, 如线性规划、整数规划、非线性规划等。
代码调试与优化
调试方法
01
输标02入题
在Lingo中,可以使用`@WRITE`等语句输出中间结果, 帮助调试代码。同时,Lingo还提供了错误提示功能, 方便用户定位代码错误。
03
针对大型复杂模型,可以采用以下优化策略:合理划 分模型结构、减少冗余计算、利用Lingo的并行计算
功能等。这些策略可以提高求解速度和准确性。
编程实现步骤与技巧
步骤二
建立目标函数
步骤三
添加约束条件
编程实现步骤与技巧
编程实现步骤与技巧
步骤四
运行求解
技巧一
合理设置变量类型
编程实现步骤与技巧
根据问题的实际情况,合理设置变量的类型(如整数、非负等),可以提 高求解效率和准确性。
利用LINGO软件解决数学建模问题
LINDO:
Max x1+x2+x3+x4 ST(大写或写subject to) x5+x6+x7+x8>=250000 x1+x5<=380000 x2+x6<=265200 x3+x7<=408100 x4+x8<=130100 2.85*x1-1.42*x2+4.27*x318.49*x4>=0; 2.85*x5-1.42*x6+4.27*x718.49*x8>=0; 16.5*x1+2.0*x2-4.0*x3+17*x4>=0; 7.5*x5-7.0*x6-13.0*x7+8.0*x8>=0; end
2) 0.000000 3) 0.000000 4) 0.000000 5) 0.000000 6) 0.000000 7) 0.000000 8) 43454.000000 9) 3239024.250000 10) 1890675.875000
-1.000000 1.000000 1.000000 1.000000 1.000000 0.000000 0.000000 0.000000 0.000000
表2
飞机汽油 1 2 辛烷数 >=91 >=100 蒸汽压力(g/cm^2) <=9.96*10^(-2) <=9.96*10^(-2) 产量需求(L) 越多越好 >=250000
建模过程略(详见《运筹学基础》P54—55) 目标函数:max z=x1+x2+x3+x4 约束条件:x5+x6+x7+x8>=250000 x1+x5<=380000 x2+x6<=265200 x3+x7<=408100 x4+x8<=130100 2.85x1-1.42x2+4.27x3-18.49x4>=0 2.85x5-1.42x6+4.27x7-18.49x8>=0 16.5x1+2.0x2-4.0x3+17x4>=0 7.5x5-7.0x6-13.0x7+8.0x8>=0 xj>=0(j=1,2...,8)
lingo教程
f(x)~目标函 目标函 数 决策变量个数n和 决策变量个数 和 约束条件个数m较 多元函数 约束条件个数 较 条件极值 大 最优解在可行域 的边界上取得
重点在模型的建立和结果的分析
§1
外层是主框架 外层是主框架窗口,包含了所有菜单命令和工具条, 其它所有的窗口将被包含在主窗口之下。在主窗口 内的标题为LINGO 内的标题为LINGO Model – LINGO1的窗口是LINGO的 LINGO1的窗口是LINGO的 默认模型窗口,建立的模型都都要在该窗口内编码 实现。下面举两个例子。
50桶牛奶 480小 桶牛奶, 桶牛奶 小 2小时 元 小时,3元 小时 时 至多100公斤 至多 公斤 制订生产计划, 制订生产计划,使每天净利润最大 A1 • 30元可增加 桶牛奶,3元可增加 小时时间,应否投 元可增加1桶牛奶 元可增加1小时时间 元可增加 桶牛奶, 元可增加 小时时间, 现投资150元,可赚回多少? 资?现投资 元 可赚回多少? • B1,B2的获利经常有 的获利经常有10%的波动, 的波动, 的波动 对计划有无影响? 对计划有无影响?
பைடு நூலகம்
x1 + x2 ≤ 50
12 x1 + 8 x 2 ≤ 480
3x1 ≤ 100 x1 , x 2 ≥ 0
线性 规划 模型 (LP)
模型求解
MODEL: MAX=72*X1+64*X2; X1+X2<=50; 12*X1+8*X2<=480; 3*X1<100; END
1)
软件实现
OBJECTIVE FUNCTION VALUE 3360.000 VALUE 20.000000 30.000000 SLACK OR SURPLUS 0.000000 0.000000 40.000000 2 REDUCED COST 0.000000 0.000000 DUAL PRICES 48.000000 2.000000 0.000000
LINGO用法
LINGO 操作入门LINGO 是用来求解线性和非线性优化问题的简易工具。
LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。
当你在windows 下开始运行LINGO 系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO 的默认模型窗口,建立的模型都都要在该窗口内编码实现。
下面举两个例子。
例1.1 如何在LINGO 中求解如下的LP 问题:,6002100350..32min 212112121≥≤+≥≥++x x x x x x x t s x x在模型窗口中输入如下代码: min =2*x1+3*x2; x1+x2>=350; x1>=100;2*x1+x2<=600;然后点击工具条上的按钮 即可。
>=和<=可写成>和<一个表达式可写成多行,如 min=2*x1 +3*x2;LINGO WINDOWS 命令文件菜单(File Menu ) 1. 新建(New )从文件菜单中选用“新建”命令、单击“新建”按钮或直接按F2键可以创建一个新的“Model”窗口。
在这个新的“Model”窗口中能够输入所要求解的模型。
2. 打开(Open )从文件菜单中选用“打开”命令、单击“打开”按钮或直接按F3键可以打开一个已经存在的文本文件。
这个文件可能是一个Model 文件。
3. 保存(Save)从文件菜单中选用“保存”命令、单击“保存”按钮或直接按F4键用来保存当前活动窗口(最前台的窗口)中的模型结果、命令序列等保存为文件。
4. 另存为...(Save As ...) 从文件菜单中选用“另存为...”命令或按F5键可以将当前活动窗口中的内容保存为文本文件,其文件名为你在“另存为...”对话框中输入的文件名。
(整理)lingo超经典案例.
Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。
Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:(1)集合段(sets endsets);(2)数据段(data enddata);(3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;@gin(x1);@gin(x2);end求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。
通过验证也可知这两组解均满足。
Lingo超经典案例大全
Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。
Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo 编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:(1)集合段(sets endsets);(2)数据段(data enddata);(3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;@gin(x1);@gin(x2);end求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。
通过验证也可知这两组解均满足。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
+ +
c12 c22
+ +
c13 c23
+ c14 + c24
+ c15 + c16 ≤ 20 ⎫ + c25 + c26 ≤ 20⎭⎬
⇒
6
cij ≤ ei
j =1
( j = 1, ..., 6) (i = 1, 2)
用LINGO9.0求解,首先分析此问题中的向量和矩阵,有: (1) 3 个 6 维向量:a, b, d; (2) 3 个 2 维向量:p, q, e,其中 p 和 q 表示题目中给出的最初暂定的两个料场的坐标; (3) 1 个 2×6 调度矩阵:c.
⎧
⎪⎪cij ≥ 0
⎪⎪c11 ⎪c12 s.t.⎪⎪⎪⎨cc1143
+ + + +
c21 c22 c23 c24
=3 =5 =4 =7
⎫ ⎪ ⎪ ⎪⎪ ⎬ ⎪
⇒
c1 j + c2 j
= dj
2
∑ ⇒ cij = d j
i=1
⎪⎪c15
+
c25
=
6
⎪ ⎪
⎪c16 + c26 = 11⎪⎭
∑ ⎪⎪c11
用 LINGO 软件求解“非线性规划”问题
丁老师(超盾博客) 一. 选址问题(选取位置,使总运量最小)
例 某工程,6个工地同时开工,每个工地的位置 M i (ai , bi ) ,距离值(单位:km)、水泥日
需求量 d (t) (单位:吨)由下表给出:
Mi
M1
M2
M3
M4
M5
M6
ai
1.25 8.75 0.5 5.75
i(程序j)
M1
M2
M3
M4
M5
M6
工地坐标
ai (程序a(j)) bi (程序b(j))
1.25 8.75 0.5 5.75 3 7.25
1.25 0.75 4.75 5
6.5 7.75
需求
d (t) (程序d(j))
3
5
4
7
6
11
demand
假设:(1) P( p1 , p2 ) 、 Q(q1, q2 ) 为料场;
(2) 从P调 c1 j 吨水泥到 M j ,从Q调 c2 j 吨水泥到 M j (1表示P,2表示Q),j = 1, … ,6.
∑ “总吨·公里”的表示方法:“总: ; 吨:c; 公里:两点间距”,目标函数是“非
线性”的,根据上述“总吨·公里”的表示方法得到“非线性”规划模型:
min f = c11 ( p1 − 1.25)2 + ( p2 −1.25)2 + c12 ( p1 − 8.75)2 + ( p2 − 0.75)2 + c13 ( p1 − 0.5)2 + ( p2 − 4.75)2 + c14 ( p1 −1.25.75)2 + ( p2 − 5)2 + c15 ( p1 − 3)2 + ( p2 − 6.5)2 + c16 ( p1 − 7.25)2 + ( p2 − 7.75)2 + c21 (q1 −1.25)2 + (q2 − 1.25)2 + c22 (q1 − 8.75)2 + (q2 − 0.75)2 + c23 (q1 − 0.5)2 + (q2 − 4.75)2 + c24 (q1 − 5.75)2 + (q2 − 5)2 + c25 (q1 − 3)2 + (q2 − 6.5)2 + c26 (q1 − 7.25)2 + (q2 − 7.75)2
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) 表示 2×6 调度矩阵; ! [obj] 表示在结果中标注目标函数所在行代码;
3
7.25
bi
Hale Waihona Puke 1.25 0.75 4.75 5
6.5 7.75
d (t) 3
5
4
7
6
11
目前暂定2个临时料场位于P(5,1)、Q(2,7)用于存储水泥,日储量20吨。假设从料场到工地之 间均可开通直线道路相连。试寻找更好的料场位置,使得总运输量(吨·公里)更小。 解 将题目和表格进行整理得到:
6个工地
Variable
Value
Reduced Cost
P( 1)
3.254883
0.000000
P( 2)
7.250000
0.8084079E-07
Q( 1)
5.652332
0.000000
Q( 2)
7.750000
0.2675276E-06
P(1)、P(2)、Q(1)、Q(2)的值即为对初始点(题给最初临时料场)优化迭代后得到的料
场的选取,即料场选取在 P( p1 , p2 ) = P(3.254883, 5.652332)与 Q(q1, q2 ) = Q(7.250000, 7.750000)比较好。注意:程序中的P(1)对应数学式中的 p1 ,但程序中 的P(2)对应的是数学式中的 q1 而不是 p2 。
[obj]min = @sum( link(i, j) : c(i, j) * ( ( p(i) - a(j) )^2 + ( q(i)
- b(j) )^2 )^(1/2) );
! 先变i后变j;
@for( demand(j) : [demand_con]@sum( supply(i) : c(i, j) ) = d(j); );
! 先变j后变i;
@for( supply(i) : [supply_con]@sum( demand(j) : c(i, j) ) <= e(i); );
@for( supply(i) : @free(x); @free(y); ); ! 所有变量可取负值;
end
点击保存后,按“Ctrl + S”运行得到结果: Objective value: 85.26604 (即:总运输量为85.26604吨·公里)
LINGO总程序:
sets:
demand/1..6/ : a, b, d; supply/1..2/ : p, q, e; link(supply, demand) : c;
! 3个6维向量; ! 3个2维向量; ! 1个2×6调度矩阵;
endsets
data:
a = 1.25, 8.75, 0.5, 5.75, 3, 7.25;