LINGO软件简介

合集下载

LINGO简介

LINGO简介

例3 求解0—1整数线性规划问题 MAX f=-3x1+2x2-5x3 S.T x1+ x2- x3≤2 x1+4x2+x3≤4 x1+ x2 ≤3 4x2+x3≤6 xi (i=1,2,3)为0或1 程序如下:
MAX=-3*x1+2*x2-5*x3; x1+ x2-x3<=2; x1+4*x2+x3<=4; x1+x2<=3; 4*x2+x3<=6; @BIN(x1); @BIN(x2); @BIN(x3);
1、集合定义部分
这部分以“SETS:”开始,以 “ENDSETS”结束,作用在于定义必要的集合 变量(SET)及其元素(member,类似于数组 的下标)和属性(attribute,类似于数组)。 格式是: 集合名/1..n/:属性列表; 各属性之间用“,”分隔。属性的具体数值如 果是常量,则可在数据输入部分输入;如果是 未知量,则可在初始部分输入它的初值。
例 7、求解线性规划(LP)问题 min S.T
f (400xi 450yi 20zi )
i 1 4
zi zi 1 xi yi ri
xi 40 (i 1,,4)
(i 1,,4)
ri 40,60,75,25 (i 1,,4)
z0 10
三、LINGO模型的基本要素
当你遇到的是一个较大规模的优化问题时, 怎样才能做到输入几个语句就可以建立起含有 很多变量的目标函数和成千上万条约束的一个 复杂庞大的模型呢? 掌握LINGO提供的最优化模型语言是至关 重要的。 一个最复杂的LINGO模型由以下5个要素组 成(当然,如果实际问题不需要,则其中的某 些要素可以省略)。

参考一:LINGO软件入门

参考一:LINGO软件入门

第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)两个值。

Lingo软件学习

Lingo软件学习

算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符: ^ 乘方 ﹡ 乘 / 除 ﹢ 加 ﹣ 减 LINGO唯一的一元算术运算符是取反函数“﹣”
LINGO具有9种逻辑运算符: #not# 否定该操作数的逻辑值,#not#是一个一元运算符 #eq# 若两个运算数相等,则为true;否则为flase #ne# 若两个运算符不相等,则为true;否则为flase #gt# 若左边的运算符严格大于右边的运算符,则为true;否则为flase #ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase #lt# 若左边的运算符严格小于右边的运算符,则为true;否则为flase #le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true
Lingo以Model:开头,以end结束,这两个语句单独成行
补充:关于与Excel中数据的链接
先将Excel中的数据复制到剪切板上,然后将光标置于要插入 数据的部位,再在lingo编辑菜单中选择选择性粘贴(Paste Special),注意粘贴与粘贴链接的区别!
四、Lingo中部分函数介绍
LINGO中的函数有基本元算符,数学函数,金融函数,变 量限定函数等,全部函数请参照Edit|paste funtion。
对例一结果的相关说明
例一运行后得到如下结果:
Global optimal solution found. Objective value: Total solver iterations: Variable X1 X2 Value 250.0000 100.0000 800.0000 2 Reduced Cost 0.000000 0.000000

LINGO软件简介

LINGO软件简介

第三篇 LINGO 软件简介LINGO 是用来求解线性和非线性优化问题的简易工具。

LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO 高效的求解器可快速求解并分析结果。

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

例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。

产销单位运价如model:!6发点8收点运输问题;sets:warehouses/wh1..wh6/: capacity;vendors/v1..v8/: demand;links(warehouses,vendors): cost, volume;endsets!目标函数;min=@sum(links: cost*volume);!需求约束;@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));!产量约束;@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));!这里是数据;data:capacity=60 55 51 43 41 52;demand=35 37 22 32 41 32 43 38;cost=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;enddataend然后点击工具条上的按钮即可。

Lingo简介

Lingo简介

6. “ltx”:Lindo格式的模型文件;
7. “mps”:MPS(数学规划系统) Lingo软件模型一般由5部分组成: 1. 集合段(SETS):“SETS:”开始,“ENDSETS”结束; 2. 目标与约束段; 3. 数据段(DATA):“DATA:”开始,“ENDDATA”结束; 4. 初始化段(INIT):“INIT:”开始,“ENDINIT”结束;
无限
800 3200
无限
4000 16000
无限
Lindo/Lingo 软件简介
Lindo是英文Linear INteractive and Discrete Optimizer 字母的缩写,可求解线性规划(LP)和二次规划(QP)。
Lingo是英文Linear INteractive and General Optimizer 字母的缩写,除了具有Lindo所有功能之外,还可以用于求 解非线性规划(NLP),也可用于一些线性和非线性方程 的求解等。
Lindo/Lingo 软件简介
Lindo/Lingo内部求解器: 1. 直接求解程序(Direct Solver)
2. 线性优化求解程序(Linear Solver)
3. 非线性优化求解程序(Nonlinear Solver) 4. 分支定界管理程序(Branch and Bound Manager)
Lindo/Lingo 软件简介
美国芝加哥大学 Linus Schrage 教授于1980年前后开发 的一套专门用于求解最优化问题的软件包。 软件包括:Lindo、Lingo、Lindo API以及What’sBest! 这四款软件分为演示版(试用版)和正式版,两者的区别 在于求解问题的规模不同。正式版又可以分为求解包 (Solver Suite)、高级版(Super)、超级版(Hyper)、 工业版(Industrial)、扩展版(Extended)。

运筹学软件(LINGO)简介

运筹学软件(LINGO)简介

目标与约束段
对于产品数量的平衡方程而言, 由于下标I=1时的约束关系 与I=2,3,4时有所区别(因为定义的变量INV是不包含INV(0)), 因 此把I=1的约束关系单独写出“INV(1)=10+RP(1)+OP(1)-DEM(1);”, 而对I=2,3,4对应的约束, 增加了一个逻辑表达式来刻划: @FOR(QUARTERS(I)|I#GT#1: INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););
② 变量定界函数 @GIN(X): @BIN(X): @FREE(X): 限制X为整数. 限制X为0或1. 取消对X的符号限制.
@BND(L,X,U): 限制 L ≤ X ≤ U .
注: 有关其它函数的介绍, 请参考LINGO的帮助文件.
4、运算符说明 ① 运算符 算数运算符: +(加法), -(减法或负号), *(乘法), /(除法), ^(求幂). 关系运算符: <(即<=,小于等于), >(即>=,大于等于). 注:优化模型中的约束一般没有严格小于、严格大于关系. =(等于),
逻辑运算符: #AND#(与), #EQ#(等于), #OR#(或), #NE#(不等于), #NOT#(非); #GT#(大于).
#GE#(大于等于), #LT#(小于),#LE#(小于等于).
注: 逻辑运算的结果为“真”(TRUE)和“假”(FALSE), LINGO 中用数字1代表TRUE, 其它值都是FALSE.
2、状态窗口说明(例1)
Variables(变量数量) Total(变量总数) Nonlinear(非线性变量) Integer(整数数量)
注:由于LINGO对中文操作系 统的兼容性不好, 所以有些 显示字符和单词被截掉了.

《LINGO简介》课件


某些复杂的数学表达可能无法直接在 LINGO中表示。用户可以通过混合编 程或使用其他建模语言(如GAMS) 来解决这一问题。
对于特定行业或领域的定制化需求, LINGO可能无法直接提供相应的功能 。在这种情况下,用户可以通过扩展 LINGO的API或与其他软件的集成来 实现定制化需求。
感谢您的观看
目标函数的设置
目标函数定义
在LINGO中,需要定义一个目标函数来描述决策变量 的优化目标。
目标函数类型
目标函数可以是最大化或最小化形式,根据实际问题 的需求进行选择。
目标函数编辑器
LINGO提供了一个目标函数编辑器,用户可以在其中 方便地定义和编辑目标函数。
求解操作
求解器选择
在LINGO中,可以选择不同的求解器 来求解模型,根据模型的规模和复杂
LINGO软件广泛应用于生产计划、资源分配 、工艺流程优化等方面。
物流运输
LINGO软件用于运输路线规划、车辆调度、 仓储优化等问题求解。
金融投资
LINGO软件用于投资组合优化、风险管理、 信贷决策等问题求解。
科研领域
LINGO软件在数学建模、统计分析、机器学 习等领域有广泛应用。
02
LINGO软件的基本操作
物流配送问题
总结词
物流配送问题是一个复杂的优化问题,LINGO软件能够通过建立有效的数学模型,优化配送路线和成本。
详细描述
物流配送问题涉及到如何合理规划配送路线、分配运输资源,以最小化运输成本并确保及时送达。LINGO软件通 过构建配送问题的数学模型,帮助企业找到最优的配送方案,降低运输成本、提高运输效率。
LINGO软件与其他软件的比较与选择
MATLAB
MATLAB在科学计算和数据分析领域具有广泛的应用,但 相比之下,LINGO在求解优化问题方面更加专业和高效。

数学建模Lingo软件简介


版本类型 总变量数 整数变量数 非线性变量数 约束数
演示版 求解包 高级版 超级版 工业版 扩展版
300 500 2000 8000 32000 无限
30 50 200 800 3200 无限
30 50 200 800 3200 无限
150 250 1000 4000 16000 无限
Lingo(Linear Interactive and General Optimizer),即交互 式的线性和通用优化求解器,可求解线性规划,也可以求解非 线性规划,还可以用于一些线性和非线性方程组的求解等。 Lingo软件的最大特),而且执行速度很快。Lingo实际上还是最 优化问题的一种建模语言,包括许多常用的数学函数共建立优 化模型时调用,并可以接受其它数据文件。
2. 建立LINDO/LINGO优化模型需要注意的几个基本问题
1. 尽量使用实数优化模型,尽量减少证书约束和整数变 量的个数;
2. 尽量使用光滑优化模型,尽量避免使用非光滑函数; 3. 尽量使用线性优化模型,尽量减少非线性约束和非线 性变量的个数; 4. 合理设定变量的上下界,尽可能给出变量的初始值; 5. 模型中使用的单位的数量级要适当。
演示版和正式版的基本功能是类似的,只是试用版能够
求解问题的规模受到严格限制,对于规模稍微大些的问题就不 能求解。即使对于正式版,通常也被分成求解包(solver suite)、 高级版(super)、超级版(hyper)、工业版(industrial)、扩展版 (extended)等不同档次的版本,不同档次的版本的区别也在于 能够求解的问题的规模大小不同,下表给出了不同版本 LINGO程序对求解规模的限制:
LINDO,LINGO,LINDO API 和 What’s Best! 在最优化软件的市场上占有很大的份额,尤其在供微机上使用 的最优化软件的市场上,上述软件产品具有绝对的优势。根据 LINDO公司主页()上提供的信息,位列 全球《财富》杂志500强的企业中一半以上使用上述产品,其 中位列全球《财富》杂志25强企业中有23家使用上述产品。读 者可以从上述主页下载上面4种软件的演示版和大量应用例子。

LINGO软件介绍


例:邮局一周中每天需要不同数目的雇员,设周一 至少20人,周二至少16人,13,16,19,14,12人,又 规定应聘者需连续工作5天,问邮局每天聘多少雇 员才能既满足需求,又使聘用总人数最少。 min =s1+s2+s3+s4+s5+s6+s7; s1+s4+s5+s6+s7>=20; !周1雇员数; s1+s2+s5+s6+s7>=16; !周2雇员数; s1+s2+s3+s6+s7>=13; !周3雇员数; s1+s2+s3+s4+s7>=16; !周4雇员数; s1+s2+s3+s4+s5>=19; !周5雇员数; s2+s3+s4+s5+s6>=14; !周6雇员数; s3+s4+s5+s6+s7>=12; !周7雇员数;
五个基本的组成部分: 1.变量定义; 2.数据输入; 3.目标函数; 4.约束; 5.变量取值范围。
结束。 (1) 每条语句后必须使用分号“;”结束。问题 ) 每条语句后必须使用分号“ 模型必须由MODEL命令开始,END结束。 命令开始, 结束。 模型必须由 命令开始 结束 命令来作为输入问题模型的开始, (2) 用MODEL命令来作为输入问题模型的开始, ) 命令来作为输入问题模型的开始 格式为MODEL:statement (语句)。 语句)。 格式为 : (3) 目标函数必须由“min =”或“max =”开头。 开头。 ) 目标函数必须由“ 或 开头 (4) 数字与变量之间 变量与变量之间要使用运 ) 数字与变量之间,变量与变量之间要使用运 算符。 如 号等 号等) 算符。(如*号等

LINGO软件介绍

(1) LINGO 软件介绍LINGO 是一种专门用于求解数学规划问题的软件包。

LINGO 主要用于求解线性规划、非线性规划、二次规划、动态规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。

LINGO 中包含了一种建模语言和大量的常用函数,可供使用者在建立数学规划问题的模型时调用。

(2) 示例例如,用LINGO 求解线性规划问题:⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧==≥≥+≥+≥+≥+≥+++≥++++++++++=4,3,2,1;2,1,01002001100170010002000..153751511572521min 241423132212211124232221141312112423222114131211j i x x x xx x x x x x x x x x x x x t s x x x x x x x x z ij只需要打开LINGO ,然后按照下面的操作进行即可。

1、 模型的输入当打开LINGO 后,屏幕将出现如图1所示的窗口。

标题为“LINGO ”的窗口是主窗口,它包含所有的其他窗口以及所有命令菜单和工具栏。

里面的空白窗口用于输入LINGO 的程序代码,代码格式如下:MODEL:图1min=21*x11+25*x12+7*x13+15*x14+51*x21+51*x22+37*x23+15*x24; x11+x12+x13+x14>=2000; x21+x22+x23+x24>=1000; x11+x21>=1700;x12+x22>=1100;x13+x23>=200; x14+x24>=100; END2、 执行从Solve 菜单选择Solve 命令,或者在窗口顶部的工具栏里按Solve 按钮,LINGO 就会先对模型进行编译,检查模型是否具有数学意义以及是否符合语法要求。

如果模型不能通过这一步检查,会看到报错信息,并指出出错的语句。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

L I N G O软件简介 Document number:BGCG-0857-BTDO-0089-2022LINGO 软件简介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 =98*x1+277*x2-x1^2-0.3*x1*x2-2*x2^2+150*x3;x1+2*x2+2*x3<=100; x1<=2*x2;@gin (x1);@gin (x2);! Lingo 默认变量非负(注意:@bin(x)表示x 是0-1变量;@gin(x)表示x 是整数变量;@bnd(L,x,U)表示限制L?x?U ;@free(x)表示取消对x 的符号限制,即可正、可负。

)结果:Global optimal solution found.Objective value: 9561.200 Extended solver steps: 0 Total solver iterations: 45Variable Value Reduced CostX1 6.000000 -76.70000X2 31.00000 -151.2000X3 16.00000 -150.0000Row Slack or Surplus Dual Price1 9561.2001.0000002 0.0000000.0000003 56.000000.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:400*rp+450*op+20*inv);!也可以mark(I):400*rp(I)+450*op(I)+20*inv(I); @for (mark(I): rp(I)<40);@for (mark(I)|I#gt#1: inv(I)=inv(I-1)+rp(I)+op(I)-dem(I)); inv(1)=10+rp(1)+op(1)-dem(1); 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两临时料场位于P(5,1)、Q(2,7),日储量20。

问A、B两料场分别向各工地运输多少吨水泥,使总吨公里数最小?若重新安排两料场的位置,应怎样安排才能使总吨公里数最小?这样安排可节省多少吨公里?设工地位置(ai ,bi),水泥日用量为di(i=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;IJmark(Imark,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;endinit!Objective function(目标);[OBJ] min=@sum(IJmark(i,j): c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));!demand contraints(需求约束);@for(Imark(i):[DEMAND_CON] @SUM(Jmark(j):c(i,j))=d(i););!supply constrains(供给约束);@for(Jmark(j):[SUPPLY_CON] @SUM(Imark(i):c(i,j))<=e(j););@for(Jmark: @free(x);@free(y););END2)一个动态规划的例子:(最短路问题)从S城市到T城市之间找一条最短路径,道路情况如下:数学模型为:LINGO求解程序:model:sets:cities/s,a1,a2,a3,b1,b2,c1,c2,t/:L; !属性L(i)表示城市S到城市i 的最优行驶路线的里程;roads(cities,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 !属性D(i,j)是城市i到城市j 的直接距离(已知);c1,t c2,t/:D;endsetsdata:D= 6 3 36 5 8 67 46 7 8 95 6;L=0,,,,,,,,; !因为L(s)=0;enddata@for(cities(i)|i#gt#@index(s): !这行中"@index(s)"可以直接写成"1";L(i)=@min(roads(j,i):L(j)+D(j,i));); !这就是最短路关系式;endVariable ValueL( S) 0.000000L( A1) 6.000000L( A2) 3.000000L( A3) 3.000000L( B1) 10.00000L( B2) 7.000000L( C1) 15.00000L( C2) 16.00000L( T) 20.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;IJmark(Imark,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;enddata[OBJ] max=@sum(IJmark(i,j): c*x);!每人做一项工作;@for(Imark(i): @SUM(Jmark(j):x(i,j))=1;);!每事一人做;@for(Jmark(j): @SUM(Imark(i):x(i,j))=1;);@for(IJmark: @bin(x));!本约束可以不要,因为有解时必为0或1;END4)(生产与销售计划问题)某公司用两种原油(A和B)混合加工成两种汽油(甲和乙)。

相关文档
最新文档