lingo教程 有图.ppt_第1页
lingo教程 有图.ppt_第2页
lingo教程 有图.ppt_第3页
lingo教程 有图.ppt_第4页
lingo教程 有图.ppt_第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

LINGO软件 HanguangXiaoChongqingUniversityofTechnology 2020年2月9日 主要内容 LINGO软件LINGO中建模语言 集合 运算符和函数等 LINGO编程实例露天矿生产的车辆安排 LINGO软件 1 美国芝加哥 Chicago 大学的LinusSchrage 莱纳斯 施拉盖 教授于1980年前后开发 2 LINGO LinearInteractiveGeneralOptimizer 线性交互式通用优化器 3 用来求解的优化模型 连续优化和整数规划 IP 类型 线性规划 LP 二次规划 QP 非线性规划 NLP LINDO LINGO软件能求解的模型 优化 线性规划 非线性规划 二次规划 连续优化 整数规划 LINDO LINGO 学习LINGO需掌握的方面 LINGO LinearInteractiveGeneralOptimizer V12 0 求解数学规划问题MinZ f x s tx D Rn 需要掌握 软件操作基本语法结构掌握集合 SETS 的应用正确阅读求解报告正确理解求解状态窗口学会设置基本的求解选项 OPTIONS LINGO软件界面 LINGO软件菜单 FILE 1 新建 New 单击 新建 按钮或直接按F2键可以创建一个新的 Model 窗口 在这个新的 Model 窗口中能够输入所要求解的模型 2 打开 Open 单击 打开 按钮或直接按F3键可以打开一个已经存在的文本文件 这个文件可能是一个Model文件 3 保存 Save 单击 保存 按钮或直接按F4键用来保存当前活动窗口 最前台的窗口 中的模型结果 命令序列等保存为文件 4 另存为 SaveAs 另存为 命令或按F5键可以将当前活动窗口中的内容保存为文本文件 其文件名为你在 另存为 对话框中输入的文件名 利用这种方法你可以将任何窗口的内容如模型 求解结果或命令保存为文件 5 关闭 Close 在文件菜单中选用 关闭 Close 命令或按F6键将关闭当前活动窗口 如果这个窗口是新建窗口或已经改变了当前文件的内容 LINGO系统将会提示是否想要保存改变后的内容6 打印 Print 打印 Print 命令 单击 打印 按钮或直接按F7键可以将当前活动窗口中的内容发送到打印机7 打印设置 PrintSetup 打印设置 命令或直接按F8键可以将文件输出到指定的打印机 8 打印预览 PrintPreview 打印预览 命令或直接按Shift F8键可以进行打印预览 9 输出到日志文件 LogOutput 从文件菜单中选用 LogOutput 命令或按F9键打开一个对话框 用于生成一个日志文件 它存储接下来在 命令窗口 中输入的所有命令 10 提交LINGO命令脚本文件 TakeCommands TakeCommands 命令或直接按F11键就可以将LINGO命令脚本 commandscript 文件提交给系统进程来运行 11 引入LINGO文件 ImportLingoFile 从文件菜单中选用 ImportLingoFile 命令或直接按F12键可以打开一个LINGO格式模型的文件 然后LINGO系统会尽可能把模型转化为LINGO语法允许的程序 12 退出 Exit 从文件菜单中选用 Exit 命令或直接按F10键可以退出LINGO系统 LINGO软件菜单 eidt 1 恢复 Undo 从编辑菜单中选用 恢复 Undo 命令或按Ctrl Z组合键 将撤销上次操作 恢复至其前的状态 2 剪切 Cut 从编辑菜单中选用 剪切 Cut 命令或按Ctrl X组合键可以将当前选中的内容剪切至剪贴板中 3 复制 Copy 从编辑菜单中选用 复制 Copy 命令 单击 复制 按钮或按Ctrl C组合键可以将当前选中的内容复制到剪贴板中 4 粘贴 Paste 从编辑菜单中选用 粘贴 Paste 命令 单击 粘贴 按钮或按Ctrl V组合键可以将粘贴板中的当前内容复制到当前插入点的位置 5 粘贴特定 PasteSpecial 与上面的命令不同 它可以用于剪贴板中的内容不是文本的情形 6 全选 SelectAll 从编辑菜单中选用 SelectAll 命令或按Ctrl A组合键可选定当前窗口中的所有内容 7 匹配小括号 MatchParenthesis 从编辑菜单中选用 MatchParenthesis 命令 单击 MatchParenthesis 按钮或按Ctrl P组合键可以为当前选中的开括号查找匹配的闭括号 8 粘贴函数 PasteFunction 从编辑菜单中选用 PasteFunction 命令可以将LINGO的内部函数粘贴到当前插入点 LINGO软件菜单 LINGO 1 求解模型 Slove 从LINGO菜单中选用 求解 命令 单击 Slove 按钮或按Ctrl S组合键可以将当前模型送入内存求解 2 求解结果 Solution 从LINGO菜单中选用 Solution 命令 单击 Solution 按钮或直接按Ctrl O组合键可以打开求解结果的对话框 这里可以指定查看当前内存中求解结果的那些内容 3 灵敏性分析 Range Ctrl R 用该命令产生当前模型的灵敏性分析报告 研究当目标函数的费用系数和约束右端项在什么范围 此时假定其它系数不变 时 最优基保持不变 灵敏性分析是在求解模型时作出的 因此在求解模型时灵敏性分析是激活状态 但是默认是不激活的 为了激活灵敏性分析 运行LINGO Options 选择GeneralSolverTab 在DualComputations列表框中 选择PricesandRanges选项 灵敏性分析耗费相当多的求解时间 因此当速度很关键时 就没有必要激活它 4 选项 Options 从LINGO菜单中选用 Options 命令 单击 Options 按钮或直接按Ctrl I组合键可以改变一些影响LINGO模型求解时的参数 该命令将打开一个含有7个选项卡的窗口 你可以通过它修改LINGO系统的各种参数和选项 5 模型通常形式 Generate 从LINGO菜单中选用 Generate 命令或直接按Ctrl G组合键可以创建当前模型的代数形式 LINGO模型或MPS格式文本 6 图片 Picture 7 调试 Debug 8 模型统计 ModelStatistics 6 查看 Look 从LINGO菜单中选用 Look 命令或直接按Ctrl L组合键可以查看全部的或选中的模型文本内容 LINGO软件菜单 Window 1 命令行窗口 OpenCommandWindow 从窗口菜单中选用 OpenCommandWindow 命令或直接按Ctrl 1可以打开LINGO的命令行窗口 在命令行窗口中可以获得命令行界面 在 提示符后可以输入LINGO的命令行命令 2 状态窗口 StatusWindow 从窗口菜单中选用 StatusWindow 命令或直接按Ctrl 2可以打开LINGO的求解状态窗口 回到模型窗口 SentToBack Ctrl B关闭所有窗口 CloseAll Ctrl 3并行放置窗口 Tile Ctrl 4层叠放置窗口 Cascade Ctrl 5放置图标 ArrangeIcons Ctrl 6 LINGO软件菜单 HELP 1 帮助主题 HelpMenu 从帮助菜单中选用 HelpMenu 可以打开LINGO的帮助文件 注册信息 Register 填写注册信息 自动更新 AutoUptate 自动升级 2 关于LINGO AboutLingo 关于当前LINGO的版本信息等 打开文件 F3 打印文件 F7 复制 Ctrl C 取消操作 Ctrl Z 查找 Ctrl F 显示解答 Alt O 匹配括号 Ctrl P 选项设置 Ctrl I 关闭所有窗口 Alt X 在线帮助 F1 新建文件 F2 保存文件 F4 剪切 Ctrl X 粘贴 Ctrl V 恢复操作 Ctrl Y 定位某行 ctrl T 求解模型 Ctrl S 模型图示 Ctrl K 窗口后置 Ctrl B 平铺窗口 Alt T 上下文相关的帮助 LINGO软件工具栏 LINGO软件文件保存类型 Variables 变量数量 变量总数 Total 非线性变量数 Nonlinear 整数变量数 Integer Constraints 约束数量 约束总数 Total 非线性约束个数 Nonlinear Nonzeros 非零系数数量 总数 Total 非线性项系数个数 Nonlinear GeneratorMemoryUsed K 内存使用量 ElapsedRuntime hh mm ss 求解花费的时间 LINGO软件运行状态窗口的参数解释 LINGO软件运行状态窗口的参数解释 求解器 求解程序 状态框 当前模型的类型 LP QP ILP IQP PILP PIQP NLP INLP PINLP 以I开头表示IP 以PI开头表示PIP 当前解的状态 GlobalOptimum LocalOptimum Feasible Infeasible 不可行 Unbounded 无界 Interrupted 中断 Undetermined 未确定 解的目标函数值 当前约束不满足的总量 不是不满足的约束的个数 实数 即使该值 0 当前解也可能不可行 因为这个量中没有考虑用上下界命令形式给出的约束 目前为止的迭代次数 运行状态窗口 扩展的求解器 求解程序 状态框 使用的特殊求解程序 B and B 分枝定界算法 Global 全局最优求解程序 Multistart 用多个初始点求解的程序 目前为止找到的可行解的最佳目标函数值 目标函数值的界 特殊求解程序当前运行步数 分枝数 对B and B程序 子问题数 对Global程序 初始点数 对Multistart程序 有效步数 主要内容 LINGO软件简介LINGO建模语言 集合 运算符和函数等 LINGO编程实例露天矿生产的车辆安排 一个简单的LINGO程序 例直接用LINGO来解如下二次规划问题 输入窗口如下 目标函数 约束条件 变量取整 每个语句以 结束 顺序无关 程序 eg1 lg4 输出结果 运行菜单命令 LINGO Solve 最优整数解X 35 65 最大利润 11077 5 一个简单的LINGO程序 例1SAILCO公司需要决定下四个季度的帆船生产量 下四个季度的帆船需求量分别是40条 60条 75条 25条 这些需求必须按时满足 每个季度正常的生产能力是40条帆船 每条船的生产费用为400美元 如果加班生产 每条船的生产费用为450美元 每个季度末 每条船的库存费用为20美元 假定生产提前期为0 初始库存为10条船 如何安排生产可使总费用最小 集合及其属性 quarters 1 2 3 4 dem rp op inv LINGO中定义集合及其属性 以 MODEL 开始 以 END 结束 给出优化目标和约束 程序 eg2 lg4 目标函数的定义方式 对语句中冒号 后面的表达式 按照 前面的集合指定的下标 元素 进行求和 本例中目标函数也可以等价地写成 SUM QUARTERS i 400 RP i 450 OP i 20 INV i SUM 相当于求和符号 由于本例中目标函数对集合QUARTERS的所有元素 下标 都要求和 所以可以将下标i省去 SUM 集合 下标 关于集合的属性的表达式 约束条件的定义方式 循环函数 FOR 集合 下标 关于集合的属性的约束关系式 对冒号 前面的集合的每个元素 下标 冒号 后面的约束关系式都要成立 本例中 每个季度正常的生产能力是40条帆船 这正是语句 FOR QUARTERS I RP I 40 的含义 这个语句可以简化成 FOR QUARTERS RP 40 问题求解 运行菜单命令 LINGO Solve 最小成本 78450 LINGO模型最基本的组成要素 1 集合段 SETS 以 SETS 开始 ENDSETS 结束 定义必要的集合变量 SET 及其元素 MEMBER 含义类似于数组的下标 和属性 ATTRIBUTE 含义类似于数组 2 目标与约束段 目标函数 约束条件等 没有段的开始和结束标记 因此实际上就是除其它四个段 都有明确的段标记 外的LINGO模型 这里一般要用到LINGO的内部函数 尤其是与集合相关的求和函数 SUM和循环函数 FOR等 LINGO模型最基本的组成要素 3 数据段 DATA 以 DATA 开始 ENDDATA 结束 对集合的属性 数组 输入必要的常数数据 格式为 attribute 属性 value list 常数列表 常数列表 value list 中数据之间可以用逗号 分开 也可以用空格分开 回车等价于一个空格 如上面对DEM的赋值也可以写成 DEM 40607525 LINGO模型最基本的组成要素 4 初始段 INIT 以 INIT 开始 ENDINIT 结束 对集合的属性 数组 定义初值 因为求解算法一般是迭代算法 所以 如果能给出一个比较好的迭代初值 对提高算法的计算效果是有益的 如果有一个接近最优解的初值 对LINGO求解模型是有帮助的 定义初值的格式为 attribute 属性 value list 常数列表 5 计算段 CALC 以 CALC 开始 ENDCALC 结束 对一些原始数据进行计算处理 基本集合与派生集合 例2建筑工地的位置 用平面坐标a b表示 距离单位 公里 及水泥日用量d 吨 下表给出 有两个临时料场位于P 5 1 Q 2 7 日储量各有20吨 从A B两料场分别向各工地运送多少吨水泥 使总的吨公里数最小 两个新的料场应建在何处 节省的吨公里数有多大 基本集合与派生集合 建立模型 记工地的位置为 水泥日用量为 料场位置为 日储量为 从料场向工地的运送量为 基本集合与派生集合 本例中集合的概念 利用集合的概念 可以定义需求点DEMAND和供应点SUPPLY两个集合 分别有6个和2个元素 下标 集合的属性相当于以集合的元素为下标的数组 这里的相当于二维数组 它的两个下标分别来自集合DEMAND和SUPPLY 因此可以定义一个由二元对组成的新的集合 然后将定义成这个新集合的属性 link demand supply c 基本集合与派生集合 定义了三个集合 其中LINK在前两个集合DEMAND和SUPPLY的基础上定义 表示集合LINK中的元素就是集合DEMAND和SUPPLY的元素组合成的有序二元组 从数学上看LINK是DEMAND和SUPPLY的笛卡儿积 也就是说LINK S T SDEMAND TSUPPLY 因此 其属性C也就是一个6 2的矩阵 或者说是含有12个元素的二维数组 LINGO建模语言也称为矩阵生成器 MATRIXGENERATOR 类似DEMAND和SUPPLY直接把元素列举出来的集合 称为基本集合 primaryset 而把LINK这种基于其它集合而派生出来的二维或多维集合称为派生集合 derivedset 由于是DEMAND和SUPPLY生成了派生集合LINK 所以DEMAND和SUPPLY称为LINK的父集合 程序 eg3 lg4 基本集合与派生集合 初始段 LINGO对数据是按列赋值的语句的实际赋值顺序是X 5 2 Y 1 7 而不是X 5 1 Y 2 7 等价写法 X 5 2 Y 1 7 同理 数据段中对常数数组A B的赋值语句也可以写成A B 1 251 258 750 750 54 755 75536 57 257 75 基本集合与派生集合 基本集合与派生集合 解答 运行菜单命令 LINGO Solve 局部最优解X 1 7 249997 X 2 5 695940 Y 1 7 749998 Y 2 4 928524 C 略 最小运量 89 8835 吨公里 问题 最小运量89 8835是不是全局最优 使用 LINGO Options 菜单命令打开选项对话框 在 GlobalSolver 选项卡上选择 UseGlobalSolver 激活全局最优求解程序 基本集合与派生集合 问题 最小运量89 8835是不是全局最优 为减少计算工作量 对X Y的取值再做一些限制 虽然理论上新建料场的位置可以是任意的 但显然最佳的料场位置不应该离工地太远 至少不应该超出现在6个工地所决定的坐标的最大 最小值决定的矩形之外 即 0 5 x 8 75 0 75 y 7 75 此时目标函数值的下界 ObjBound 85 2638 与目前得到的最好的可行解的目标函数值 BestObj 85 2661 相差已经非常小 可以认为已经得到了全局最优解 基本集合与派生集合 计算结果 工地与料场示意图 表示料场 表示工地 可以认为是模型的最后结果 如果要把料厂P 5 1 Q 2 7 的位置看成是已知并且固定的 这时是LP模型 只需要把初始段的 XY 5 1 2 7 语句移到数据段就可以了 此时 运行结果告诉我们得到全局最优解 变量C的取值这里略去 最小运量136 2275 吨公里 稠密集合与稀疏集合 包含了两个基本集合构成的所有二元有序对的派生集合称为稠密集合 简称稠集 有时候 在实际问题中 一些属性 数组 只在笛卡儿积的一个真子集合上定义 这种派生集合称为稀疏集合 简称疏集 例3 最短路问题 在纵横交错的公路网中 货车司机希望找到一条从一个城市到另一个城市的最短路 下图表示的是公路网 节点表示货车可以停靠的城市 弧上的权表示两个城市之间的距离 百公里 那么 货车从城市S出发到达城市T 如何选择行驶路线 使所经过的路程最短 稠密集合与稀疏集合 分析 为得到从S到T的最优行驶路线 只需要先求出从S到Ck k 1 2 的最优行驶路线 就可以方便地得到从S到T的最优行驶路线 同样 为了求出从S到Ck k 1 2 的最优行驶路线 只需要先求出从S到Bj j 1 2 的最优行驶路线 为了求出从S到Bj j 1 2 的最优行驶路线 只需要先求出从S到Ai i 1 2 3 的最优行驶路线 而S到Ai i 1 2 3 的最优行驶路线是很容易得到的 实际上 此例中S到Ai i 1 2 3 只有唯一的道路 稠密集合与稀疏集合 分析 可把从S到T的行驶过程分成4个阶段 即S Ai i 1 2或3 Ai Bj j 1或2 Bj Ck k 1或2 Ck T 记d Y X 为城市Y与城市X之间的直接距离 若这两个城市之间没有道路直接相连 则可以认为直接距离为 用L X 表示城市S到城市X的最优行驶路线的路长 稠密集合与稀疏集合 计算 所以 从S到T的最优行驶路线的路长为20 进一步分析以上求解过程 可以得到从S到T的最优行驶路线为S A3 B2 C1 T 这种计算方法在数学上称为动态规划 DynamicProgramming 本例的LINGO求解 CITIES 城市 一个基本集合 元素通过枚举给出 L CITIES对应的属性变量 我们要求的最短路长 ROADS 道路 由CITIES导出的一个派生集合 请特别注意其用法 由于只有一部分城市之间有道路相连 所以不应该把它定义成稠密集合 将其元素通过枚举给出 这就是一个稀疏集合 D 稀疏集合ROADS对应的属性变量 给定的距离 程序 eg4 lg4 稠密集合与稀疏集合 从模型中还可以看出 这个LINGO程序可以没有目标函数 这在LINGO中 可以用来找可行解 解方程组和不等式组 在数据段对L进行赋值 只有L S 0已知 后面的值为空 但位置必须留出来 即逗号 一个也不能少 否则会出错 如果这个语句直接写成 L 0 语法上看也是对的 但其含义是L所有元素的取值全部为0 所以也会与题意不符 稠密集合与稀疏集合 虽然集合CITIES中的元素不是数字 但当它以CITIES I 的形式出现在循环中时 引用下标I却实际上仍是正整数 也就是说I指的正是元素在集合中的位置 顺序 一般称为元素的索引 INDEX 在 for循环中的过滤条件里用了一个函数 index 其作用是返回一个元素在集合中的索引值 这里 index S 1 即元素S在集合中的索引值为1 所以逻辑关系式 I GT index S 可以可以直接等价地写成 I GT 1 这里 index S 实际上还是 index CITIES S 的简写 即返回S在集合CITIES中的索引值 稠密集合与稀疏集合 本例的LINGO求解结果 从S到T的最优行驶路线的路长为20 进一步分析 可以得到最优行驶路线为S A3 B2 C1 T 集合的类型 集合派生集合基本集合稀疏集合稠密集合元素列表法元素过滤法直接列举法隐式列举法 setname member list attribute list setname parent set list member list attribute list SETS CITIES A1 A2 A3 B1 B2 ROADS CITIES CITIES A1 B1A1 B2A2 B1A3 B2 D ENDSETS SETS STUDENTS S1 S8 PAIRS STUDENTS STUDENTS ENDSETS 集合使用小结 基本集合的定义语法 setname member list attribute list 其中setname为定义的集合名 member list为元素列表 attribute list为属性列表 派生集合的定义语法 setname parent set list member list attribute list 与基本集合的定义相比较多了一个parent set list 父集合列表 父集合列表中的集合 如set1 set2 等 称为派生集合setname的父集合 它们本身也可以是派生集合 算术运算符 LINGO中的算术运算符有以下5种 加法 减法或负号 乘法 除法 求幂 逻辑运算符 在LINGO中 逻辑运算 表达式 通常作为过滤条件使用 逻辑运算符有9种 可以分成两类 AND 与 OR 或 NOT 非 逻辑值之间的运算 它们操作的对象本身已经是逻辑值或逻辑表达式 计算结果也是逻辑值 EQ 等于 NE 不等于 GT 大于 GE 大于等于 LT 小于 LE 小于等于 是 数与数之间 的比较 也就是它们操作的对象本身必须是两个数 计算得到的结果是逻辑值 关系运算符 在LINGO中用来表示优化模型的约束条件 LINGO中关系运算符有3种 即 大于等于 在优化模型中约束一般没有严格小于 严格大于关系 运算符的优先级 基本的数学函数 ABS X 绝对值函数 返回X的绝对值 COS X 余弦函数 返回X的余弦值 X的单位是弧度 EXP X 指数函数 返回 FLOOR X 取整函数 返回X的整数部分 向最靠近0的方向取整 LGM X 返回X的伽玛 gamma 函数的自然对数值 当X为整数时LGM X LOG X 1 当X不为整数时 采用线性插值得到结果 LOG X 自然对数函数 返回X的自然对数值 的值 其中e 2 718281 MOD X Y 模函数 返回X对Y取模的结果 即X除以Y的余数 这里X和Y应该是整数 POW X Y 指数函数 返回XY的值 基本的数学函数 SIGN X 符号函数 返回X的符号值 X 0时返回 1 SIN X 正弦函数 返回X的正弦值 X的单位是弧度 SMAX list 最大值函数 返回一列数 list 的最大值 SMIN list 最小值函数 返回一列数 list 的最小值 SQR X 平方函数 返回X的平方 即X X 的值 SQRT X 开平方函数 返回X的正的平方根的值 TAN X 正切函数 返回X的正切值 X的单位是弧度 集合循环函数 FOR 集合元素的循环函数 对集合setname的每个元素独立地生成表达式 表达式由expression list描述 通常是优化问题的约束 MAX 集合属性的最大值函数 返回集合setname上的表达式的最大值 MIN 集合属性的最小值函数 返回集合setname上的表达式的最小值 PROD 集合属性的乘积函数 返回集合setname上的表达式的积 SUM 集合属性的求和函数 返回集合setname上的表达式的和 集合操作函数 INDEX set name primitive set element 给出元素primitive set element在集合set name中的索引值 即按定义集合时元素出现顺序的位置编号 省略set name LINGO按模型中定义的集合顺序找到第一个含有该元素的集合 并返回索引值 如果没有找到该元素 则出错 IN set name primitive index 1 primitive index 2 判断一个集合中是否含有某个索引值 如果集合set name中包含由索引primitive index 1 primitive index 2 所对应元素 则返回1 逻辑值 真 否则返回0 逻辑值 假 WRAP I N 此函数对N 1无定义当I位于区间 1 N 内时直接返回I 一般地 返回J I K N 其中J位于区间 1 N K为整数 SIZE set name 返回数据集set name中包含元素的个数 变量定界函数 BND L X U 限制L X U 注意LINGO中没有与LINDO命令SLB SUB类似的函数 SLB和 SUB BIN X 限制X为0或1 注意LINDO中的命令是INT 但LINGO中这个函数的名字却不是 INT X FREE X 取消对X的符号限制 即可取负数 0或正数 GIN X 限制X为整数 文件输入输出函数 FILE filename 当前模型引用其他ASCII码文件中的数据或文本时可以采用该语句 但不允许嵌套使用 其中filename为存放数据的文件名 该文件中记录之间用 分开 ODBC提供LINGO与ODBC OpenDataBaseConnection 开放式数据库连接 的接口 OLE提供LINGO与OLE ObjectLinkingandEmbeding 接口 POINTER N 在Windows下使用LINGO的动态连接库DLL 直接从共享的内存中传送数据 TEXT filename 用于数据段中将解答结果送到文本文件filename中 当省略filename时 结果送到标准的输出设备 通常就是屏幕 filename中可以带有文件路径 没有指定路径时表示在当前目录 如果这个文件已经存在 将会被覆盖 其他函数 IF logical condition true result false result 当逻辑表达式logical condition的结果为真时 返回true result 否则返回false result WARN text logical condition 如果逻辑表达式 logical condition 的结果为真 显示 text 信息 USER user determined arguments 允许用户自己编写的函数 DLL或OBJ文件 可能应当用C或FORTRAN等其他语言编写并编译 主要内容 LINGO软件简介LINGO建模语言 集合 运算符和函数等 LINGO编程实例露天矿生产的车辆安排 例1 某昼夜服务的公交路线每天各时间区段内需司机和乘务人员如下 设司机和乘务人员分别在各时间区段一开始上班 并连续工作八小时 问该公交线路至少配备多少名司机和乘务人员 从第一班开始排 试建立线性模型 解 按所需人数最少的要求 可得到线性模型如下 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 END 得到的解为 配备的司机和乘务人员最少为150人 x1 60 x2 10 x3 50 x4 0 x5 30 x6 0 例2 某地区有三个农场共用一条灌渠 每个农场的可灌溉地及分配到的最大用水量如下表 各农场均可种植甜菜 棉花和高粱三种作物 各种作物的用水量 净收益及国家规定的该地区各种作物种植总面积最高限额如下表 三个农场达成协议 他们的播种面积与其可灌溉面积相等 而各农场种何种作物并无限制 问如何制定各农场种植计划才能在上述限制条件下 使本地区的三个农场的总净收益最大 解 设农场1种植的甜菜 棉花和高粱分别为 亩 农场2种植的甜菜 棉花和高粱分别为 设三个农场可耕地分别为 其最大用水量分别为 其甜菜 棉花和高粱的种植限额分别为 根据题目条件 可建立如下线性模型 其净收益分别为 其耗水量分别为 LINGO编程如下 MODEL SETS place 1 3 a b kind 1 3 c d e plan place kind x ENDSETSDATA 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 0X 2 1 258 3333 X 2 2 12 5 X 2 3 0X 3 1 0 X 3 2 187 5 X 3 3 0 最大总净收益为253333 3元 对本题来说 由于数据少 可以不采用数组形式 而直接采用变量表示 建立模型如下 亩 设农场1种植的甜菜 棉花和高粱分别为 亩 农场2种植的甜菜 棉花和高粱分别为 亩 农场3种植的甜菜 棉花和高粱分别为 根据题目条件 可建立如下线性模型 LINGO程序如下 MODEL max 400 x1 x2 x3 300 y1 y2 y3 100 z1 z2 z3 x1 x2 x3 600 y1 y2 y3 500 z1 z2 z3 325 x1 y1 z1 400 x2 y2 z2 600 x3 y3 z3 300 3 x1 2 y1 z1 600 3 x2 2 y2 z2 800 3 x3 2 y3 z3 375 END 得到的解如下 X1 200 Y1 0 Z1 0 X2 58 33333 Y2 312 5 Z2 0 X3 0 Y3 187 5 Z3 0 最大总净收益为253333 3元 例3 公司在各地有4项业务 选定了4位业务员去处理 由于业务能力 经验和其它情况不同 4业务员去处理4项业务的费用 单位 元 各不相同 见下表 应当怎样分派任务 才能使总的费用最小 则可以建立如下模型 LINGO程序如下 MODEL SETS person 1 4 task 1 4 assign person task a x ENDSETSDATA a 1100 800 1000 700 600 500 300 800 400 800 1000 900 1100 1000 500 700 ENDDATAmin sum assign a x for person i sum task j x i j 1 for task j sum person i x i j 1 for assign i j bin x i j END 得到的结果如下 最小费用为2100元 即第1个业余员做第4项业务 第2个业余员做第2 第3项业务 总费用达到最小 为2100元 x 1 1 0 x 1 2 0 x 1 3 0 x 1 4 1 x 2 1 0 x 2 2 1 x 2 3 0 x 2 4 0 x 3 1 1 x 3 2 0 x 3 3 0 x 3 4 0 x 4 1 0 x 4 2 0 x 4 3 1 x 4 4 0 MODEL DATA a file data txt ENDDATA END 同时在LINGO目录下建立文本文件data txt 数据如下 LINGO程序中输入的数据也可以从文本文件中读入 特别是数据比较多时 将程序与数据分开 显得更方便 如上面程序也可以这样写 1100 800 1000 700600 500 300 800400 800 1000 9001100 1000 500 700 例4 篮球队选队员问题篮球队要选择5名队员上场组成出场阵容参加比赛 8名篮球队员的身高及擅长位置如下表 出场阵容满足如下条件 1 只能有一名中锋上场 2 至少有一名后卫上场 4 2号和8号至少有1个不出场 3 如1号和4号均上场 则6号不出场 问应当选择哪5名队员上场 才能使出场队员平均身高最高 解 这是一个0 1整数规划问题 则目标函数很容易给出 约束条件 所选队员为5人 则 只能有一名中锋上场 则 至少有一名后卫 则 如1号和4号均上场 则6号不出场 则可用如下一个约束来表达 2号和8号至少有1个不出场 即2号和8号至多出场1个 约束表达 数学模型 LINGO编程如下 MODEL SETS team 1 8 a x ENDSETSDATA a 1 92 1 90 1 88 1 86 1 85 1 83 1 80 1 78 给出身高数据 ENDDATAmax sum team i a i x i 5 0 SUM team i x i 5 所选队员为5人 x 1 x 2 1 只能有一名中锋上场 x 6 x 7 x 8 1 至少有一名后卫上场 x 1 x 4 x 6 2 如果1号和4号上场 则6号不上场 x 2 x 8 1 2号和8号至少有一个不出场 即出场人数至多为1个 FOR team i bin x i 所有变量为0 1变量 END 解为 x 1 0 x 2 1 x 3 1 x 4 1 x 5 1 x 6 1 x 7 0 x 8 0 即第2 3 4 5 6名队员被选上 最大平均身高为Z 1 864米 例5 有五项设计任务可供选择 各项设计任务的预期完成时间分别为3 8 5 4 10 周 设计报酬分别为7 17 11 9 21 万元 设计任务只能一项一项地进行 总的期限为20周 选择任务时必须满足下面要求 1 至少完成3项设计任务 2 若选择任务1 必须同时选择任务2 3 任务3和任务4不能同时选择 应当选择哪些任务 才能使总的设计报酬最大 解 这是一个0 1整数规划问题 则容易得到目标函数 根据题目要求分别列出约束条件如下 数学模型 总期限为20周 则约束条件为 至少完成3项设计任务 则 若选择任务1 必须同时选择任务2 则 任务3和任务4不能同时选择 则 MODEL SETS mat 1 5 m t x ENDSETSDATA m 7 17 11 9 21 定义报酬数组 t 3 8 5 4 10 定义完成时间 ENDDATAmax SUM mat i m i x i 定义目标函数 SUM mat i t i x i 3 至少完成3项任务 x 2 x 1 若选择任务1 必须同时选择任务2 x 3 x 4 1 任务3和任务4不能同时选择 FOR mat i BIN x i 使各变量为0 1变量 END 解为 x 1 1 x 2 1 x 3 1 x 4 0 x 5 0 选择设计任务1 2 3 最大报酬为35万元 LINGO程序如下 例6 固定费用 有四种资源A B C D被用于生产三种产品I II 单耗量及组织三种商品生产的固定费用见下表 现要 求制定一个生产计划 使总收益最大 解 可引入用0 1变量来解决是否需要固定费用问题 第I种产品销售一件可收入7 4 3元 第II种产品 销售一件可收入10 6 4元 第III种产品销售一件可 收入20 12 8元 则问题的整数规划模型为 LINGO程序 MODEL DATA M 150 ENDDATAmax 3 x1 4 x2 8 x3 100 y1 150 y2 200 y3 目标函数 2 x1 4 x2 8 x3 500 2 x1 3 x2 4 x3 300 x1 2 x2 3 x3 100 3 x1 5 x2 7 x3 700 x1 M y1 x2 M y2 x3 M y3 GIN x1 GIN x2 GIN x3 指定产品件数为整数 BIN y1 BIN y2 BIN y3 指定0 1变量 end 最大值为Z 200元 例7 某企业和用户签定了设备交货合同 已知该 企业各季度的生产能力 每台设备的生产成本和每 季度末的交货量见下表 若生产出的设备当季度不 交货 每台设备每季度需要支付保管费0 1万元 试 问在遵守合同的条件下 企业应如何安排生产计划 才能使年消耗费用最低 解法1 LINGO程序如下 MODEL SETS QUART 1 4 x y p d c ENDSETSDATA 指定数据 p 25 35 30 20 d 15 20 25 20 c 12 0 11 0 11 5 12 5 ENDDATAmin sum QUART i c i x i 0 1 y i 目标函数 FOR QUART i x i p i 生产能力限制 FOR QUART i i GT 1 y i y i 1 x i d i y 1 x 1 d 1 end 得到的结果如下 x1 15 x2 35 x3 30 x4 0 y1 0 y2 15 y3 20 y4 0 年消耗最小费用为913 5万元 解法2 下面条件 根据交货量的规定 应满足如下条件 其值如下表 则该模型表示如下 LINGO程序如下 MODEL SETS QUART 1 4 p d LINK QUART QUART End 得到的结果如下 年消耗最小费用为913 5万元 为0台 与前面方法得到的结果一样 其最小费用也 可以看出 第1季度生产量为15台 第2季度生产 量为35台 第3季度生产量为30台 第4季度生产量 一样 例8 旅行售货商问题 TSP问题 设有一个售货员从10个城市中的某一个城市出发 去其它9个城市推销产品 10个城市相互距离如下表 要求每个城市到达一次仅一次后 回到原出发城市 回到原出发城市 问他应如何选择旅行路线 使总路 程最短 用来表示经过的各城市之间的路线 设 则该TSP问题转化为如下线性模型 LINGO程序如下 TSPquesion MODEL SETS city 1 10 link city city ENDDATA MIN SUM link d s SUM city j j GT 1 S j 1 2 与第1个城市相连的有两个城市 与第i个城市相连有两个城市 FOR city i i GT 1 SUM city j j GT i s j i SUM city k k LT i s i k 2 FOR link BIN s 其最短路线为1 4 3 3 7 5 6 8 10 9 1 最短距离为77公里 得到的结果如下 优缺点分析 该方法将TSP问题求解化为线性规划 采用 LINGO软件求解 优点是求解速度极快 缺点是可 能会形成一些子圈 无法真正得到最优解 解法二 各城市之间的路线 设 考虑每个城市后只有一个城市 则 考虑每个城市前只有一个城市 则 但仅以上约束条件不能避免在一次遍历中产生多于 一个互不连通回路 充分约束条件 于是我们可以得到如下的模型 LINGO程序 TSPque

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论