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