18 Lindo及Lingo的使用
怎样使用LINGO软件
会丢失;
• ·后缀“ldt”表示LINGO数据 文件;
• ·后缀“ltf”表示LINGO命令 脚本文件;
LINDO格式的模型文
•
·后缀“lgr”Biblioteka 示LINGO报告 文件;件
• ·后缀“mps”表示MPS(数
学规划系统)格式的模型文
件;
• ·“*.*”表示所有文件。
2 用Lingo求解 二次规划( QP)模型
之和不可能超过100件,且产品甲的产量不可能超过乙的产 量的两倍。写成数学表达式,就是
x1+x2≤100, x1≤2x2
综上所述
max z=98 x1+277 x2-x12-0.3
x1 x2-2x22
(1.1)
s.t.
x1+x2≤100 x1≤2x2 x1,x2≥0
(1.2) (1.3)
(1.4)
修改运行时的 内存限制
激活敏感 性分析
例3.1 一奶制品加工厂用牛奶生产A1,A2两种奶制品,1 桶牛奶可以在甲车间用12h加工成3kgA1,或者在乙车间 用8h加工成4kg A2。根据市场需求,生产出的A1,A2全部 能售出,且每千克A1获利24元,每千克A2获利16元。现 在加工厂每天能得到50桶牛奶的供应,每天正式工人总的 劳动时间为480h,并且甲车间的设备每天至多能加工 100kg A1,乙车间的设备的加工能力可以认为没有上限限 制(即加工能力足够大)。试为该厂制定一个生产计划, 使每天获利最大,并进一步讨论以下3个附加问题:
• 用“LINGO | Solve (Ctrl +S)”命令来运 行这个程序。
• (如果想要了解运行状 态窗口中各项的含义, 可先点击工具栏上的图 标 ,再点击运行状态 窗口,屏幕上自动弹出 运行状态窗口的帮助信 息。)
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 Model –LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。
LINDO、LINGO软件的使用方法
例1的数 学模型
max Z 32 x1 30 x2 3x1 4 x2 36 5 x1 4 x2 40 9 x1 8 x2 76 x1 , x2 0
LINDO/LINGOl软件简介
第1节 第2节 LINDO LINGO
第1节 LINDO软件
一、LINDO软件的使用格式 二、LINDO输出结果分析
一、LINDO软件的使用格式
LINDO软件是一种专门用于求解线性 规划问题的软件包,由于LINDO执行速度很 快且输入方便,易于求解和分析规划问题, 因此在科研和工业界得到广泛应用。
影子价格: 资源每增加1个单位时,目标函数Z增加的值 (1) 设备A每增加1台时,利润增加1.166667元
(2) 设备B每增加1台时,利润不增加
(3) 设备C每增加1台时,利润增加3.166667元
第4部分数据的分析
Ranges in which the basis is unchanged: Objective Coefficient Ranges Current Allowable Allowable Coefficient Increase Decrease 32.00000 1.750000 9.500000 30.00000 12.66667 1.555556
2 最优值为:282.667 即 Z max 282 3 最优解为: x1=1.3333 即 x 1 1 1 3 x2=8
第3部分的数据分析(1)
在最优解的情况 下资源是否有剩 余(或超量)
Row Slack or Surplus Dual Price 2) 0.000000 在最优解下,设 3) 1.333333 备A、C无剩余 4) 0.000000
lingo与lindo
广西大学数学与信息科学学院 韦琳娜 ln_wln@
1 在Lingo中使用Lindo模型
• Lindo与Lingo都是LINDO系统公司开发的专门用 于求解最优化问题的软件包。与Lindo相比, Lingo软件主要具有两大优点: • (1)除具有LINDO的全部功能外,还可用于求解 非线性规划问题,包括非线性整数规划问题。 • (2)LINGO包含了内置的建模语言,允许以简 练、直观的方式描述较大规模的优化问题,模型 中所需的数据可以以一定格式保存在独立的文件 中。
X 1.272727 Y 1.636364
3)
.000000
.545455
NO.ITERATIDNS=2 DO RANGE (SENSITIVITY)ANALYSIS
?
:GO 减少的成本 LP OPTIMUM FOUND AT STEP 2 OBJECTIVE FUNCTION VALUE 1 ) 7.4545450 VARIABLE VALUE REDUCED COST X 1.272727 .000000 对偶价格 Y 1.636364 .000000 ROW SLACK OR SURPLUS DUAL PRICES 2) .000000 .090909 3) .000000 .545455 NO.ITERATIDNS=2 单纯形进行了2次迭代 DO RANGE (SENSITIVITY)ANALYSIS ?
注意LINDO软件在使用单纯形法时,目标函数行使用的 公式是: Z c1 x1 c2 x2 cn xn 0. 而我们第2章中使用 的公式是: Z c1 x1 c2 x2 cn xn 0. 因此它的检验数 值与我们第2章中介绍的差一个符号。
Lingo 入门
Lindo 和Lingo 数学软件的简单使用方法
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 且所选元素费用之和最小。
lingo18 表达式写法
Lingo18是一种求解优化问题的软件,其表达式写法主要遵循以下规则:
变量:在Lingo中,变量用字母表示,可以是大写或小写字母,也可以使用下划线。
变量之间用逗号分隔。
约束条件:约束条件使用括号和逻辑运算符表示。
例如,(x1 + x2 <= 10) 表示x1和x2的和不超过10。
目标函数:目标函数使用关键字MAX或MIN表示最大值或最小值,后面跟目标表达式。
例如,MAX z = x1 + x2 表示最大化x1和x2的和。
运算符:Lingo支持基本的数学运算符,如加法、减法、乘法、除法、指数等。
注释:注释用百分号%表示,可以用于解释表达式或记录代码中的信息。
具体语法规则可以在Lingo的官方文档中找到。
在实际编写表达式时,需要注意变量的命名规范、约束条件的语法和语义、目标函数的定义方式等,以确保表达式的正确性和可读性。
Lindo 和 Lingo
Lindo 和 Lingo 是美国 Lindo 系统公司开发的一套专门用于求解最优化问题的软件包。
Lindo 用于求解线性规划和二次规划问题,Lingo 除了具有 Lindo 的全部功能外,还可以用于求解非线性规划问题,也可以用于一些线性和非线性方程(组)的求解,等等。
Lindo 和Lingo 软件的最大特色在于可以允许优化模型中的决策变量是整数(即整数规划),而且执行速度很快。
Lingo 实际上还是最优化问题的一种建模语言,包括许多常用的函数可供使用者建立优化模型时调用,并提供与其他数据文件(如文本文件、Excel电子表格文件、数据库文件等)的接口,易于方便地输入、求解和分析大规模最优化问题。
由于这些特点,Lindo系统公司的线性、非线性和整数规划求解程序已经被全世界数千万的公司用来做最大化利润和最小化成本的分析。
应用的范围包含生产线规划、运输、财务金融、投资分配、资本预算、混合排程、库存管理、资源配置等等...Lindo/Lingo 软件作为著名的专业优化软件,其功能比较强、计算效果比较好,与那些包含部分优化功能的非专业软件相比,通常具有明显的优势。
此外, Lindo/Lingo 软件使用起来非常简便,很容易学会,在优化软件(尤其是运行于个人电脑上的优化软件)市场占有很大份额,在国外运筹学类的教科书中也被广泛用做教学软件。
LingoLingo 是使建立和求解线性、非线性和整数最佳化模型更快更简单更有效率的综合工具。
Lingo 提供强大的语言和快速的求解引擎来阐述和求解最佳化模型。
简单的模型表示Lingo 可以将线性、非线性和整数问题迅速得予以公式表示,并且容易阅读、了解和修改。
方便的数据输入和输出选择Lingo 建立的模型可以直接从数据库或工作表获取资料。
同样地,Lingo 可以将求解结果直接输出到数据库或工作表。
强大的求解引擎Lingo 内建的求解引擎有线性、非线性(convex and nonconvex)、二次、二次限制和整数最佳化。
数学建模软件LinDoLinGo的简介(修改)
X——表示变量X可取任意实数值。 GIN X——表示变量X只取非负整数值。 INT X——表示变量X只能取0或1。 SLB X value——表示变量X以value为下界。 SUB X value——表示变量X以value为上界。 FREE m——表示问题的前m个变量为自由变量 GIN m——表示问题前m个变量为非负整数值 INT m——表示问题前m个变量为0-1变量。
LINGO 示例
查看简单例子
LINHGO程序
Lindo模型到Lingo模型的转换
“ST”在Lingo模型中不再需要,所以删除了; 在每个系数与变量之间增加了运算符“*”;
将目标函数的表示方式从“MAX”变成“MAX=”;
每行(目标、约束和说明语句)后面均增加了一
个分号“;”; 约束的名字被放ngo中模型以“Model:”开始,以“END”结束。 对简单模型,这两个语句也可以省略。
LINDO/LINGO软件 使用简介
LinDo/LinGo简介
LINDO(Linear Interactive and Discrete Optimizer),即“交互式的线性和离散优化求解 器”,可以用来求解线性规划(LP)和二次规划 (QP); LINGO(Linear Interactive and General Optimizer),即“交互式的线性和通用优化求解 器”,除了用来求解线性规划(LP)、二次规划 (QP)和非线性规划,还可用于线性和非线性方程 组的求解。 最大的特色:允许决策变量是整数(即整数规划,包 括0-1规划)。
Lindo求解整数规划
Lindo求解整数规划程序
LP OPTIMUM FOUND AT STEP 2 OBJECTIVE VALUE = 998.811951
第十八章LINGO软件的使用
第十八章LINGO软件的使用18.1 LINGO入门18.1.1 LINGO软件的安装过程点击LINGO9.0 for Windows安装文件,出现点击“Next”按钮,出现此时需要接受安装协议。
系统安装时默认的目录是C:\LINGO9。
安装完成前,会出现下图所示的对话框:这个对话框询问你希望采用的默认的建模(即编程)语言,系统推荐的是采用LINGO语法,也就是选项“LINGO(recommended)”;你也可以选择“LINDO”将LINDO语法作为默认的设置。
当然,安装后你也可以通过“LINGO|Options|File Format命令来修改默认的建模(即编程)语言。
在上图中按下“OK”按钮,系统就会完成LINGO的安装过程。
18.1.2 LINGO基础知识LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO 运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(Command Window)下操作,通过输入行命令驱动LINGO运行。
由于其使用字符方式输入,初学者往往不太容易掌握。
在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。
LINGO 9.0软件比以前的版本有了很大的改进,功能大大增强,性能更加稳定,计算的结果更加可靠。
LINGO软件不仅可用于求解非线性规划问题,还可以用以求解非线性整数规划问题;LINGO包含了内置的建模语言,模型中所需的数据可以以一定格式保存在独立的文件中;LINGO允许以简练、直观的方式描述较大规模的优化问题。
注:LIGDO公司目前已将LINDO软件从其产品中删除了。
事实上,LINDO软件的所有功能(包括LINDO语法格式)都在LINGO中得到了支持。
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。
lindo_与Lingo入门
优化建模
• 在用MAX/MIN命令输入模型时,如果模型 的一行超过屏幕宽度,只要回车就可以在 下一行继续输入。 • (9)变量的非负约束是隐含的,不需要在模 型中加以意义。
优化建模
一、有价证券的投资 某银行经理计划用一笔资金进行有价证 券的投资, 可供购进的证券以及信用等级、 券的投资 , 可供购进的证券以及信用等级 、 到期年限、收益如下表所示。 到期年限、收益如下表所示。
优化建模
(8)除关键字中间,系数中间,变量名中间不能嵌入 空格外,模型的其他地方都允许出现空格和回车 <CR>。在模型输入时,空格和回车是等效的。例 如,以下的模型输入格式是有效的: maxz=3x1+4x2+6x3-5x4 s.t. x1+2x2-x3+2x4≤10 3x1+x2-3x3+6x4≤25 X1,x2,x3,x4≥0 :MAX 3X1 + 4 X2+6x35x4<CR> ?ST X1 +2x2-x3<CR> ? +2 X4 <10 3x1+x2-3x3+6x4<25 END :
即证券A,C,E分别投资2.182百万元,7.364 百万元,0.454百万元,最大税后收益为0.298 百万元. (2)由(1)的结果中影子价格可知,若资金增加 100万元,收益可增加0.0298百万元.大于 2.75%的利率借到100万元资金的利息,所以 应借贷.投资方案需将上面模型第2个约束右 端改为11,求解得到:证券A,C,E分别投资2.40 百万元,8.10百万元,0.50百万元,最大税后收 益为0.3007百万元.
优化建模
lindo和lingo程序结构的差异: (1)lindo是这样的: (2)lingo是这样的: MAX 目标函数表达 MAX=目标函数表达; ST 变量约束1; 变量约束1 变量约束2; 变量约束2 变量约束3; 变量约束3 END 注意:可见它们的基本格式不同,在lingo80中每个 语句后面必须以分号结束,包括以开头的注释语 句。
lingo入门
8小时 每天 50桶牛奶 时间480小时 至多加工100公斤A1 决策变量 目标函数 x1桶牛奶生产A1 获利 24×3x1 x2桶牛奶生产A2 获利 16×4 x2 线性 规划 模型 (LP)
1桶 牛奶 或
12小时
3公斤A1 4公斤A2
获利24元/公斤 获利16元/公斤
每天获利
原料供应 约束条件
注: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称为该集 合的属性(即定义在该集合上的属性)。
最优解不变时目标 系数允许变化范围 (约束条件不变) x1系数范围(64,96) x2系数范围(48,72)
x1系数由243= 72 增加为 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000 303= 90,在 允许范围内 不变! A1获利增加到 30元/千克,应否改变生产计划
6.666667
结果解释
RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 X2 ROW 2 3 4 72.000000 24.000000 8.000000 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 50.000000 480.000000 100.000000 10.000000 53.333332 INFINITY 6.666667 80.000000 40.000000
LINDO LINGO使用简介
1 LINDO菜单命令和语句1.1菜单命令我们可以从类似于其它Windows程序的便捷菜单访问LINDO的命令。
主菜单包括屏幕顶部的6个子菜单,它们列出了各种命令。
当单击其中一个子菜单——File、Edit、Solve、Reports、Window或Help时,将出现了一个包含各种命令的下拉菜单。
你可以像在大多数windows程序中那样选择命令——或者用鼠标单击命令,或者在适当的子菜单亮显时,按命令名中带下划线的字母。
许多命令还有快捷键(F2、Ctrl+Z等)。
为了增加方便性,还可以利用位于屏幕顶部工具栏中的图标访问一些最常用的命令。
下面简要介绍各种菜单命令,并列出了可以应用的快捷键和图标。
1.File(文件)菜单File菜单命令能够以各种方法操纵LINDO数据文件。
可以使用这个命令打开、关闭、保存和打印文件,并且可以执行LINDO独有的各种任务。
下面将描述File命令。
命令说明New F2 创建用于输入数据的新窗口。
Open F3 打开已有的文件。
利用对话框可以选择各种文件类型和位置。
View F4 打开已有的文件,仅进行浏览。
不对文件进行修改。
Save F5 保存窗口。
可以保存输入数据(模型)、Reports窗口或命令窗口。
可以下列格式保存数据:*.LTX,可以利用字处理软件进行编辑的文本格式;*.LPK,以“填充”格式保存编译模型,但是不进行特殊的格式化或解释;*.MPS,与机器无关的工业标准格式,用于在LINDO和其它LP软件之间传递LP问题。
Save As F6 利用指定的文件名保存活动窗口。
这特别适合于重命名已修改的文件,同时能够保持原始文件不受影响。
Close F7 关闭活动窗口。
如果窗口包含新的输入数据,将询问你是否保存修改。
Print F8 把活动窗口发送到打印机。
Printer Setup…F9 选择打印机和打印格式的各种选项。
Log Output…F10 把通常发送到Reports窗口的所有后续屏幕活动发送到文本文件中。
lindo,lingo使用几个重要方面
LINGO模型的构成:4个段 模型的构成: 个段 模型的构成
目标与约束段 目标与约束段 集合段(SETS 集合段( ENDSETS) )
数据段(DATA ENDDATA) 数据段( ) 初始段(INIT ENDINIT) 初始段( 初始段 )
LINGO模型 LINGO模型 — 例:选址问题
某公司有6个建筑工地,位置坐标为 单位: 某公司有 个建筑工地,位置坐标为(ai, bi) (单位:公里 个建筑工地 单位 公里), 单位: 水泥日用量d 单位 水泥日用量 i (单位:吨)
使用LINDO的一些注意事项 使用LINDO的一些注意事项 LINDO
9. 变量不能出现在一个约束条件的右端 10. 表达式中不接受括号“( )”和逗号“,”等任何符号 例: 等任何符号, 表达式中不接受括号“ 和逗号“ 等任何符号 和逗号 400(X1+X2)需写为 需写为400X1+400X2 需写为 11. 表达式应化简,如2X1+3X2- 4X1应写成 -2X1+3X2 表达式应化简, 应写成 12. 缺省假定所有变量非负;可在模型的“END”语句后用 缺省假定所有变量非负;可在模型的“ 语句后用 将变量name的非负假定取消 “FREE name”将变量 将变量 的非负假定取消 13. 可在 “END”后用“SUB” 或“SLB” 设定变量上下界 后用“ 后用 例如: 的作用等价于“ 例如: “sub x1 10”的作用等价于“x1<=10” 的作用等价于 但用“ 但用“SUB”和“SLB”表示的上下界约束不计入模型的约 和 表示的上下界约束不计入模型的约 也不能给出其松紧判断和敏感性分析。 束,也不能给出其松紧判断和敏感性分析。 14. “END”后对 变量说明:INT n 或 INT name 后对0-1变量说明 后对 变量说明: 15. “END”后对整数变量说明:GIN n 或 GIN name 后对整数变量说明: 后对整数变量说明
lindo_lingo的使用
二、用LINDO求解整数规划(IP) LINDO求解整数规划 IP) 求解整数规划(
例 3 如下IP问题: 如下IP问题 问题: min 15x11+19x21+26x31+19x41+18x12+23x22+17x32+2 1x42+24x13+22x23+16x33+23x43+24x14+18x24+19 x34+17x44 ST x11+x12+x13+x14=1 x21+x22+x23+x24=1 x31+x32+x33+x34=1 x41+x42+x43+x44=1 x11+x21+x31+x41=1 x12+x22+x32+x42=1 x13+x23+x33+x43=1 x14+x24+x34+x44=1 end int 16
下面我们就用LINDO 来解这一优化问题。 下面我们就用LINDO 来解这一优化问题
输入语句: max(不区分大小写,min) 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.85x1-1.42x2+4.27x318.49x4>=0 2.85x5-1.42x6+4.27x718.49x8>=0 16.5x1+2.0x2-4.0x3+17x4>=0 7.5x5-7.0x6-13.0x7+8.0x8>=0 end
LINDO-LINGO简介及使用方法
欢迎访问华中数学建模网 1.LINDO、LINGO一、软件简介LINDO是一种专门用于求解数学规划问题的软件包。
由于LINDO执行速度很快、易于方便输入、求解和分析数学规划问题。
因此在数学、科研和工业界得到广泛应用。
LINDO主要用于解线性规划、非线性规划、二次规划和整数规划等问题。
也可以用于一些非线性和线性方程组的求解以及代数方程求根等。
LINDO中包含了一种建模语言和许多常用的数学函数(包括大量概论函数),可供使用者建立规划问题时调用。
一般用LINDO(Linear Interactive and Discrete Optimizer)解决线性规划(LP—Linear Programming)。
整数规划(IP—Integer Programming)问题。
其中LINDO 6 .1 学生版至多可求解多达300个变量和150个约束的规划问题。
其正式版(标准版)则可求解的变量和约束在1量级以上。
LINDO则用于求解非线性规划(NLP—NON—LINEAR PROGRAMMING)和二次规则(QP —QUARATIC PROGRAMING)其中LINGO 6.0学生版最多可版最多达300个变量和150个约束的规则问题,其标准版的求解能力亦再10^4量级以上。
虽然LINDO和LINGO不能直接求解目标规划问题,但用序贯式算法可分解成一个个LINDO和LINGO能解决的规划问题。
要学好用这两个软件最好的办法就是学习他们自带的HELP文件。
下面拟举数例以说明这两个软件的最基本用法。
(例子均选自张莹《运筹学基础》)例1.(选自《运筹学基础》P54.汽油混合问题,线性规划问题)一种汽油的特性可用两个指标描述:其点火性用“辛烷数”描述,其挥发性用“蒸汽压力”描述。
某炼油厂有四种标准汽油,设其标号分别为1,2,3,4,其特性及库存量列于下表1中,将上述标准汽油适量混合,可得两种飞机汽油,某标号为1,2,这两种飞机汽油的性能指标及产量需求列于表2中。
LINGO软件的使用方法
2
2
答案
model: max=98*x1+277*x2-x1^2 -0.3*x1*x2-2*x2^2; x1+x2<100; x1<2*x2; @gin(x1); @gin(x2); end ※@gin()是调用的整数函数
第三节 在LINGO中使用集合
• 例题:某公司要决定下四个季度帆船生 产量。下四个季度需求量分别是40条, 60条,75条,25条。每季度生产能力40 条,生产费用400美元/条,如果加班生产 费用450美元/条,每季度库存费20美元/ 条。假定生产提前期为0,初始库存10条, 问如何安排生产总费用最小?
显式列举法 元素列表 隐式列举法
第四节 运算符及其优先级
• 算术运算符:+,-,*,/,^ • 逻辑运算符: #AND#,#OR#.#NOT#,#EQ#,#NE#,#GT#,# GE#,#LT#,#LE#,TRUE,FALSE • 关系运算符:<(即<=),=,>(即>=)
优先级
优先级 表: 最高 运算符 #NOT#,-(负号) ^ *,/ +,-(减号) #EQ#,#NE#,#GT#,#GE#, #LT#,#LE# #AND#,#OR# <,=,>
集合循环函数
• 用法:@function(setname:expression_list); • 具体如下:@for @sum @max @min
变量界定函数
• • • • @BND(L,X,U)-限制L<=X<=U @BIN(X)-限制X为0或1 @FREE(X)-取消对X的符号限制 @GIN(X)-限制X为整数
• • • • • • • • • 以model:开始,以end结束。 不区分大小写。 目标函数为max=。 语句以;结束。 数与变量之间的乘号不能省。 约束S.t.省略不写。 <与<=,>与>=是等价的。 非负约束可以不输入。 说明语句以!开头。
PPT上的模型实例lindo与lingo的区别
LINDO与LINGO的语法区别LINGO的使用(求解线性规划和非线性规划问题):1.最大值MAX=…,最小值MIN=…2.语句必须以分号”;”结束每行可多个语句语句可跨行3.变量名由字母、数字和下划线组成以字母开头长度不超32个字符不区分大小写4.默认决策变量非负其他要求可做说明5.模型以MODEL:开头,以END结束(此结构也可省略)6.注释以!开始,以; 结束;7.可以用<表示<=;用>表示>=8.LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除注释语句和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要。
9.限定变量取整数值的语句为“@GIN(X1)”和“@GIN(X2)”,不可以写成“@GIN(2)”,否则LINGO将把这个模型看成没有整数变量。
10.LINGO中函数一律需要以“@”开头,其中整型变量函数(@BIN、@GIN)和上下界限定函数(@FREE、@SUB、@SLB)与LINDO中的命令类似。
而且0/1变量函数是@BIN函数。
Lindo的使用(求解线性规划问题)★程序以“MAX”(或“MIN”)开始,表示目标最大化(或最小化)问题,后面直接写目标函数表达式和约束表达式;★目标函数和约束之间用“ST”分开;(或用“s.t.”)★程序以“END”结束(“END” 也可以省略)。
★系数与变量之间的乘号必须省略。
★系统对目标函数所在行自动生成行名“1)”,对约束默认的行名分别是“2)” “3)”…,用户也可以自己输入行名;行名放在对应的约束之前。
★书写相当灵活,不必对齐,不区分字符的大小写。
★默认所有的变量都是非负的, 所以不必输入非负约束。
★约束条件中的“<=” 及“>=”可分别用“<” 及“>”代替。
★一行中感叹号“!”后面的文字为是注释语句,可增强程序的可读性,不参与模型的建立。
1.变量与系数间可有空格(甚至回车), 但无运算符2.变量名以字母开头,不能超过8个字符3.变量名不区分大小写(包括LINDO中的关键字)4.目标函数所在“>”(或“<”)号与“>=”(或“<=”)功能相同5.行是第一行,第二行起为约束条件6.行号(行名)自动产生或人为定义。
Lindo Lingo软件初步
Lindo /Lingo 软件初步Lindo/Lingo 软件是美国Lindo 系统公司开发的一套专门用于求解优化模型的软件。
Lindo 系统公司面向全社会免费提供该软件的“演示版”,我们现在使用的就是这个演示版。
占领硬盘空间大约20MB .一.Lingo 入门1.编写简单的Lingo 程序Lingo 程序:在“模型窗口”中,按Lingo 语法格式,输入一个完整的优化模型。
(注意:一个程序就是一个优化模型)例1 要求解线性规划问题 .0,,1253,1034..,32max ≥≤+≤++=y x y x y x t s y x z输入程序:max=2*x+3*y;4*x+3*y<=10;3*x+5*y<=12;例2 求解 .,0,,2,100..,23.027798max 21212122212121且都是整数≥≤≤+---+x x x x x x t s x x x x x x输入程序: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 求解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
!这里是数据; 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 5 49538582 52197433 76739271 23957265 5 5 2 2 8 1 4 3; enddata end 然后点击工具条上的按钮 即可。
LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一 种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的 求解器可快速求解并分析结果。 §1 LINGO快速入门 LINGO快速入门
当你在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:
外层是主框架窗口,包含了所有菜单命令和工具条,其它所有 的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都 都要在该窗口内编码实现。下面举两个例子。
2.2 什么是集 集是一群相联系的对象,这些对象也称为集的成员 成员。一个集 成员 可能是一系列产品、卡车或雇员。每个集成员可能有一个或多 个与之有关联的特征,我们把这些特征称为属性 属性。属性值可以 性 预先给定,也可以是未知的,有待于LINGO求解。例如,产品 集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可 以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属 性,也可以有一个生日属性等等。 LINGO有两种类型的集:原始集 原始集(primitive set)和派生集 原始集 派生集 (derived set)。 一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就是说,它 的成员来自于其它已存在的集。
列表如下: 列表如下:
隐式成员列表格式 1..n StringM..StringN DayM..DayN MonthM..MonthN 1..5
示例
所产生集成员 1,2,3,4,5 Car2,Car3,Car4,…,Ca r14 Mon,Tue,Wed,Thu,Fri Oct,Nov,Dec,Jan Oct2001,Nov2001,Dec2 001,Jan2002
2.3 模型的集部分 集部分是LINGO模型的一个可选部分。 LINGO模型中使用集之前 LINGO模型的一个可选部分 模型中使用集之前, 集部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在 集部分事先定义。集部分以关键字“sets:”开始 开始, endsets”结束 结束。 集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一 个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。 个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集 部分可以放置于模型的任何地方, 部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用 之前必须定义了它们。 之前必须定义了它们。 2.3.1 定义原始集 为了定义一个原始集,必须详细声明: 为了定义一个原始集,必须详细声明: ·集的名字 可选, ·可选,集的成员 可选, ·可选,集成员的属性 定义一个原始集,用下面的语法: 定义一个原始集,用下面的语法: setname[/member_list/][:attribute_list];
B8 9 2 3 1 5 3 38
产量 60 55 51 43 41 52
使用LINGO软件,编制程序如下: 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));
Lindo/Lingo的使用 Lindo/Lingo的使用
► 实验目的: 实验目的:
1 掌握Lindo/Lingo软件的基本使用 掌握Lindo/Lingo软件的基本使用 2 掌握线性规划模型以及非线性规划模型的 建立,求解, 建立,求解,结果的分析 3 掌握规划模型的灵敏性分析 ► 实验内容: 实验内容: 1 Lindo/Lingo软件的基本知识,使用 Lindo/Lingo软件的基本知识, 2 实验习题
Car2..car14 Mon..Fri Oct..Jan
MonthYearM..Month Oct2001..Jan2002 YearN
③ 集成员不放在集定义中,而在随后的数据部分 数据部分来定义 数据部分
例2.2 !集部分 集部分; 集部分 sets: students:sex,age; endsets !数据部分 数据部分; 数据部分 data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata 注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。 注意:开头用感叹号( ),末尾用分号( 表示注释,可跨多行。 末尾用分号 在集部分只定义了一个集students,并未指定成员。在数据部分罗列了 在集部分只定义了一个集 ,并未指定成员。 集成员John、Jill、Rose和Mike,并对属性 分别给出了值。 集成员 、 、 和 ,并对属性sex和age分别给出了值。 和 分别给出了值 集成员无论用何种字符标记,它的索引都是从 开始连续计数。 它的索引都是从1开始连续计数 集成员无论用何种字符标记 它的索引都是从 开始连续计数。在 attribute_ list可以指定一个或多个集成员的属性,属性之间必须用逗号隔 可以指定一个或多个集成员的属性, 可以指定一个或多个集成员的属性 开。
例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*x2; x1+x2>=350; x1>=100; 2*x1+x2<=600; 然后点击工具条上的按钮 即可。
例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输 问题。产销单位运价如下表。
销地 单位运价 产地 A1 A2 A3 A4 A5 A6 销量
B1 6 4 5 7 2 5 35
B2 2 9 2 6 3 5 37
B3 6 5 1 7 9 2 22
B4 7 3 9 3 5 2 32
B5 4 8 7 9 7 8 41
B6 2 5 4 2 2 1 32
B7 5 8 3 7 6 4 43
注意:该命名规则同样适用于集成员名和属性名等的命名。 注意:该命名规则同样适用于集成员名和属性名等的命名。
Member_list是集成员列表。如果集成员放在集定义中, Member_list是集成员列表。如果集成员放在集定义中,那么对它们可采 是集成员列表 取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中, 取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在 随后的数据部分定义它们。 随后的数据部分定义它们。
① 当显式罗列成员时,必须为每个成员输入一个不同的名字,中 间用空格或逗号搁开,允许混合使用。 例2.1 可以定义一个名为students的原始集,它具有成员John、 Jill、Rose和Mike,属性有sex和age: sets: students/John Jill, Rose Mike/: sex, age; Endsets ② 当隐式罗列成员时,不必罗列出每个集成员。可采用如下语法 : setname/member1..memberN/[: attribute_list]; 这里的member1是集的第一个成员名,memberN是集的最末一 个成员名。LINGO将自动产生中间的所有成员名。LINGO也接受一 些特定的首成员名和末成员名,用于创建一些特殊的集。
可以把集、集成员和集属性同C语言中的结构体作个类比。如下图: 集 ←→ 结构体 集成员 ←→ 结构体的域 集属性 ←→ 结构体实例 LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些 问题,然后再借助于LINGO求解器求解。因此,集属性的值一旦在模型中被确 定,就不可能再更改。在LINGO中,只有在初始部分中给出的集属性值在以后 的求解中可更改。这与前面并不矛盾,初始部分是LINGO求解器的需要,并不 是描述问题所必须的。 2.3.2 定义派生集 为了定义一个派生集,必须详细声明: ·集的名字 ·父集的名字 ·可选,集成员 ·可选,集成员的属性 可用下面的语法定义一个派生集: setname(parent_set_list)[/member_list/][:attribute_list]; setname是集的名字。parent_set_list是已定义的集的列表,多个时必须用 逗号隔开。如果没有指定成员列表,那么LINGO会自动创建父集成员的所有组 合作为派生集的成员。派生集的父集既可以是原始集,也可以是其它的派生集 。
注意:用“[]”表示该部分内容可选。下同,不再赘述。 注意: []”表示该部分内容可选。下同,不再赘述。 表示该部分内容可选
Setname是你选择的来标记集的名字,最好具有较强的可读性。 Setname是你选择的来标记集的名字,最好具有较强的可读性。集名字必 是你选择的来标记集的名字 须严格符合标准命名规则:以拉丁字母或下划线( 为首字符, 须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉 丁字母( )、下划线 阿拉伯数字( 下划线、 丁字母(A—Z)、下划线、阿拉伯数字(0,1,…,9)组成的总长度不超 32个字符的字符串 且不区分大小写。 个字符的字符串, 过32个字符的字符串,且不区分大小写。