您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Lingo的基本用法
Lingo的基本用法Lingo入门我们遇到的许多优化问题都可以归结为规划问题,如线性规划、非线性规划、二次规划、整数规划、动态规划、多目标规划等,当遇到变量较多或者约束条件表达式较复杂等情况时,想用手工计算来求解这类问题几乎是不可能的,编程计算虽然可行,但工作量大、程序长而繁琐,稍不小心就会出错,还可能需要花费大量的时间和精力。可行的办法是用现成的软件求解,Lingo是专门用来求解各种规划问题的软件包,其功能十分强大,是求解优化模型的最佳选择。Lingo的主要功能特色:既能求解线性规划问题,也有较强的求解非线性规划问题的能力;输入模型简练直观;运行速度快、计算能力强;内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述较大的优化模型;将集合的概念引入编程语言,很容易将实际问题转化为lingo模型;能方便的与Excel、数据库等其他软件交换数据。Lingo的基本用法下列的模型窗口用于输入模型,可以在该窗口内用基本类似于数学公式的输入小模型规划一个优化模型由以下三部分组成:目标函数:一般表示成求某个数学表达式的最大值或最小值;决策变量:目标函数值取决于哪些变量;约束条件:对变量附加一些条件限制(通常用等式或不等式表示)例1:某工厂有两条生产线,分别用来生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而每个P产品需要2个劳动日,该工厂工人每天共计能提供160劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?解:设两种产品的生产量分别为和,则该问题的数学模型为:目标函数:约束条件:12max200300zxx121210012021600,1,2ixxxxxi1x2x在Model窗口内输入如下模型:max=200*x1+300*x2;x1=100;x2=120;x1+2*x2=160;注:Lingo默认所有的决策变量都非负,因而变量非负条件可以不必输入。Lingo的语法规定:求目标函数的最大值或最小值分别用“max=”或“min=”来表示;每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行;每个语句必须以字母开头,由字母、数字和下划线所组成,长度不超过32个字符,不区分大小写;可以给语句加上标号,例如[OBJ]max=200*x1+300*x2;以!开头,以;结束的语句是注释语句;如果对变量的取值范围没有作特殊说明,则默认所有决策变量都非负;Lingo模型以语句“Model:”开头,以“End”结束,对于比较简单的模型,这两个语句可以省略。如果模型有语法错误,则弹出一个标题为“LINGOErrorMessage”的窗口,指出在哪一行,有怎样的错误。改正错误以后再求解,如果语法通过,Lingo内部所带的求解程序求出模型的解,然后弹出一个标题为“LINGOSolverStatus”的窗口,其内容为变量个数、约束条件个数、优化状态、非零变量个数、耗费内存、所花时间等信息,点击Close关闭该窗口,屏幕上出现标题为“SolutionReport”的信息窗口,显示优化计算的步数、优化后的目标函数、列出各变量的计算结果,如下:该报告说明:运行0步找到全局最优解,目标函数值为29000,变量值分别为:x1=100,x2=30.“ReducedCost”的含义是缩减成本系数,“Row”是输入模型中的行号,“SlackorSurplus”的意思是松弛(=)或剩余(=),当约束条件的左右两边相等时,其值为零,如果约束条件无法满足,即没有可行解,则值为负数。“DualPrice”为影子价格,如Row2影子价格50,含义是如果该生产线最大生产能力增加1,能使目标函数,即利润增加50。例2:基金的优化使用(2001年建模竞赛C题)假设某校基金会得到了一笔数额为M万元的基金,打算将其存入银行,校基金会计划在n年用部分本息奖励优秀师生,要求每年的奖金额相同,且在n年仍保留原基金数额。银行存款税后年利率表如下:校基金会希望获得最佳的基金使用计划,以提高每年的奖金额,请在M=500万元、n=5年的情况下设计具体存款方案。银行存款税后利率表存期1年2年3年5年税后年利率%1.82.162.5922.88解:分析:假定首次发放奖金的时间是在基金到位后一年,以后每隔一年发放一次,每年发放的时间大致相同,校基金会希望获得最佳的基金使用计划,以提高每年的奖金额,且在n年末保留原基金数额M,实际上n年中发放的奖金总额来自于利息。如果全部基金都存为一年定期,每年都用到期利息发放奖金,则每年奖金总数为5000*0.018=90万元,这是没有优化的存款方案。显然,准备在两年后使用的款项应当存成两年定期,比存两次一年定期的收益高,以此类推。目标是合理分配基金的存款方案,使得n年的利息总额最多。定义:收益比a=(本金+利息)/本金。于是存2年的收益比a2=1+2.16%*2=1.0432.按照银行存款税后利率表计算得到各存款年限对应的最优收益比如下表:经分析得到两点结论:(1)一次性存成最长期,优于两个(或两个以上)叫短期的组合(中途转存)。(2)当存款年限需要组合时,收益比与组合的先后次序无关。各存款年限对应的最优收益比存期年限1年2年3年4年(3+1方式)5年最优收益比1.0181.04321.077761.097159681.144建立模型:把总基金M分成5+1份,分别用x1,x2,…,x6表示,其中x1,x2,…,x5分别存成1~5年定期,到期的本息合计用于当年发放奖金,x6存5年定期,到期的本息合计等于原基金总数M。用S表示每年用于奖励优秀师生的奖金额,用ai表示第i年的最优收益比。目标函数是每年的奖金额最大,即maxS.约束条件有3个:各年度的奖金数额相等;基金总数为M;n年末保留原基金总额M.6156max,1,2,,5..iiiiSaxSistxMaxM于是得到模型如下:这是线性规划模型,用Lingo软件求解,令M=5000,编写程序如下:Max=S;1.018*x1=S;1.0432*x2=S;1.07776*x3=S;1.07776*1.018*x4=S;1.144*x5=S;1.144*x6=M;M=5000;x1+x2+x3+x4+x5+x6=M;优化结果:求解得到优化结果:目标函数值,即每年度的奖金数额S=135.2227万元,存款方案如下表:最优存款方案变量x1x2x3x4x5x6数值/万元132.8317129.6230125.4664123.2479118.20164370.629
本文标题:Lingo的基本用法
链接地址:https://www.777doc.com/doc-8140396 .html