Lingo的基本用法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解:设两种产品的生产量分别为 x1 和 x2 , 则该问题的数学模型为: 目标函数:max z = 200 x1 + 300 x2
x1 ≤ 100 x ≤ 120 2 约束条件: x1 + 2 x2 ≤ 160 xi ≥ 0, i = 1, 2
在Model窗口内输入如下模型: max=200*x1+300*x2; x1<=100; x2பைடு நூலகம்=120; x1+2*x2<=160; 注:Lingo默认所有的决策变量都非负,因 而变量非负条件可以不必输入.
Lingo的基本用法
Lingo入门
我们遇到的许多优化问题都可以归结为规划问题, 如线性规划,非线性规划,二次规划,整数规划,动态 规划,多目标规划等,当遇到变量较多或者约束条件表 达式较复杂等情况时,想用手工计算来求解这类问题几 乎是不可能的,编程计算虽然可行,但工作量大,程序 长而繁琐,稍不小心就会出错,还可能需要花费大量的 时间和精力.可行的办法是用现成的软件求解,Lingo 是专门用来求解各种规划问题的软件包,其功能十分强 大,是求解优化模型的最佳选择.
Lingo的基本用法
下列的模型窗口用于输入模型,可以在该窗 口内用基本类似于数学公式的输入小模型规划
一个优化模型由以下三部分组成:
目标函数:一般表示成求某个数学表达式的 最大值或最小值; 决策变量:目标函数值取决于哪些变量; 约束条件:对变量附加一些条件限制(通常 用等式或不等式表示)
例1:某工厂有两条生产线,分别用来生 产M和P两种型号的产品,利润分别为200 元/个和300元/个,生产线的最大生产能 力分别为每日100和120,生产线每生产 一个M产品需要1个劳动日(1个工人工作 8小时称为1个劳动日)进行调试,检测等 工作,而每个P产品需要2个劳动日,该 工厂工人每天共计能提供160劳动日,假 如原材料等其他条件不受限制,问应如何 安排生产计划,才能使获得的利润最大?
Lingo的语法规定:
求目标函数的最大值或最小值分别用"max="或"min= "来 表示; 每个语句必须以分号";"结束,每行可以有多个语句,语 句可以跨行; 每个语句必须以字母开头,由字母,数字和下划线所组成, 长度不超过32个字符,不区分大小写; 可以给语句加上标号,例如[OBJ] max=200*x1+300*x2; 以!开头,以;结束的语句是注释语句; 如果对变量的取值范围没有作特殊说明,则默认所有决策变 量都非负; Lingo模型以语句"Model:"开头,以"End"结束,对于 比较简单的模型,这两个语句可以省略.
校基金会希望获得最佳的基金使用计划,以提高每 年的奖金额,请在M=500万元,n=5年的情况下设 计具体存款方案.
解:分析 分析:假定首次发放奖金的时间是在基金
到位后一年,以后每隔一年发放一次,每年发 放的时间大致相同,校基金会希望获得最佳的 基金使用计划,以提高每年的奖金额,且在n年 末保留原基金数额M,实际上n年中发放的奖金 总额来自于利息.如果全部基金都存为一年定 期,每年都用到期利息发放奖金,则每年奖金 总数为5000*0.018=90万元,这是没有优化的存 款方案.显然,准备在两年后使用的款项应当 存成两年定期,比存两次一年定期的收益高, 以此类推.目标是合理分配基金的存款方案, 使得n年的利息总额最多.
该报告说明:运行0步找到全局最优解,目标函数值为 29000,变量值分别为:x1=100, x2=30. "Reduced Cost" 的含义是缩减成本系数,"Row" 是输入模型中的行号, "Slack or Surplus"的意思是松弛(<=)或剩余(>=) ,当约 束条件的左右两边相等时,其值为零,如果约束条件无 法满足,即没有可行解,则值为负数."Dual Price"为 影子价格,如Row 2影子价格50,含义是如果该生产线 最大生产能力增加1,能使目标函数,即利润增加50.
于是得到模型如下:
max S ai xi = S , i = 1, 2,L ,5 6 s.t. ∑ xi = M i =1 a5 x6 = M
这是线性规划模型,用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万元,存款 方案如下表:
例2:基金的优化使用(2001年建模竞赛C题)
假设某校基金会得到了一笔数额为M万元的基金, 打算将其存入银行,校基金会计划在n年用部分本 息奖励优秀师生,要求每年的奖金额相同,且在n 年仍保留原基金数额.银行存款税后年利率表如下:
银行存款税后利率表 存期 税后年利率% 1年 1.8 2年 2.16 3年 2.592 5年 2.88
经分析得到两点结论: (1)一次性存成最长期,优于两个(或两个以上) 叫短期的组合(中途转存). (2)当存款年限需要组合时,收益比与组合的 先后次序无关.
建立模型: 建立模型:把总基金M分成5+1份,分别用x1,x2, …,x6表示,其中x1,x2,…,x5分别存成1~5年定期, 到期的本息合计用于当年发放奖金,x6存5年定期, 到期的本息合计等于原基金总数M.用S表示每年 用于奖励优秀师生的奖金额,用ai表示第i年的最 优收益比. 目标函数是每年的奖金额最大,即maxS. 约束条件有3个:各年度的奖金数额相等; 基金总数为M; n年末保留原基金总额M.
定义: 定义:收益比a=(本金+利息)/本金. 于是存2年的收益比a2=1+2.16%*2=1.0432. 按照银行存款税后利率表计算得到各存款年 限对应的最优收益比如下表:
各存款年限对应的最优收益比 存期年限 最优收益比 1年 1.018 2年 1.0432 3年 1.07776 4年(3+1方式) 1.09715968 5年 1.144
如果模型有语法错误,则弹出一个标题为 "LINGO Error Message"的窗口,指出在哪 一行,有怎样的错误.改正错误以后再求解, 如果语法通过,Lingo内部所带的求解程序求出 模型的解,然后弹出一个标题为"LINGO Solver Status"的窗口,其内容为变量个数,约 束条件个数,优化状态,非零变量个数,耗费 内存,所花时间等信息,点击Close关闭该窗口, 屏幕上出现标题为"Solution Report"的信息窗 口,显示优化计算的步数,优化后的目标函数, 列出各变量的计算结果,如下:
最优存款方案 变量 数值/万元 x1 132.8317 x2 129.6230 x3 125.4664 x4 123.2479 x5 118.2016 x6 4370.629
�
Lingo的主要功能特色:
既能求解线性规划问题,也有较强的求解非线性规 划问题的能力; 输入模型简练直观; 运行速度快,计算能力强; 内置建模语言,提供几十个内部函数,从而能以较 少语句,较直观的方式描述较大的优化模型; 将集合的概念引入编程语言,很容易将实际问题转 化为lingo模型; 能方便的与Excel,数据库等其他软件交换数据.