LINGO软件学习入门
- 格式:ppt
- 大小:689.00 KB
- 文档页数:59
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键将关闭当前活动窗口。
第7章 LINGO 软件入门7.1 LINGO 软件基本用法7.1.1 LINGO 软件简介:LINGO 软件是一套专门用于求解最优化问题的软件包. LINGO 可用于求解线性规划(LP ),二次规划(QP ),非线性规划(NLP ),整数规划(IP ),动态规划,多目标规划等,特别是对于变量或约束条件较复杂的大规模模型,提供了较好的选择.LINGO 还是最优化问题的一种建模语言,包括许多常用的数学函数可以调用,并可以接受其他数据文件(如文本文件、Excel 电子表格文件、数据库文件等),同时LINGO 提供了与电子表格软件(如Excel 等)的接口,能够直接集成到电子表格中使用.即使对优化方面知识了解不多的用户,也能够方便地建模和输入、有效地求解.7.1.2 LINGO 基本用法:启动LINGO 后,在主窗口上弹出标题为LINGO Model – LINGO1 的窗口,称为LINGO 的模型窗口,建立的模型都要在该窗口内编码实现.例1.求解下列二次规划.22121122121212982770.32;100;2;,;x x x x x x x x x x x x N +---+≤≤∈目标函数约束条件输入模型窗口LINGO1后的形式见下图.请注意以下几点:(1)LINGO总是根据“MAX=”或“MIN=”语句寻找目标函数,而其他语句都是约束条件(除注释语句和TITLE语句),所以语句顺序不重要.(2)LINGO中模型以“MODEL:”开始,以“END”结束.对简单的模型,这俩个语句也可以省略.(3)LINGO模型是由一系列语句组成,每个语句都以分号“;”结尾.(4)LINGO中不分大小写字母;其变量和行名由不超过32个字符(数字和字母)组成,且以字母开头;(5)乘号不能省略,即系数与变量之间要加运算符“*”.(6)“!”开头的是注释行(注释语句),可以省略.(7)“[]”为用户自定义的行号或行名,放在每行之前,可以省略.(8)LINGO中以“@”都是函数调用,@GIN表示变量取正整数.默认情况下,LINGO规定变量是非负的.(我们将在后面详细介绍函数)(9)“TITLE”后加名字,可对此模型命名,可以省略.现在我们用LINGO来解这个模型.点击工具条上的按钮,或从菜单中选择LINGO|Sovle 即可.(若模型编译有错,会有提示)求解时会显示下图:关闭窗口,得到运行结果:Local optimal solution found at iteration:找到最优解时迭代的次数. Objective value:表示所求的最优目标值(11077.50).Variable:变量名Value:最优解中各变量( Variable)的值.Row:约束条件行名.Reduced Cost:当该非基变量增加一个单位时(其他非基变量保持不变)目标函数减少的量(对max型问题)Slack or Surplus:约束对应得松弛变量的值.(第三行取0,对于最优解来讲,第三个约束取等号,为紧约束)Dual Price:对偶价格的值.表示当对应约束有微小变动时,目标函数的变化率,若其数值为X,表示对应约束中不等式右端项若增加一个单位,目标函数将增加X个单位(max 型问题).7.1.3 在LINGO中使用集合:1、LINGO模型的基本组成LINGO也是一种建模语言,称为矩阵生成器,通过集合的引入,它可使输入较大规模问题的过程得到简化.LINGO模型由5段组成:(1)、集合段:是用于定义变量.以“SETS:”开始,以“ENDSETS”结束.定义集合变量,元素,和属性.集合名/元素/:属性元素:类似于数组的下标.属性:定义集合的变量,类似于数组.属性之间必须用逗号或空格隔开.(2)、目标与约束段:定义目标函数,约束条件.(3)、数据段:用于给变量赋值.以“DATA:”开始,以“ENDDATA”结束.对集合的属性(数组)输入必要的常数数据.attribute list(属性)= value_list;(常数列表)(value_list)中数据用逗号或空格隔开.﹡在此段也可引入参数,“变量名=?”,在运行时才对参数赋值.但这仅用于单个变量赋值,而不能用于属性变量(数组).(4)、初始段:以“init:”开始,以“endinit”结束.对集合的属性(数组)定义初值. (5)、计算段:以“CALC:”开始,以“ENDCALA”结束.对一些原始数据进行“预处理”.﹡计算段中语句是顺序执行,不能交换位置.﹡计算段中只能直接使用赋值语句.2、集合的定义:变量使用之前需先定义,而LINGO中的变量是通过集合来定义的,变量皆为向量或由向量生成的二维数组.如:Demand/1..6/:a,b,d :集合名为Demand,共6个元素,a,b,d 为属于此集合的变量,其为含6个元素的向量.Supply/1,2/:x,y,e :集合名为Supply ,共2个元素,x,y,e 为属于此集合的变量,其为含2个元素的向量.————基本集合Link(demand,supply):c :集合link 是由集合demand和 supply生成的新集合,为二维数组,其元素由demand和 supply的笛卡尔积构成,即共6*2=12个元素变量c 即为6*2的矩阵————派生集合现有2料场,位于A (5, 1), B (2, 7),记(xj,yj),j=1,2, 日储量ej 各有20吨.假设从料场到工地之间均有直线道路相连,试制定每天的供应计划,即从A, B 两料场分别向各工地运送多少吨水泥,使总的吨公里数最小.解:设决策变量:ij c (料场j 到工地i 的运量)则其为12维.则规划模型为26221/2112161min [()()].,16,1,2ijji j i j i iji j ijji c xa yb s tcd i ce j ====-+-==≤=∑∑∑∑其LINGO 模型为:(1)集合段:我们定义需求点demand 和供应点supply 两个集合,分别有6个和2个元素,Demand/1..6/:a,b,d ; 其中a 为该集合的属性(变量),表示6个工地位置的横坐标的集合,是一个有6个元素的向量. Supply/1,2/:x,y,e ; 其中x 该集合的属性(变量),表示2个料场位置的横坐标的集合,是一个有2个元素的向量.运送量ij c 的集合是一个6*2 的矩阵,它需要利用集合demand 和supply ,定义一个新集合,定义ij c 为这个新集合的属性:Link(demand,supply):c;(2)数据段:给已知变量赋值.如a,b=1.25,1.25,8.75,0.75,0.5,4.75,5.75,5,3,6.5,7.25,7.75;也可写成a=1.25,8.75,0.5,5.75,3,7.25; b=1.25,0.75,4.75,5,6.5,7.75;注 LINGO 对数据是按列赋值的,而不是按行.分割数据可用空格,逗号,回车. (3)目标与约束段: 目标函数26221/211min[()()]ijji j i j i c xa yb ==-+-∑∑用LINGO 语句表示为:min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));()11*11*222*12*233*13*21244*14*255*15*266*16*2⎛⎫⎛⎫⎪⎪⎪ ⎪ ⎪ ⎪= ⎪⎪⎪ ⎪ ⎪ ⎪⎪ ⎪⎪ ⎪⎝⎭⎝⎭@sum :求和函数.这个函数的功能是对语句中冒号“:”后面的的表达式,按照“:”前面的集合指定的下标进行求和.“@sum ”相当于∑“”,“link(i,j)”相当于“i,j ∈link ”约束条件21.,16ijij s tcd i ===∑用LINGO 语句表示为:@for(demand(i): @sum(supply(j):c(i,j)) =d(i););@for:循环函数.意思是对冒号“:”前面的集合的每个元素(下标),对于“:”后面的约束关系式都要成立.注 @for 和@sum 可以嵌套使用.@free 函数取消了变量x,y 非负限制.(4)初始段:“X ,Y =5,1,2,7;”语句的实际赋值顺序是X=(5,2),Y=(1,7).作为寻找最优解的起始值. 模型如下: MODEL:Title Location Problem; sets:demand/1..6/:a,b,d; supply/1..2/:x,y,e; link(demand,supply):c; endsets data:!locations for the 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; enddata init:!initial locations for the supply (初始点); x,y=5,1,2,7; endinit!Objective function (目标);[OBJ] min=@sum(link(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2) ); !demand constraints (需求约束);@for(demand(i): @sum(supply(j):c(i,j)) =d(i);); !supply constraints (供应约束);@for(supply(i): @sum(demand(j):c(j,i)) <=e(i); ); @for(supply: @bnd(0.5,X,8.75); @bnd(0.75,Y,7.75); ); END 运行,得局部最优解X(1)=7.249997,X(2)=5.695940,Y(1)=7.749998,Y(2)=4.928524,,最小运量=89.8835(吨公里).NLP 中局部最优解不一定就是全局最优解,可通过“LINGO|Options|Global Solver|Use Global Solver ”菜单命令激活全局最优求解程序.7.1.4 LING O 的运算符和函数:在此我们主要介绍前六种函数1、算术运算符及其优先级:算术运算符:+(加法),—(减法或负号),*(乘法),/(除法)∧求幂)关系运算符:<(即<=,小于等于),=(等于),>(即>=,大于等于)逻辑运算符:#AND#(与),#OR#(或),#NOT#(非),#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于).结果只有“真”(1)和“假”(0)两个值。
第4讲 Lingo 软件入门司守奎烟台市,海军航空工程学院数学教研室Email :sishoukui@4.1 初识Lingo 程序Lingo 程序书写实际上特别简捷,数学模型怎样描述,Lingo 语言就对应地怎样表达。
首先介绍两个简单的Lingo 程序。
例4.1 求解如下的线性规划问题:121212112max726450,128480,s.t.3100,,0z x x x x x x x x x =++≤⎧⎪+≤⎪⎨≤⎪⎪≥⎩ Lingo 求解程序如下max =72*x1+64*x2; x1+x2<=50;12*x1+8*x2<=480; 3*x1<=100;说明:Lingo 中默认所有的变量都是非负的,在Lingo 中就不需写出对应的约束。
例4.2 抛物面22y x z +=被平面1=++z y x 截成一椭圆,求原点到这椭圆的最短距离。
该问题可以用拉格朗日乘子法求解。
下面我们把问题归结为数学规划模型,用Lingo 软件求解。
设原点到椭圆上点),,(z y x 的距离最短,建立如下的数学规划模型:⎩⎨⎧+==++++.,1s.t.min 22222y x z z y x z y xLingo 求解程序如下: min =(x^2+y^2+z^2)^(1/2); x+y+z=1; z=x^2+y^2;@free (x); @free (y);说明:Lingo 中默认所有变量都是非负的,这里y x ,的取值是可正可负的,所以使用Lingo 函数free 。
例4.3 求解如下的数学规划模型:⎪⎪⎩⎪⎪⎨⎧==∑∑∑===.,1s.t.min9912100100110012i ii i i ix x x x用Lingo 求解上述数学规划问题,使用集合和函数比较方便,使用集合的目的是为了定义向量,集合使用前,必须先定义;Lingo 程序中的标量不需要定义,直接使用即可。
sets :var/1..100/:x; endsetsmin =@sqrt (@sum (var(i):x(i)^2)); @sum (var(i):x(i))=1;x(100)=@sum (var(i)|i#le#99:x(i)^2); @for (var(i)|i#le#99:@free (x(i)));说明:如果不使用集合和函数,全部使用标量x1,x2,…,x100,最后一个约束就要写99遍,@free(x1); …; @free (x99)。
培训教案——LINGO(一)LINGO是一款常用的线性规划软件,它能够方便地解决复杂问题。
培训LINGO,需要深入了解软件的使用方法和解决实际问题的能力。
下面就LINGO培训的内容进行分点介绍。
一、LINGO的基础知识LINGO的基础知识包括软件的基本功能和操作。
需要讲解LINGO的界面、工具栏、菜单栏等。
初次接触LINGO的学员需要掌握LINGO的一些基本用法,比如如何输入数据、如何设定优化目标,如何设置约束等,这些都是LINGO的基本操作。
二、LINGO求解模型了解LINGO的基本操作之后,需要讲解LINGO的求解模型。
LINGO的数学模型是LINGO软件解决问题必需的部分。
对于LINGO求解模型的学习,需要学员掌握数学模型的建立方法和标准的数学模型。
培训学员掌握LINGO的求解模型知识是LINGO培训的核心。
三、LINGO的高级应用LINGO的高级应用需要讲授如何利用LINGO解决实际问题,需要讲解如何构建多约束模型来描述现实中的问题,如何设置变量、常数和目标函数等。
高级应用的讲授需要结合实例,让学员深入了解LINGO的实际应用场景,提高解决实际问题的能力。
四、LINGO的调试LINGO的调试是LINGO培训的重要组成部分。
在LINGO求解过程中,有时会出现错误,导致模型不能正常求解。
因此,需要讲解LINGO调试的方法和技巧,使得学员具备调试LINGO模型的能力。
五、LINGO应用举例为了让学员进一步巩固LINGO的知识,需要讲解一些LINGO的应用举例。
举例的内容包括:产品组合问题、生产调度问题、财务规划问题、运输规划问题等。
通过这些示例,让学员对LINGO的应用有更加深刻的理解。
六、LINGO的作业练习培训LINGO需要进行实际操作,软件操作的熟练程度可以通过作业考核来体现。
作业练习的难度需要逐渐增加,从简单到复杂地设置模型,巩固培训成果。
LINGO培训需要根据学员的水平进行分类管理,加强培训的个性化和针对性。
第1讲Lingo软件入门司守奎烟台市,海军航空工程学院数学教研室Email:sishoukui@1 Lingo软件的基本语法1.1 集合集合部分的语法为sets:集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1;集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2;派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3;endsets例26sets:product/A B/;machine/M N/;week/1..2/;allowed(product,machine,week):x;endsets1.2 数据数据部分的语法为data:属性1=数据列表;属性2=数据列表;enddata1.3 计算计算段部分不能含有变量,必须是已知数据的运算。
calc:b=0;a=a+1;endcalc1.4 模型的目标函数和约束条件这里就不具体给出了,下面通过具体例子给出。
1.5 子模型在LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。
在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。
子模型可以在主模型的计算段中被调用,这就进一步增强了LINGO 的编程能力。
子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。
同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是:SUBMODEL mymodel:可执行语句(约束+目标函数);ENDSUBMODEL其中mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。
也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。
如果已经定义了子模型mymodel,则在计算段中可以用语句“@SOLVE( mymodel);”求解这个子模型。