Lingo软件在求解数学优化问题的使用技巧
- 格式:doc
- 大小:484.00 KB
- 文档页数:23
第十章 LINGOLingo 软件是求解线性规划、非线性规划的数学软件,也可用于一些线性和非线性方程组的求解等。
Lingo 实际上也是最优化问题的一种建模语言,包括许多常用的数学函数供使用者建立优化模型时调用,并可以接受与其他数据文件交换数据。
第一节 LINGO 软件的基本使用方法1.1 LINGO 使用入门在windows 操作系统下启动LINGO 后,将进入LINGO 集成环境,包括主框架窗口和模型窗口两部分。
主框架窗口集成了菜单和命令按钮,模型窗口用于输入模型。
例1 求解数学模型12121212max 23..4310351200x x s t x x x x x x ++≤+≤≥≥解:在模型窗口输入LINGO 求解模型如下:输入模型后选择菜单LINGO|Solve 或者按工具栏的,LINGO开始编译模型,如有语法错误将返回一个错误的消息并指明错误出现的位置;如果通过编译,LINGO将激活Solver运算器寻求模型的最优解,首先出现Solver Status状态窗口显示模型求解的运算状态信息:状态窗口显示的信息含义如下:“Global optimal solution found”表示得到全局最优解。
“Objective value: 7.454545”表示最优目标值为7.454545。
“Total solver iterations:2” 表示迭代2次得到结果。
“V alue”给出最优解中各变量的值:x1=1.272727,x2=1.636364。
Reduced Cost 值列出最优单纯形表中判别数所在行的变量的系数,表示当变量有微小变动时,目标函数的变化率。
其中基变量的reduced cost值应为0,对于非基变量xj,相应的reduced cost值表示当某个变量xj 增加一个单位时目标函数减少的量( max型问题)。
本例中此值均为0。
SLACK OR SURPLUS值给出约束条件的松驰变量或剩余变量的值。
培训教案——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培训需要根据学员的水平进行分类管理,加强培训的个性化和针对性。
lingo软件使用教程一般来说,一个优化模型将由以下三部分组成:1. 目标函数(Objective Function):要达到的目标。
2. 决策变量(Decision variables):每组决策变量的值代表一种方案。
在优化模型中需要确定决策变量的最优值,优化的目标就是找到决策变量的最优值使得目标函数取得最优。
3. 约束条件(Constraints):对于决策变量的一些约束,它限定决策变量可以取的值。
在写数学模型时,一般第一行是目标函数,接下来是约束条件,再接着是一些非负限制等。
在模型窗口输入如下代码:Max = 2*x1+3*x2;X1+2*x2<=8;4*x1<16;4*x2<12;注意:1.每一个lingo表达式最后要跟一个分号;2.多数电脑中没有符号,lingo中<=代替;为了方便可以用<代替小于等于,用>代替大于等于。
3.我们可以添加一些注释,增加程序的可读性。
注释以一个!(叹号必须在英文状态下输入,它会自动变为绿色)开始,以;(分号)结束。
4.Lingo中不区分变量名的大小写。
变量名必须以字母(A-Z)开头,后面的字符可以是字母、数字、下划线。
变量名不能超过32个字符。
Lingo程序的一些规则:1. 在Lingo中最开始都是“MAX=”或者“MIN=”开始表示求目标函数的最大或者最小值。
2. 变量和它前面的系数之间要用“*”连接,中间可以有空格。
3. 变量名不区分大小写,但必须以字母开始,不超过32个字符。
4. 数学表达式结束时要用分号“;”表示结束。
表达式可以写在多行上,但是表达式中间不能用分号。
5. 在电脑系统中一般没有“小于等于”符号,在Lingo采用“<=”来表示“小于等于”,用“>=”表示“大于等于”。
小于等于也可以用更简单的“<”表示,大于等于用“>”表示。
集合段:在我们已经得到的程序里有一些量没有定义,如WAREHOUSES( I),DEMAND( J), LINKS( I, J)。
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软件使用指南摘要:本文介绍了Lingo软件的基本使用方法。
从最基本的使用到复杂问题的解决,本文给出了比较详细的介绍。
Lingo软件是美国Lindo公司的产品,主要用来求解优化问题。
它是一个非常强大的软件,可以求解大部分优化问题,包括线性规划、二次规划、整数规划、运输问题等,是目前全球应用最广泛的优化软件之一。
这里我们简单介绍它的使用方法。
一进入Lingo如果你的计算机已经安装了Lingo,只需要在桌面上双击Lingo的快捷方式,就可以进入Lingo。
为了使自己的程序易于阅读,经常需要有一些注释,因此在编写程序中,每一行前面有感叹号的表示这一行是注释行,在程序运行中不起作用,希望初学者养成注释的好习惯。
二建立数学模型和 Lingo模型语言例1 在Lingo的命令窗口中输入下面的线性规划模型!目标函数;MAX = 100 * x1 + 150 * x2;!第一个约束;X1<= 100;!第二个约束;X2 <= 120;!第三个约束;X1 + 2 * x2<= 160;!end可有可无;end求解可得全局最优解:Objective value: 14500.00Variable ValueX1 100.0000X2 30.00000从这个例子可以看出,用Lingo软件求解一个简单的优化问题是非常容易的。
我们只需要输入优化问题的两个主要部分:目标函数和约束,就可以直接求解。
对于比较简单的问题,我们可以采取这种直接的方式去求解,但是,对于比较复杂的问题,用这种方式就不现实。
比如下面的例2,这就必须要使用Lingo的模型语言。
例2 一个运输问题假设WWW公司有6个仓库,储存着8个分厂生产所需要的原材料。
要求每一个仓库的供应量不能超过储存量,而且每一个分厂的需求必须得到满足。
问:如何组织运输,使总运输费用最小?已知从6个仓库到8个分厂的运输费用表。
表1 供应表2 需求表3 运输费用Wh5 2 3 9 5 7 2 6 5Wh6 5 5 2 2 8 1 4 3 这个问题是一个典型的优化问题,通常称为运输问题。
LINGO的基本用法我们遇到的许多优化问题都可以归结为规划问题,如线性规划、非线性规划、二次规划、整数规划、动态规划、多目标规划等,当遇到变量比较多或者约束条件比较复杂情况时,想用手工计算来求解这类问题几乎是不可能的,编程计算虽然可行,但工作量大、程序长而繁琐,稍不小心就会出错.可行的办法是利用现成的软件求解,LINGO是专门用来求解各种规划问题的软件包,其功能十分强大,是求解优化模型的最佳选择.1.1LINGO入门1.1.1 概况LINGO是美国LINDO系统公司开发的求解数学线性规划系列软件中的一个,它主要功能是求解大型线性、非线性和整数规划问题.LINGO的主要功能特色为:(1)既能求解线性规划问题,也有较强的求解非线性规划问题的能力;(2)输入模型简练直观;(3)运行速度快、计算能力强;(4)内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型;(5)将集合的概念引入编程语言,很容易将实际问题转换为LINGO模型;(6)能方便地与Excel、数据库等其它软件交换数据.1.1.2 LINGO的基本用法启动LINGO后,在主窗口上弹出标题为“LINGO Model-LINGO1”的窗口,称为模型窗口(通常称为LINGO程序为“模型”),如图1.1.1所示,用于输入模型,可以在该窗口内用基本类似于数学公式的形式输入小型规划模型.通常,一个优化模型由以下三部分所组成:(1)目标函数.一般表示成求某个数学表达式的最大值或最小值.(2)决策变量.目标函数值取决于哪些变量.(3)约束条件.对变量附加一些条件限制(通常用等式或不等式表示).例1.1.1某工厂有两条生产线,分别用来生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而每个P产品需要2个劳动日,该厂工人每天共计能提供160劳动日,假如原材料等其它条件不受限制,问应如何安排生产计划,才能使获得的利润最大?解 设两种产品的生产量分别为12,x x ,则该问题的数学模型为 目标函数 12max z 200300x x =+.约束条件 1212100,120,2160,0,1,2.j x x x x x j ≤⎧⎪≤⎪⎨+≤⎪⎪≥=⎩(1.1.1)在Model 窗口输入如下模型: MAX =200*X1+300*X2; X1<=100; X2<=120;X1+2*X2<=160;注 LINGO 默认所有决策变量都是非负,因而变量非负条件可以不必输入. 选菜单File|Save As (或按F5)将模型存盘,默认文件格式的扩展名为.lg4. 选菜单File|Print (或按F7)可以在打印机上输出该模型. LINGO 的语法规定:(1) 求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示;(2) 每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行;(3) 变量名称必须以字母(A ~Z )开头,由字母、数字和下划线所组成,长度不超过32个字符,不区分大小写;(4) 可以给语句加上标号,例如[OBJ] MAX =200*X1+300*X2; (5) 以!开头,以“;”号结束的语句是注释语句;(6) 如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;(7) LINGO 模型以语句“MODEL:”开头,以“END ”结束,对于比较简单的模型,这两个语句可以心省略.选菜单LINGO|Solve (或按Ctrl+S ),或用鼠标点击“求解”按钮,如果模型有语法错误,则弹出一个标题为“LINGO Error Message ”(错误信息)的窗口,指出在哪一行,有怎样的错误,每种错误都有一个编号.如果语法通过,LINGO 用内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGO Solver Status ”(求解状态)的窗口,其内容为变量个数、约束条件个数、优化状态、非零变量个数、耗费内存、所花时间等信息,点击Close 关闭该窗口,屏幕上出现标题为“Solution Report ”(解的报告)的信息窗口,显示优化计算的步数、优化后的目标函数值、列出各变量的计算结果,本例的具体内容如下: Global optimal solution found.Objective value: 29000.00 Total solver iterations: 0Variable Value Reduced CostX1 100.0000 0.000000 X2 30.00000 0.000000Row Slack or Surplus Dual Price 1 29000.00 1.000000 2 0.000000 50.00000 3 90.00000 0.0000004 0.000000 150.0000该报告说明:目标函数值为29000,变量值分别为X1=100,X2=30.“Reduced Cost ”的含义是缩减成本系数(最优解中变量的Reduced Cost 值自动取零),“Row ”是输入模型中的行号,“Slack or Surplus ”的意思为松弛或剩余,即约束条件左边与右边的差值,对于“<=”不等式,右边减左边的差值称为Slack(松弛),对于“>=”不等式,左边减右边的差值称为Surplus (剩余),当约束条件的左右两边相等时,松弛或剩余的值为零,如果约束条件无法满足,即没有可行解,则松弛或剩余的值为负.“Dual Price ”的意思是影子价格,上面报告中Row 2的松弛值为0,意思是说第二行的约束条件,即第一条生产线最大生产能力已达到饱和状态(100个),影子价格为50,含义是:如果该生产线最大生产能力增加1,能使目标函数值,即利润增加50;报告中Row 3的松弛值为90,表示按照最优解安排生产(X2=30),则第三行的约束条件,即第二条生产线的最大生产能力120剩余了90,因此增加该生产线的最大生产能力对目标函数的最优值不起作用,故影子价格为0;以上结果可以保存到文件中(扩展名为.lgr ).例1.1.2 基金的优化使用(2001年建模数学竟赛C 题).假设某校基金会得到了一笔数额为M 万元的基金,打算将其存入银行,校基金会计划在n 年内每年用部分本息奖励优秀师生,要求每年的奖金额相同,且在n 年仍保留原基金数额.银行存款税后年利率见表1.1.2.表1.1.2 银行存款税后利率表存期 1年 2年 3年 5年 税后年利率%1.82.162.5922.88校基金会获得最佳的基金使用计划,以提高每年的奖金额,请在5000M =万元、5n =年的情况下设计具体存款方案.1.2 用LINGO 编程语言建立模型1.1节介绍了LINGO 的基本用法,其优点是输入模型较直观,一般的数学表达式无须作大的变换即可直接输入.对于规模较少的规划模型,用直接输入方式是有利的,但是,如果模型的变量和约束条件个数都比较多,若仍然用直接输入方式,虽然也能求解并得出结果,但是这种做法有明显不足之处:模型的编幅很长,不便于分析修改和扩展,例如,目标函数中有求和表达式102011ij iji j c x==∑∑,若直接输入的方式,将有200个ij c 和200个ij x 相乘再相加.1.2.1 LINGO 模型的基本组成LINGO 建模语言引入了集合的概念,为建立大规模数学规划模型提供了方便.用LINGO 语言编写程序来表达一个实际优化问题,称为LINGO 模型.例1.2.1 某公司有6个供货栈(仓库),现有8个客户各要一批货,各供货栈到8个客户处的单位货物运输价见表1.2.1.解 引入决策变量ij x ,表示从第i 个货栈到第j 个客户的货物运量.用符号ij c 表示从第i 个货栈到第j 个客户的单位货物运价,i a 表示第i 个货栈的最大供货量,j d 表示第j 个客户的需求量.则本问题的数学模型为:6811min ij ij i j z c x ===∑∑,8161,1,2,,6..,1,2,,80,1,2,,6,1,2,,8ij i j ij j i ij x a i s t x d j x i j ==⎧≤=⎪⎪⎪==⎨⎪⎪≥==⎪⎩∑∑ (1.2.1)1.集合定义部分LINGO 将集合(SET)的概念引入建模语言,集合是一组相关对象构成的组合,代表模型中的实际事物,并与数学变量及常量联系起来,是实际问题到数学的抽象.例1.2.1中的6个仓库可以看成是一个集合,8个客户可以看成另一个集合.每个集合在使用之前需要预先给出定义,定义集合时要明确三方面内容:集合的名称、集合内的成员(组成集合的个体,也称元素)、集合的属性(可以看成是与该集合有关的变量或常量,相关于数组).定义仓库集合:WH/w1..w6/:AI;其中WH 是集合的名称,w1..w6是集合内成员,“..”是特定的省略号(如果不用该省略号,也可以把成员一一列举出来,成员之间用逗号或空格分开),表明该集合有6个成员,分别对应6个货栈,AI 是集合的属性,它可以看成一个一维数组,有6个分量,分别表示各货栈现有货物的总数.集合、成员、属性的命名规则与变量相同,可按自己的意愿,用有一定意义的字母数字串来表示,式中“/”和“/:”是规定的语法规则.定义客户集合:VD/v1..v8/:DJ;该集合有8个成员,DJ 是集合的属性(有8个分量)表示各客户的需求量. 定义表示运输关系(路线)的集合:LINKS(WH,VD):C,X;该集合以初始集合WH 和DJ 为基础,称为衍生集合(或称派生集合),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 到客户j v 的货物运量.本模型完整的集合定义为:SETS :WH/W1..W6/:AI; VD/V1..V8/:DJ; LINKS(WH,VD):C:X; ENDSETS注 集合定义部分以语句SETS :开始,以语句ENDSETS 结束,这两个语句必须单独成一行. ENDSETS 后面不加标点符号.2.数据初始化(数据段)LINGO 建模语言通过对数据初始化部分来实现对已知属性赋以初始值,格式为: DATA :AI=60,55,51,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;ENDDATA3.目标函数和约束条件目标函数表达式 6811min ij iji j z c x===∑∑用LINGO 语句表示为:MIN =@SUM (LINKS(I,J):C(I,J)*X(I,J));式中,@SUM 是LINGO 提供的内部函数,其作用是对某个集合的所有成员,求指定表达式的和,该函数需要两个参数,第一个参数是集合名称,指定对该集合所有成员求和,如果此集合是一个初始集合,它有m 个成员,则求和运算对这m 个成员进行,相当于求1mi =∑,第二参数是一个表达式,表示求和运算对该表达式进行.此处@SUM 的第一个参数是LINKS(I,J),表示求和运算对衍生集合LINKS 进行,该集合的维数是2,共有48个成员,运算规则是:选对48个成员分别求表达式C(I,J)*X(I,J)的值,然后求和,相当于求6811ij iji j c x==∑∑,表达式中的C 和X 是集合LINKS 的两个属性,它们各有48个分量.注 如果表达式中参与运算的属性属于同一个集合,则@SUM 语句中索引(相当于矩阵或数组的下标)可以省略,假如表达式中参与运算的属性属于不同的集合,则不能省略属性的索引.本例的目标函数可以表示成:MIN =@SUM (LINKS:C*X);约束条件81,1,2,,6iji j xa i =≤=∑实际上表示了6个不等式,用LINGO 语言表示该约束条件,语句为:@FOR (WH(I):@SUM (VD(J):X(I,J))<=AI(I));语句中的@FOR 是LINGO 提供的内部函数,它的作用是对某个集合的所有成员分别生成一个约束表达式,它有两个参数,第一个参数是集合名称,表示对该集合的所有成员生成对应的约束表达式,上述@FOR 的第一个参数是WH ,它表示货栈,共6个成员,故应生成6个约束表达式,@FOR 的第二个参数是约束表达式的具体内容,此处再调用@SUM 函数,表示约束表达式的左边是求和,是对集合VD 的8个成员,并且对表达式X(I,J)中的第二维J 求和,即81ijj x=∑,约束表达式的右边是集合WH 的属性AI ,它有6个分量,与6个约束表达式一一对应.本语句中的属性分别属于不同的集合,所以不能省略索引I ,J.注 @SUM 和@FOR 函数可以嵌套使用.同样地,约束条件61,1,2,,8ijj i cd j ===∑用LINGO 语句表示为:@FOR (VD(J):@SUM (WH(I):X(I,J))=DJ(J)); 目标函数及约束条件的模型为:MIN =@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));4.完整的模型MODEL:SETS:WH/W1..W6/:AI;VD/V1..V8/:DJ;LINKS(WH,VD):C,X;ENDSETSDATA:AI=60,55,51,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”信息窗口中,看到具体求解结果.最优运输方案1.3 LINGO的运算符和函数1.3.1 LINGO的常用运算符1.算术运算符^乘方﹡乘/除﹢加﹣减LINGO唯一的一元算术运算符是取反函数“﹣”.算术运算术的优先级别为:单目“-”最高,其余依次为^,*和/,+和-,同级自左至右,加括号可改变运算次序.2.逻辑运算符在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥.在创建稀疏集时用在成员资格过滤器中.LINGO具有9种逻辑运算符:3.关系运算符关系运算符通常用在约束条件表达式中,用来指定约束条件表达式左边与右边必须满足的关系,有以下三种:= <= >= LINGO中没有单独的“<”和“>”关系.1.3.2 LINGO函数在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。
【精品】LINGO软件灵敏度分析LINGO是一种非常实用的数学建模软件,可用于线性规划、非线性规划、整数规划、混合整数规划、二次规划、非线性二次规划、全局优化、动态规划等方面。
在LINGO中,灵敏度分析可以帮助用户更好地理解线性规划问题的解,并探究约束、变量、最优值等因素的变化对于优化结果的影响。
下面将详细介绍LINGO软件的灵敏度分析功能。
一、约束灵敏度分析在LINGO中,可以通过在“呼出”窗口中选择“求解”菜单,再选中“灵敏度分析”,来进行约束灵敏度分析。
当我们需要对某一约束条件进行灵敏度分析时,可以在“PSens”一栏中选中要进行分析的约束条件,并选择需要分析的灵敏度类型:1. 左侧界(Lower Bound)灵敏度分析:在该约束条件的左侧界上下浮动,观察最优解随着左侧界的变化而产生的变化情况。
进行变量灵敏度分析时,LINGO会输出一个名为“Variable Sensitivity”的窗口,其中包含了与所选中变量相关的数据,如灵敏度系数、上/下限边界、最小可行解等。
另外,该窗口还提供了一个“Graph”选项卡,可以展示出灵敏度分析的图表,帮助用户更直观地理解灵敏度的变化情况。
在LINGO中,最优解灵敏度分析可以探究最优解随着目标函数系数的变化而产生的变化情况。
用户可以在“呼出”窗口中选择“求解”菜单,再选中“灵敏度分析”,然后在“Objective Sensitivity”选项卡中选中需要进行分析的目标函数变量。
总之,LINGO软件的灵敏度分析功能可以在优化过程中帮助用户更好地了解问题的解,探究约束、变量、目标函数系数等因素对应问题的影响,帮助用户优化模型,从而达到更好的优化效果。
怎么⽤lingo解线性⽅程组?⽤lingo11优化解线性⽅程组实例教程应该怎么使⽤lingo求解线性⽅程组?相信⼤家都就都觉的线性⽅程组很难解,接下来⼩编就以实例向⼤家介绍⽤lingo 11优化解线性⽅程组的具体⽅法步骤。
lingo11软件下载地址也有分享给⼤家,需要的朋友可以和⼩编⼀起试着⽤lingo解线性⽅程组哦!LINGO11绿⾊完美特别版 LINGO软件类型:理科⼯具⼤⼩:14.2MB语⾔:简体中⽂时间:2013-09-12查看详情怎么⽤lingo优化解线性⽅程组?1、打开电脑上的lingo软件,我打开如下图:2、我这⾥要优化的⽅程组如下,我已经将她输⼊lingo中了,如下图所⽰:要注意的是不要输错字符了,中英⽂输⼊问题:3、原本的字体很⼩如下图⼀:但是我想变⼤怎么办,这⾥可以Ctrl+你⿏标上的滑动建,就可以变⼤了(图⼆),4、接下来就是运⾏了,如下就是运⾏5、接下来就是运⾏结果了,结果如下:6、当然这个我还是有必要解释⼀下的:min(最⼩值)=406.6667X1 = 70.00000X2 = 0.000000X3 = 3.333333X4 = 0.000000X5 = 50.00000X6 = 16.66667⾄于其他的我这⾥暂时还不关⼼。
7、当然,如果我们要x1,x2,x3,x4,x5都为整数,怎么办呢?那就来介绍⼀下lingo怎么限制整数,⽤这个表⽰@gin(变量)表⽰整数;8、运⾏后的结果如下:min(最⼩值)=408X1 = 68.00000X2 = 0.000000X3 = 4.000000X4 = 2.000000X5 = 50.00000X6 = 16.000009、我这⾥就结束了,如果有什么问题⼤家可以相互讨论。
教程结束,以上就是关于怎么⽤lingo解线性⽅程组?⽤lingo 11优化解线性⽅程组实例教程的全部内容,希望⼤家喜欢!更多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是一种专门用于求解数学规划问题的软件包。
由于LINGO执行速度快,易于方便地输入、求解和分析数学规划问题,因此在教学、科研和工业界得到广泛应用。
LINGO 主要用于求解线性规划、非线性规划、二次规划和整数规划等问题,也可以用于求解一些线性和非线性方程组及代数方程求根等。
LINGO的最新版本为LINGO7.0,但解密版通常为4.0和5.0版本,本书就以LINGO5.0为参照而编写。
1.LINGO编写格式LINGO模型以MODEL开始,以END结束。
中间为语句,分为四大部分(SECTION):(1)集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS”结束。
这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,就象C语言在在程序的第一部分定义变量和数组一样。
在LINGO中称为集合(SET)及其元素(MEMBER或ELEMENT,类似于数组的下标)和属性(A TTRIBUTE,类似于数组)。
LINGO中的集合有两类:一类是原始集合(PRIMITIVE SETS),其定义的格式为:SETNAME/member list(or 1..n)/:attribute,attribute,etc。
另一类是是导出集合(DERIVED SETS),即引用其它集合定义的集合,其定义的格式为:SETNAME(set1,set2,etc。
):attribute,attribute,etc。
如果要在程序中使用数组,就必须在该部分进行定义,否则可不需要该部分。
(2)目标与约束:这部分定义了目标函数、约束条件等。
一般要用到LINGO的内部函数,可在后面的具体应用中体会其功能与用法。
求解优化问题时,该部分是必须的。
(3)数据部分(DA TA):这部分以“DA TA:”开始,以“END DA TA”结束。
其作用在于对集合的属性(数组)输入必要的数值。
格式为:attribut=value_list。
该部分主要是方便数据的输入。
(4)初始化部分(INIT):这部分以“INIT:”开始,以“END INIT”结束。
作用在于对集合的属性(数组)定义初值。
格式为:attribute=value_list。
由于非线性规划求解时,通常得到的是局部最优解,而局部最优解受输入的初值影响。
通常可改变初值来得到不同的解,从而发现更好的解。
编写LINGO程序要注意的几点:1.所有的语句除SETS、ENDSETS、DA TA、ENDDA TA、INIT、ENDINIT和MODEL,END 之外必须以一个分号“;”结尾。
2.LINGO求解非线性规划时已约定各变量非负。
LINGO内部函数使用详解。
LINGO建立优化模型时可以引用大量的内部函数,这些函数以“@”符号打头。
(1)常用数学函数@ABS(X) 返回变量X的绝对数值。
@COS( X)返回X的余弦值,X的单位为弧度@EXP( X)返回x e 的值,其中e 为自然对数的底,即 71828.2@FLOOR( X)向0靠近返回X 的整数部分。
如@FLOOR(3.7),则返回3;@FLOOR(-3.7),则返回-3。
@LGM( X)返回Γ函数的自然对数值。
@LOG( X)返回变量X 的自然对数值。
@SIGN( X)返回变量X 的符号值,当X<0时为-1;当X>0时为1。
@SIN( X)返回X 的正弦值,X 的单位为弧度 @SMAX( X1, X2,..., XN)返回一列值X1, X2,..., XN 的最大值。
@SMIN( X1, X2,..., XN)返回一列值X1, X2,..., XN 的最小值。
@TAN( X)返回X 的正切值,X 的单位为弧度(2)集合函数集合函数的用法如下:set_operator (set_name|condition:expression) 其中set_oprator 部分是集合函数名(见下),set_name 是数据集合名,expression 部分是表达式,|condition 部分是条件,用逻辑表达式描述(无条件时可省略)。
逻辑表达式中可以三种逻辑算符(#AND#(与),#OR#(或),#NOT#(非))和六种关系酸符(#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于))。
常见的集合函数如下: @FOR (set_name :constraint_expressions)对集合(set_name)的每个元素独立地生成约束,约束由约束表达式(constraint_expressions )描述。
@MAX (set_name :expression )返回集合上的表达式(expression )的最大值。
@MIN (set_name :expression )返回集合上的表达式(expression )的最小值。
@SUM (set_name :expression )返回集合上的表达式(expression )的和。
@SIZE (set_name )返回数据集set_name 中包含元素的个数。
@IN (set_name ,set_element )如果数据集set_name 中包含元素set_element 则返回1,否则返回0。
(3)变量界定函数变量函数对变量的取值范围附加限制,共有四种。
@BND (L,X,U )限制U X L ≤≤ @BIN (X )限制X 为0或1。
@FREE (X )取消对X 的符号限制(即可取任意实数值)。
@GIN (X )限制X 为整数值。
(4)财务函数),(@N I FPA 返回如下情形下的净现值:单位时段利率为I ,连续N 个时段支付,每个时段支付费用,即:),(@N I FPA =I II NNn n/))11(1()1(11+-=+∑=),(@N I FPL 返回如下情形下的净现值:单位时段利率为I ,第N 个时段支付单位费用,即:),(@N I FPL =NI)11(+(5)概率函数@PSN(X)标准正态分布的分布函数。
@PSL(X)单位正态线性损失函数(即返回),0(X Z MAX -的期望值,其中Z 为标准正态随机变量)@PPS(A ,X)均值为A 的Possion 分布的分布函数(当X 不是整数时,采用线性插值进行计算)。
@PPL(X)Possion 分布的线性损失函数(即返回),0(X Z MAX -的期望值,其中Z 为Possion 分布随机变量)@PBN(P ,N ,X)二项分布的分布函数当N 或X 不是整数时,采用线性插值进行计算)。
@PHG(POP ,G ,N ,X)超几何分布的分布函数(当POP ,G ,N 或X 不是整数时,采用线性插值进行计算)。
@PFD(N,D,X)自由度为N 和D 的F 分布的分布函数。
@PCX(N,X) 自由度为N 的2χ分布的分布函数。
@PTD(N,X) 自由度为N 的t 分布的分布函数。
@RAND(X)返回0与1之间的伪随机数(X 为种子数,典型用法为U(I)=@RAND(U(I+1)))。
1.某昼夜服务的公交路线每天各时间区段内需司机和乘务人员如下:设司机和乘务人员分别在各时间区段一开始上班,并连续工作八小时,问该公交线路至少配备多少名司机和乘务人员?从第一班开始排,试建立线性模型。
分析与求解:注意在每一时间段里上班的司机和乘务人员中,既包括在该时间段内开始时报到的人员,还包括在上一时间段工作的人员。
因为每一时间段只有四个小时,而每个司乘人员却要连续工作八个小时。
因此每班的人员应理解为该班次相应时间段开始时报到的人员。
设i x 为第i 班应报到的人员(6,,2,1 =i ),则应配备人员总数为:∑==61i ixZ按所需人数最少的要求,可得到线性模型如下:==61min i i x Z⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧≥≥≥+≥+≥+≥+≥+≥+0,,,60302050607060..6211655443322181x x x x x x x x x x x x x x x x t s LINGO 程序如下:MODEL:min=x1+x2+x3+x4+x5+x6; x1+x6>=60; x1+x2>=70; x2+x3>=60; x3+x4>=50; x4+x5>=20; x5+x6>=30; x1>=60; END得到的解为:x1=60,x2=10,x3=50,x4=0,x5=30,x6=0;配备的司机和乘务人员最少为150人。
2 某地区有三个农场共用一条灌渠,每个农场的可灌溉地及分配到的最大用水量如下表:各农场均可种植甜菜、棉花和高粱三种作物,各种作物的用水量、净收益及国家规定的该地区各种作物种植总面积最高限额如下表:三个农场达成协议,他们的播种面积与其可灌溉面积相等,而各种农场种何种作物并无限制。
问如何制定各农场种植计划才能在上述限制条件下,使本地区的三个农场的总净收益最大。
分析与求解:设农场1种植的甜菜、棉花和高粱分别为131211,,x x x 亩,农场2种植的甜菜、棉花和高粱分别为232221,,x x x 亩,农场3种植的甜菜、棉花和高粱分别为333231,,x x x 亩。
设农场可耕地为300,600,400321===a a a ,最大用水量为,6001=b ,8002=b3753=b ,甜菜、棉花和高粱的种植限额为325,500,600321===c c c ,耗水量为31=d ,22=d ,13=d ,净收益为100,300,400321===e e e ,根据题目条件,可建立如下线性模型:∑∑===3131)(max j i ijjxe Z⎪⎪⎪⎩⎪⎪⎪⎨⎧=≤=≤=≤∑∑∑===3131313,2,13,2,13,2,1..j i ij j j i ij i j ij i b x d i a x j c x t sLINGO 编程如下: MODEL: SETS:place/1..3/:a,b; kind/1..3/:c,d,e; plan(place,kind):x; ENDSETS DATA:a=400,600,300; b=600,800,375; c=600,500,325; d=3,2,1;e=400,300,100; ENDDATAmax=@sum(kind(j):e(j)*@sum(place(i):x(i,j))); @for(kind(j):@sum(place(i):x(i,j))<=c(j)); @for(place(i):@sum(kind(j):x(i,j))<=a(i)); @for(place(i):@sum(kind(j):d(j)*x(i,j))<=b(i)); END得到结果如下:X(1,1)=0,X(1,2)=300,X(1,3)=0 X(2,1)=258.3333,X(2,2)=12.5,X(2,3)=0 X(3,1)=0,X(3,2)=187.5,X(3,3)=0 最大总净收益为253333.3元。