LindoLingo软件基本知识
- 格式:doc
- 大小:210.50 KB
- 文档页数:15
233第九章 Lingo软件快速入门9.1 Lingo概述LINDO和LINGO是美国LINDO系统公司开发的一套专门用于求解最优化问题的软件包。
LINGO用于求解线性规划和二次规划问题,LINGO除了具有LINDO的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。
LINDO 和LINGO软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。
LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题.由于这些特点,LINDO和LINGO软件在教学、科研和工业、商业、服务等领域得到了广泛应用。
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:9.2 LINGO 菜单说明9.2.1 文件菜单(File Menu)新建(New)从文件菜单中选用“新建”命令、单击“新建”按钮或直接按F2键可以创建一个新的“Model”窗口。
在这个新的“Model”窗口中能够输入所要求解的模型。
打开(Open)从文件菜单中选用“打开”命令、单击“打开”按钮或直接按F3键可以打开一个已234 经存在的文本文件。
这个文件可能是一个Model文件。
保存(Save)从文件菜单中选用“保存”命令、单击“保存”按钮或直接按F4键用来保存当前活动窗口(最前台的窗口)中的模型结果、命令序列等保存为文件。
另存为...(Save As...)从文件菜单中选用“另存为...”命令或按F5键可以将当前活动窗口中的内容保存为文本文件,其文件名为你在“另存为...”对话框中输入的文件名。
利用这种方法你可以将任何窗口的内容如模型、求解结果或命令保存为文件。
关闭(Close)在文件菜单中选用“关闭”(Close)命令或按F6键将关闭当前活动窗口。
Lindo 和Lingo 数学软件的简单使用方法一、Lindo最新版本:6.1版(注册版)限制:4000个约束、8000个变量、800个整型变量功能:可以求解线性规划、整数规划、混合整数规划、二次规划、目标规划。
我们主要用它来求解整数规划或混合整数规划。
特点:执行速度非常快 例1:求解整数规划问题12121212max 58..65945,0z x x s t x x x x x x =++≤+≤≥且整解:在lindo 的运行窗口中输入 max 5x1+8x2 stx1+x2<6 5x1+9x2<45 end gin 2然后按Solve 菜单或快捷键得运行结果。
OBJECTIVE FUNCTION V ALUE (目标函数最优值) 1) 40.00000VARIABLE V ALUE REDUCED COST (变量增加1时目标函数改变量) X1 0.000000 -5.000000 X2 5.000000 -8.000000ROW SLACK OR SURPLUS DUAL PRICES (行) (松弛变量值) (对偶价格,表示约束右边常数增加1时目标函数改变量)) 2) 1.000000 0.000000 3) 0.000000 0.000000RANGES IN WHICH THE BASIS IS UNCHANGED (灵敏度分析) OBJ COEFFICIENT RANGES (目标函数中变量的系数的变动范围,在此范围内最优解不变) V ARIABLE CURRENT ALLOWABLE ALLOWABLECOEF (当前系数) INCREASE (增加量) DECREASE (减少量) X1 5.000000 0.000000 INFINITY X2 8.000000 0.000000 INFINITYRIGHTHAND SIDE RANGES (约束条件右边常数的变化范围,在此范围内最优基不变) ROW CURRENT ALLOWABLE ALLOWABLERHS (当前系数)INCREASE (增加量) DECREASE (减少量) 2 6.000000 INFINITY 1.000000 (第一个约束) 3 45.000000 INFINITY 0.000000 (第二个约束)注意:1. 软件中已经假设所以的变量是非负的,所以非负约束不必输入; 2. 可以用 FREE 变量 来取消变量的非负限制; 3. 不区分大小写; 4. 约束条件“<=”、“>=”可以用“<”、“>”代替; 5. 变量名不能超过8个字符;6. 变量与系数间可以有空格,但不能有任何运算符号(如*等); 7. 不允许变量出现在一个约束条件的右端; 8. 输入中不能有“()”和“,”;比如4(x1+x2)应写成4x1+4x2等;9. 在一个式中同一变量不能出现一次以上,比如2x1+3x2-x1应简化为x1+3x2;gin 变量 变量为整数变量 gin nint n 模型中的前n 个变量为0/1整数变量,关于变量的顺序可由输出结果查证! 整数变量申明须放在最后(即end 后)例2:集合覆盖问题设有一集合S={1,2,3,4,5},及S 的一个子集簇P={{1,2},{1,3,5},{2,4,5},{3},{1},{4,5}},假设选择P 中各个元素的费用为1、1.5、1.5、0.8、0.8、1,试从P 中选一些元素使之覆盖S 且所选元素费用之和最小。
Lingo、lindo简介一、软件概述 (1)二、快速入门 (4)三、Mathematica函数大全--运算符及特殊符号 (11)参见网址: /一、软件概述(一)简介LINGO软件是由美国LINDO系统公司研发的主要产品。
LINGO是Linear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器。
LINGO可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。
其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。
能方便与EXCEL,数据库等其他软件交换数据。
LINGO实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。
(二)LINGO的主要特点:Lingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。
Lingo 提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。
1 简单的模型表示LINGO 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。
LINGO的建模语言允许您使用汇总和下标变量以一种易懂的直观的方式来表达模型,非常类似您在使用纸和笔。
模型更加容易构建,更容易理解,因此也更容易维护。
2 方便的数据输入和输出选择LINGO 建立的模型可以直接从数据库或工作表获取资料。
同样地,LINGO 可以将求解结果直接输出到数据库或工作表。
使得您能够在您选择的应用程序中生成报告。
3 强大的求解器LINGO拥有一整套快速的,内建的求解器用来求解线性的,非线性的(球面&非球面的),二次的,二次约束的,和整数优化问题。
用LINDO、LINGO 和WHAT'S BEST!解运筹学问题优化模型介绍实际问题中的优化模型Min/Max z=f(x), x=(x1,...,x n)Ts.t. g i(x)≤0,i=1,2,...,mx1,...,x n≥0其中x~决策变量,f(x)~目标函数,g i(x)≤0~约束条件数学规划分类:线性规划(LP)二次规划(QP)非线性规划(NLP)连续规划整数规划(IP):0-1整数规划、一般整数规划、纯整数规划(PIP)、混合整数规划(MIP) LINDO 公司软件产品简要介绍美国芝加哥(Chicago)大学的Linus Schrage教授于1980年前后开发, 后来成立 LINDO系统公司(LINDO Systems Inc.),网址:LINDO: Linear INteractive and Discrete Optimizer (V6.1)LINGO: Linear INteractive General Optimizer (V8.0)LINDO API: LINDO Application Programming Interface (V2.0)What’s Best!: (SpreadSheet e.g. EXCEL) (V7.0) 演示(试用)版、学生版、高级版、超级版、工业版、扩展版… (求解问题规模和选件不同)LINDO和LINGO软件能求解的优化模型LIN D O:线性规划(LP)、二次规划(QP)LIN G O:线性规划(LP)、二次规划(QP)、非线性规划(NLP)建模时需要注意的几个问题1、尽量使用实数优化,减少整数约束和整数变量2、尽量使用光滑优化,减少非光滑约束的个数如:尽量少使用绝对值、符号函数、多个变量求最大/最小值、四舍五入、取整函数等3、尽量使用线性模型,减少非线性约束和非线性变量的个数(如x/y <5 改为x<5y)4、合理设定变量上下界,尽可能给出变量初始值5、模型中使用的参数数量级要适当(如小于103)LINDO使用简介例加工奶制品的生产计划1桶牛奶(经过12小时)产生3公斤奶制品A ,可获利24元/公斤或1桶牛奶(经过8小时)产生4公斤奶制品B ,可获利16元/公斤某天约束:50桶牛奶、时间480小时、至多加工100公斤A如何制定生产计划,使这一天获利最大?一些小问题如下:问1、35元可买到1桶牛奶,买吗?若买,这一天最多买多少?问2、可聘用临时工人,付出的工资最多是每小时几元?问3、奶制品A的获利增加到 30元/公斤,是否应改变生产计划?解:决策变量 用x桶牛奶生产A 用y桶牛奶生产B 目标函数Max z=72 x + 64 y约束条件 x+ y ≤50 (原料供应)12 x+ 8 y ≤480 (劳动时间)3 x ≤100 (加工能力,产量约束)x, y≥0 (非负约束)在LINDO输入窗中输入如下代码:max 72 x+64 yst2) x+y<503)12x+8y<4804) 3x<100end再点按求解命令即可得到优化结果(含灵敏度分析信息)LP OPTIMUM FOUND AT STEP 2OBJECTIVE FUNCTION V ALUE1) 3360.000V ARIABLE V ALUE REDUCED COSTX 20.000000 0.000000Y 30.000000 0.00000020桶牛奶生产A, 30桶生产B,利润3360元。
Lindo/Lingo软件基本知识 Lindo/Lingo软件是美国Lindo系统公司开发的一套专门用于求解优化模型的软件。
一.Lingo入门
1.编写简单的Lingo程序
Lingo程序:在“模型窗口”中,按Lingo语法格式,输入一个完整的优化模型。 (注意:一个程序就是一个优化模型)
例1 要求解线性规划问题 .0,,1253,1034..,32maxyxyxyxtsyxz 输入程序: max=2*x+3*y; 4*x+3*y<=10; 3*x+5*y<=12;
例2 求解 .,0,,2,100..,23.027798max21212122212121且都是整数xxxxxxtsxxxxxx 输入程序: max=98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2; x1<=2*x2;x1+x2<=100; @gin(x1); @gin(x2);
2.语法格式
(1)目标函数 max= 或 min= (2)每个语句的结尾要有“;” (3)程序中,各个语句的先后次序无关 (4)自动默认各个变量均为大于等于零的实数 (5)不区分大写、小写 (6)程序中的“<=”、“<”等同于原模型中的“” 程序中的“>=”、“>”等同于原模型中的“” (7)对一个特定的变量 x ,进行限制: @free(x) :把x放宽为任意实数 @gin(x) :限制x为整数 @bin(x) :限制x只能取0或1 @bnd(-6,x,18) :限制x为闭区间[-6,18]上的任意实数
例3:某学校游泳队要从5名队员中选4名参加4乘100米混合泳接力赛。 5名队员4种泳姿的百米成绩(单位:秒) ----------------------------------------------------------------------------------- 李 王 张 刘 赵 蝶泳 66.8 57.2 78 70 67.4 仰泳 75.6 66 67.8 74.2 71 蛙泳 87 66.4 84.6 69.6 83.8 自由泳 58.6 53 59.4 57.2 62.4 ----------------------------------------------------------------------------------- 如何选拔? (1)请建立“0----1规划”模型; (2)用Lingo求解。
解:若第i名队员参加第j种泳姿比赛,则令1ijx;否则令0ijx;共有20
个决策变量ijx。第i名队员的第j种泳姿成绩记为ijc,则
目标函数为:5141minijijijxc
约束条件有:每名队员顶多能参加一种泳姿比赛 5,4,3,2,1,141ixjij; 每种泳姿有且仅有一人参加 .4,3,2,1,151jxiij
这样就能建立如下“0----1规划”模型: 5141minijijijxc
s.t. 5,4,3,2,1,141ixjij .4,3,2,1,151jxiij .4,3,2,1,5,4,3,2,1,10jixij或 Lingo程序如下: min=66.8*x11+57.2*x21+78*x31+70*x41+67.4*x51+75.6*x12+66*x22+67.8*x32+74.2*x42+71*x52+87*x13+66.4*x23+84.6*x33+69.6*x43+83.8*x53+58.6*x14+53*x24+59.4*x34+57.2*x44+62.4*x54; x11+x12+x13+x14<=1; x21+x22+x23+x24<=1; x31+x32+x33+x34<=1; x41+x42+x43+x44<=1; x51+x52+x53+x54<=1; x11+x21+x31+x41+x51=1; x12+x22+x32+x42+x52=1; x13+x23+x33+x43+x53=1; x14+x24+x34+x44+x54=1; @bin(x11); @bin(x21); @bin(x31); @bin(x41); @bin(x51); @bin(x12); @bin(x22); @bin(x32); @bin(x42); @bin(x52); @bin(x13); @bin(x23); @bin(x33); @bin(x43); @bin(x53); @bin(x14); @bin(x24); @bin(x34); @bin(x44); @bin(x54);
答:14433221,,,xxxx均等于1,即,依次取第2个人王、第3个人张、第4个
人刘、第1个人李参加蝶泳、仰泳、蛙泳、自由泳,成绩为253.2秒。 再介绍本题的另一个解法:用遍历法求出最佳组队方案。从5人中任取4人,
随意安排各人的泳姿,则共有 5!=120 种方案,取成绩最佳的方案。Matlab程序为 clear c=[66.8,75.6,87,58.6;57.2,66,66.4,53;78,67.8,84.6,59.4;70,74.2,69.6,57.2;67.4,71,83.8,62.4]; zxcj=888; for a1=1:5 for a2=1:5 for a3=1:5 for a4=1:5 aabb=(a1-a2)*(a1-a3)*(a1-a4)*(a2-a3)*(a2-a4)*(a3-a4); if aabb~=0 cj=c(a1,1)+c(a2,2)+c(a3,3)+c(a4,4); if cjzxcj=cj; fa=[a1,a2,a3,a4]; end end end end end end fa,zxcj 执行结果: fa = 2 3 4 1 zxcj = 253.2000
二.Lingo中使用集合 前面题3中的Lingo程序,其目标函数含有大规模的变量(20个),约束条件也很繁琐。现在,利用集合的概念,可使程序大大简化。
例4:某帆船制造公司要决定下两年八个季度的帆船生产量。八个季度
的帆船需求量分别是40条、60条、75条、25条、30条、65条、50条、20条,这些需求必须按时满足,既不能提前也不能延后。该公司每季度的正常生产能力是40条帆船,每条帆船的生产费用为400美圆。如果是加班生产的,则每条生产费用为450美圆。帆船跨季度库存的费用为每条20美圆。初始库存是10条帆船。如何生产? (注:本题当然可以用动态规划方法求解;接下来你将看到,建立优化模型用Lingo软件求解比较省事。)
解:八个季度的需求量数组记为xq,则 xq=[40,60,75,25,30,65,50,20]. 类似
地,用数组zc, jb, kc分别表示八个季度的正常生产量、加班生产量、季度末库存量。
目标函数是全部费用之和:.))(20)(450)(400(min81iikcijbizc
约束条件:生产能力 8,...,2,1,40)(iizc; 数量平衡 .8,...,3,2),()()()1()(),1()1()1(10)1(iixqijbizcikcikcxqjbzckc 以上是模型。怎样用Lingo编程呢? 把下标的范围当作集合,本题的集合是{1,2,3,4,5,6,7,8};定义在集合上的一个个数组,都分别称为该集合的属性,本题这个集合有四个属性,分别是xq,zc,jb,kc . 先看本题的Lingo程序,再看注解: model: sets: jihe/1..8/:xq,zc,jb,kc; endsets data: xq=40,60,75,25,30,65,50,20; enddata min=@sum(jihe:400*zc+450*jb+20*kc); @for(jihe:zc<=40); kc(1)=10+zc(1)+jb(1)-xq(1); @for(jihe(i)|i#gt#1:kc(i)=kc(i-1)+zc(i)+jb(i)-xq(i)); end
注解:(1)一个完整的Lingo程序必然以“model:”开始,以“end”结束。
(2)集合定义部分(从“sets:”到“endsets”):内容是定义集合及其属性,命令格式为 “ 集合名/集合的全部元素/:全体属性 ”。本程序中jihe/1..8/:xq,zc,jb,kc; ,这里的“1..8”等同于“1,2,3,4,5,6,7,8” 。 (3)数据输入部分(从“data:”到“enddata”):内容是输入已知数据。 (4)其它部分:包括目标函数、约束条件。 本程序中,@sum(jihe:400*zc+450*jb+20*kc),是求和函数, @for(jihe:zc<=40),是循环函数,zc的所有分量都不大于40,
@for(jihe(i)|i#gt#1:kc(i)=kc(i-1)+zc(i)+jb(i)-xq(i)),表示对集合jihe中
的所有大于1的i,都满足该项约束。
答:八个季度正常生产量 zc=[40,40,40,40,40,40,40,20]
八个季度加班生产jb=[0,10,35,0,0,0,10,0] 最小成本为 145750.0 美圆 。
练习题:解线性规划问题 .60,...,2,1,0,,,60,...,3,2,444,60,...,3,2,044,1,144..9min11111160jsrxjsxxjrxxsxrxtsxjjjjjjjjj 三.Lingo中的基本集合与派生集合 例5:料场选址问题
六个建筑工地的位置(用平面坐标a、b表示,距离单位:km)及其对水泥的日用量(用d表示,单位:t)由下表给出: 工地的位置(a,b)及 水泥日用量d --------------------------------------------------------------------------------------------------