LINGO编程

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例2.基金的优化使用(2001年数学建模竞赛C题) 假设某校基金会得到了一笔数额为M万元的基金,打算将 其存入银行,校基金会计计划在n年内每年用部分本息奖 励优秀师生,要求每年的奖金额相同,且在n年末仍保留 原基金数额.银行存款税后年利率见下表
存期 税后年利率% 1年 1.8 2年 2.16 3年 2.592 5年 2.88
问: 语句中的I, J能不能省略?
x
i 1
6
ij
d j , j 1, 2,
,8;
用LINGO语句表示为: @FOR(VD(J): @SUM(WH(I): X(I, J)) =DJ(J));
§1.4 LINGO的运算符和函数
一、 LINGO的常用运算符. 1. 算术运算符. ^ * / 2. 逻辑运算符.
1.144
由上表知: (1) 一次性存成最长期,优于两个(或两个以上)较短期的组合 (中途转存) . (2) 当存款年限需要组合时,收益比与组合的先后次序无关 建立模型 把总基金M分成5+1份,分别用x1,…,x6表示, 其中,x1 , …, x5分别存成1-5年定期,到期后本息合计用于发 放奖金, x6存5年定期,到期的本息合计等于原基金总数M 用S表示每年发放的奖金,ai表示第i年的最优收益比
MPI格式文件 LINDO公司制定的数学规划 文件格式
◆用户基本信息
该命令弹出一个对话框,要求 输入用户名和密码(这些信息 在用@ODBC函数访问数据 库要用到)
◆选择性粘贴 该命令把Window剪贴板中 的内容插入到光标所在位置. ◆插入新对象
◆链接
修改模型内插入对象的链接 性质. ◆对象的性质 在模型中选择一个链接或嵌 入对象,用本命令可以查看和 修改这个对象的属性.
◆命令行窗口 主要是为用户交互地测试命令脚本 而设计.(通常不用) ◆状态窗口
[求解器状态] [变量] [约束]
[扩展求解器状态]
[非零系数] [内存使用量] [已运行时间]
§1.3 用LINGO编程语言建ቤተ መጻሕፍቲ ባይዱ模型
一、 LINGO模型的基本组成. 例3.某公司有6个供货栈, 库存货物总数分别为60, 55, 51, 43, 41, 52, 现有8个客户各要一批货, 数量分别为35, 37, 22, 32, 41, 32, 43, 38. 各供货栈到8个客户处的单位货物运输价见下表
②数据之间的逗号和空格可以替换
3. 目标函数和约束条件. 例3的目标函数: min z cij xij ;
i 1 j 1 6 8
用LINGO语句表示为: MIN = @SUM(LINKS(I, J): C(I, J)*X(I, J)); 注: ① @SUM是LINGO提供的内部函数,其作用是对某个 集合的所有成员,求指定表达式的和. @SUM有两个参数:集合名称和表达式 ② 如果表达式中参与运算的属性属于同一个集合,则 @SUM的索引可以省略. 即
【目标函数系数变化范围】
(不限)
【约束条件右边常数的变化范围】
注: 灵敏性分析耗费相当多的求解时间,因此当速度很关键 时,就没有必要激活它
◆生成模型的展开形式 为当前模型生成一个用代数表达式 表示的完整形式,即LINGO将所 有基于集合的表达式(目标函数和 约束条件)扩展成为等价的完全展 开的普通数学表达式模型. ◆生成图形 由模型生成图形,以矩阵形式显示 模型的系数. ◆调试 调试结果,找到充分行(Sufficient Rows)和必要行 (Necessary Rows). ◆模型统计资料 ◆查看(以为本方式显示模型内容)
分 类 运算符
#EQ# #NE# 运算对象是两个数 #GT# #GE# #LT# #LE# #NOT#
+
作 用
两个运算对象相等时为真,否则为假 两个运算对象不相等时为真,否则为假 左边大于右边时为真,否则为假 左边大于或等于右边时为真,否则为假 左边小于右边时为真,否则为假 左边小于或等于右边时为真,否则为假 单目运算符,表示对运算对象取反(即真变假,假变真) 两个运算对象都真时为真,否则为假 两个运算对象都假时为假,否则为真
2. 数据初始化. 如何给例3中的集合AI, DJ, C, X赋值? 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; ENDDATA 注: ①数据初始化部分以“DATA:” 开始, 以ENDDATA结束, 这两个语句必须单独成一行;
min z cij xij ;
i 1 j 1
6
8
x
x
i 1
8
j 1 6
ij
ai , i 1, 2,
d j , j 1, 2,
, 6;
,8;
ij
xij 0,, i 1, 2,
,6, j 1, 2,
,8;
1. 集合定义部分 集合是一组相关对象构成的组合 集合分为初始(基本\原始)集合和衍生(派生)集合
集合在使用之前需要预先给出定义, 初始集合的定义三要素: 集合的名称, 集合的元素, 集合的属性(可视为与该集合有关 的变量或常量).
初始集合的定义格式: 集合的名称/集合的元素/:集合的属性;
例. 定义例3的货栈集合ai和dj
WH / W1..W6 /: AI; VD / V1..V8 /: DJ;
定义: 收益比 a (本金 利息) / 本金 1 利率 【如,存2年的收益比为a2=1+2.16%×2=1.0432】
按银行存款税后年利率计算得到各存款年限对应的最优收益比 见下表:
存期年限 最优收益比
1年 2年 3年 4年(3+1) 5年
1.018
1.0432
1.07776
1.09715968
LINGO的基本用法
1.1 LINGO入门
1.2 了解LINGO的菜单
1.3 用LINGO编程语言建立模型
1.4 LINGO的运算符和函数
1.5 补充
§1.1 LINGO入门
1. LINGO的主要功能特色: (1) 既能求解线性规划问题,也有较强的求解非线性规划 问题的能力;
(2) 输入模型简练直观; (3) 运行速度快,计算能力强; (4) 内置建模语言,提供几十个内部函数,从而能以较少 语句,较直观的方式描述较大规模的优化模型; (5) 将集合的概念引入编程语言,很容易将实际问题转换 为LINGO模型;
模型为:
max S ai xi S , i 1,
,5
x
i
6
i
M
a5 x6 M
输入LINGO如下:
3. 解读求解报告. 例.
LINGO求解报告:
LINGO求解报告:
缩减成本系数 (相差值) 松弛或剩余 影子(对偶) 价格
注: ①最优解中变量的缩减成本系数值自动取零. ②约束条件中, 对于“<=”不等式, 称之为松弛 (Slack). 对于“>=”不等式, 称之为剩余 (Surplus). 不等式左右两边值 相等时, 松弛和剩余的值为0; 如果约束条件无法满足, 则松弛 和剩余的值为负. 含义: 如果该生产线最大生产能力增加1, 能使目标函数值增 加50.
衍生集合的定义四要素: 集合的名称, 对应的初始集合, 集合的元素(可以省略), 集合 的属性(可以没有).
例. 定义集合,表示例3中从第i个货栈到第j个客户的运货量 xij, 和第i个货栈到第j个客户的单位货物运价cij.
LINKS (WH, VD) :C, X; 注: 如果集合的元素省略不写, 则默认衍生集合的元素取它所 对应初始集合的所有可能组合.
§1.2 了解LINGO的菜单
新建 保存 剪切 粘贴 重做 定位 打开 打印
求解 模型 窗口 平铺 上下文 图示 后置 窗口 相关帮助 复制 取消 查找 匹配 括号 显示 选项 关闭所 在线 答案 设置 有窗口 帮助
文件菜单
LINGO菜单
帮助菜单
编辑菜单
窗口菜单
◆输出特殊格式文件
MPS格式文件 IBM开发的数学规划文件 标准格式
MIN = @SUM(LINKS: C*X);
例3的约束条件:
x
j 1
8
ij
ai , i 1, 2,
, 6;
用LINGO语句表示为: @FOR(WH(I): @SUM(VD(J): X(I, J))<=AI(I));
注: ① @FOR是LINGO提供的内部函数,其作用是对某个集 合的所有成员分别生成一个约束表达式. @FOR有两个参数:集合名和约束表达式 这里的集合名表示对该集合所有成员生成对应约束表达式
校基金会希望获得最佳的基金使用计划,以提高每年的奖 金额,请在M=5000万元,n=5年的情况下设计具体存款方 案. 分析: 假定首次发奖金的时间是在基金到位后一年,以后每 隔一年发一次,每年发的时间大致相同. 那么,实际上 n年中发放的奖金都来自利息. 若全部奖金都存为一年期,则每年的奖金数为90万 显然,准备两年后使用的款项应当存成两年期,比存两 次一年期的收益高.
◆灵敏度分析 该命令产生当前模型的灵敏度分析 报告: (1)最优解保持不变的情况下,目标 函数的系数变化范围; (2)在影子价格和缩减成本系数都 不变的前提下,约束条件右边的 常数变化范围; 例. 做下列模型的灵敏度分析
MAX=200*X1+300*X2; X1<=100; X2<=120; X1+2*X2<=160;
(6) 能方便地与Excel、数据库等其他软件交换数据;
建模时需要注意的几个基本问题:
(1) 尽量使用实数优化模型,减少整数约束和整数变量的 个数;
(2) 尽量使用光滑优化模型,减少非光滑约束的个数; 如:尽量少地使用绝对值函数、符号函数、多个变量求最 大(或最小)值、四舍五入函数、取整函数等. (3) 尽量使用线性优化模型,减少非线性约束和非线性变 量的个数(如x/y < 5改为x < 5y) ;
max z 200x1 300x2 x1 100 x2 120 【约束条件】 x1 2 x2 160 x1 , x2 0 再用LINGO处理……
【目标函数】
输入LINGO如下:
LINGO处理结果:
LINGO的语法规定: (1) 求目标函数的最大值和最小值分别用MAX= …或MIN= … 来表示; (2) 每个语句必须以分号“;”结束,每行可以有多个语句,语 句可以跨行; (3) 变量名称必须以字母(A-Z)开头,由字母、数字(0-9)和 下划线“_”组成,长度不超过32个字符,不区分大小写; (4) 可以给语句加上标号,例如[OBJ] MAX= … ; (5) 以“!”开头,以“;”结束的语句是注释语句; (6) 如果对变量的取值范围没有作特殊说明,则默认所有决 策变量都非负; (7) LINGO模型以语句“MODEL:”开头,以“END”结束, 对于比较简单的模型,这两句可以省略;
货栈 客户
V1 6 4
V2 2 9
V3 6 5
V4 7 3
V5 4 8
V6 2 5
V7 5 8
V8 9 2
W1 W2
W3
W4 W5 W6
5
7 2 5
2
6 3 5
1
7 9 2
9
3 5 2
7
9 7 8
4
2 2 1
3
7 6 4
3
1 5 3
试确定各货栈到各客户处的货物调运数量, 使总的运输费用 最小
解:设xij从第i个货栈到第j个客户的运货量, cij表示从第i个 货栈到第j个客户的单位货物运价, ai表示第i个货栈的 最大供货量, dj表示第j个客户的订货量 模型如下
(4) 合理设定变量的上下界,尽可能给出变量的初始值;
(5) 模型中使用的单位的数量级要适当(如小于103);
2. LINGO的基本用法. 例1.某工厂有两条生产线,分别用来生产M和P两种型号的产 品,利润分别为200元/个和300元/个,生产线的最大生产 能力分别为每日100和120,生产线每生产一个M产品需要 1个劳动日(1个工人工作8小时为1个劳动日)进行调试、 检测等工作,而每个P产品需要2个劳动日,该厂工人每天 共计能提供160劳动日,假如原材料等其他条件不受限制, 问应该如何安排生产计划,才能使获得的利润最大? 解:设两种产品的生产量分别为x1和x2,则该数学模型为
相关文档
最新文档