第四章 数学规划模型 课程内容和目的: 了解数学规划模型的一般理论,介绍一些典型的规划模型,如生产计划安排问题、资源配置问题、运输问题、下料问题、指派问题、选址问题等。能通过分析建立一些实际问题的数学规划模型,会用各种工具软件熟练求解线性规划,非线性规划,整数规划等问题。 教学难点和重点: 重点掌握规划模型的三要素,建立规划模型的方法以及工具求解。难点是模型求解算法的理解和如何将实际问题逐步转换成规划问题。

Slides:



Advertisements
Similar presentations
2.5 微分及其应用. 三、可微的条件 一、问题的提出 二、微分的定义 六、微分的形式不变性 四、微分的几何意义 五、微分的求法 八、小结 七、微分在近似计算中的应用.
Advertisements

遥远而神秘的大陆 —— 非洲, 有着悠久的历史,辽阔的地域、 奇特的风景和古朴的民俗;更 有那极具感染力、热情奔放的 音乐和舞蹈。 让我们一起走进非洲,去 聆听、感受和体验那具有独 特魅力的非洲歌舞音乐! 非洲正以其独特的、近乎原汁原味的风光和文化吸 引着全世界的目光, 也吸引了你我的目光。
管理运筹学 -管理科学方法 谢家平 博士 教授 博士生导师 研究领域:管理科学、运营管理、供应链管理
无锡商业职业技术学院 机电工程学院党总支孙蓓雄
线性规划 ——建模与求解.
全面了解入党程序 认真履行入党手续 第一讲 主讲人:陈亭而.
中共湖北大学知行学院委员会党校 入党材料规范填写指导 学工处 李华琼 二〇一三年十二月.
云南财经大学2010年党员发展培训—— 党员发展工作培训 校党委组织部 2010年9月17日.
成品成本计算 鞠传英.
地方預算執行規範介紹 行政院主計總處公務預算處何視察蓓 地方歲計人員研習班第17期 102年3月
第7课 一元二次方程 要点梳理   1.定义: 只含有一个未知数,并且未知数的最高次数是2,这样的整式方程叫做一元二次方程.通常可写成如下的 一般形式: (a、b、c是已知数,a≠0) , 其中a、b、c分别叫做二次项系数、一次项系数和常数项. 2.解法:
医师变更执业注册申请审核表 填写说明 医务部.
《老年人权益保障》 --以婚姻法.继承法为视角
TSP问题及LINGO求解技巧.
XXXXXX系统产业化及市场推广 项目介绍
經濟部工業局 產業升級創新平台輔導計畫 (創新優化計畫)
课题研究报告的撰写.
归档文件整理规则 & 机关文件材料归档范围及文书档案保管期限规定 2015年4月 市档案局 业务指导科 刘薇
中国人事科学院学术咨询中心 主任 甄源泰 研究员
几种常见应用文体示例.
免 疫 与 计 划 免 疫 东平县实验中学 纪涛.
作業研究 高孔廉 & 張緯良 著.
公 文 写 作 第一讲 主讲教师:娄淑华          学时:32.
第八章 诉讼法 第一节 诉讼法概述 第二节 民事诉讼法 第三节 行政诉讼法 第四节 刑事诉讼法.
XXX 2015年年度工作计划.
建设工程档案编制组卷范例 北京市城建档案馆.
能源监察简介 宁波市节能监察中心
通 知 通知是批转下级机关的公文,转发上级机关和不相隶属机关的公文,传达要求下级机关办理和需要有关单位周知或执行的事项,任免人员时使用的公文。
OO市OO區OO國小─校園防災地圖(OO災害)
数学建模与创新 新疆大学数学与系统科学学院 吴黎军.
优化模型 教学目的: 初步认识优化模型的基本形式及掌握线性规划模型的建模及求解。 通过实例建模并求解,熟练掌握一些数学软件的使用。
扁平化精美IT工作实施规划.
线性规划应用案例一 配矿计划编制.
运筹学 线性整数规划 2018/12/7.
第五章 线性规划 线性规划模型 线性规划的图解 单纯形法原理 单纯形法 单纯形表 单纯形的理论分析 人工变量法.
對偶理論 「敏感度分析」,研究數學規劃問題中參數值(如各類係數)的改變對於最佳解以及目標函數值的影響。
PPT模板使用说明 既有的文本框都可以插入您需要填写的内容,已经写有文字的部分也 可以选中修改。
运 筹 学 第八章 整 数 规 划.
第四章 数学规划模型 4.1 奶制品的生产与销售 4.2 自来水输送与货机装运 4.3 汽车生产与原油采购 4.4 接力队选拔和选课策略
数据、模型与决策 汕头大学商学院 林佳丽.
集中保管有價證券 提存帳簿劃撥作業介紹 (代庫銀行版)
我们的使命 通过xxxxxxx 达到减少二氧化碳排放的目的, 减缓全球气候变暖,改善人类的生活环境。 我们为您提供xxxxx自多年的积累
2 1 金万维大会 企业信息化垂直B2B 将是传统IT领域的下一亮点吗?.
PPT模板使用说明 既有的文本框都可以插入您需要填写的内容,已经写有文字的部分也 可以选中修改。
GHANGDONG VOCATIONAL COLLEGE OF INDUSTRY&COMMERCE
有效的運用組織資源 Linear Programming (Goal Programming)
导数的应用 ——函数的单调性与极值.
作業研究 第五章 運輸與指派問題 林吉仁 著 高立圖書公司出版.
第3章 LP的对偶问题与灵敏度分析 §1 原问题与对偶问题 §2 对偶问题基本性质 §3 对偶单纯形法 §4 灵敏度分析.
赵 彤 运筹学模型与软件实践 Models and Software Practice of the Operations Research 赵 彤
認識多項式 1 多項式的加法 2 多項式的減法
7 5. 分離係數法: 將直式運算中的係數和文字符號分離, 只寫出係數的記錄方式。 在寫出係數時,遇到缺項,一定要補 0 。
判別下列何者是 x 的多項式。以「○」表示是x的多項式,「×」表示不是 x的多項式 :
线性规划应用案例: 养鸡场的配料问题.
線性規劃模式 Linear Programming Models
统筹安排   成本最低.
中国科学院南海海洋研究所 国际合作管理系统 用户操作手册
四川农业大学 第二十二期团校课程 第四讲:校团委日常公文与写作 主讲人:刘瀛锴.
Transportation Problem
主标题 副标题 日期.
线性规划案例:上海红星建筑构配件厂生产计划的优化分析
统筹安排   成本最低.
第3章 运 输 问 题 3 内容提要  运输问题模型的特点  产销平衡运输问题的表上作业法  产销不平衡运输问题的转化
電的使用.
59.4cm 標題 56.0cm 14.0cm 41.0cm 防災資訊 66.0cm 68.0cm 主題圖 84.1cm 56.0cm
第四章、线性规划在工商管理中的应用 已经掌握: 1. 线性规划的图解法,对线性规划的求解及灵敏度分析的基本概念、基本原理;
第三章 线性规划问题的计算机求解.
Xxxxx市xxxxxxxx有限公司.
在下列空格中,填入適當的式子: (1)(-3x)‧9x=__________ -27x2 (2)(3x2)2 =__________
8的乘法口诀 导入 新授 练习.
Presentation transcript:

第四章 数学规划模型 课程内容和目的: 了解数学规划模型的一般理论,介绍一些典型的规划模型,如生产计划安排问题、资源配置问题、运输问题、下料问题、指派问题、选址问题等。能通过分析建立一些实际问题的数学规划模型,会用各种工具软件熟练求解线性规划,非线性规划,整数规划等问题。 教学难点和重点: 重点掌握规划模型的三要素,建立规划模型的方法以及工具求解。难点是模型求解算法的理解和如何将实际问题逐步转换成规划问题。 课程学时:10学时

数学规划模型 实际问题中 的优化模型 gi(x)0~约束条件 x~决策变量 f(x)~目标函数 决策变量个数n和 约束条件个数m较大 线性规划 非线性规划 整数规划 多元函数条件极值 最优解在可行域 的边界上取得 重点在模型的建立和结果的分析

4.1 线性规划模型 线性规划(LP)研究的实际问题多种多样的,它在工农业生产、经济管理、优化设计与控制等领域都有广泛应用。如资源分配问题、生产计划问题、物资运输问题、合理下料问题、库存问题、劳动力安排问题、最优设计问题等等。线性规划模型的求解方法目前仍以单纯形法为主要方法,该方法于1947年由美国数学家丹茨格(G.B.Dantzig)提出,经过60多年的发展完善,已经形成比较成熟的算法,同时配合计算机技术的广泛应用使得该方法得到空前的普及应用。目前,大多数数学软件都可以求解一般线性规划模型,这一节主要采用Matlab和Lindo软件。

案例1:奶制品的生产与销售 例1 加工奶制品的生产计划 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 例1 加工奶制品的生产计划 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 每天: 50桶牛奶 时间480小时 至多加工100公斤A1 制订生产计划,使每天获利最大 35元可买到1桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元? A1的获利增加到 30元/公斤,应否改变生产计划?

1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 50桶牛奶 每天 时间480小时 至多加工100公斤A1 决策变量 x1桶牛奶生产A1 x2桶牛奶生产A2 获利 24×3x1 获利 16×4 x2 目标函数 每天获利 线性规划模型(LP) 原料供应 劳动时间 约束条件 加工能力 非负约束

模型求解 图解法 约束条件 目标函数 z=c (常数) ~等值线 在B(20,30)点得到最优解 最优解一定在凸多边形的某个顶点取得。 x1 A B C D 约束条件 l1 l2 l3 l4 l5 Z=3600 Z=2400 c Z=0 目标函数 z=c (常数) ~等值线 在B(20,30)点得到最优解 目标函数和约束条件是线性函数 最优解一定在凸多边形的某个顶点取得。 可行域为直线段围成的凸多边形 目标函数的等值线为直线

Lindo6.1启动界面

模型求解 软件实现 LINDO 6.1 20桶牛奶生产A1, 30桶生产A2,利润3360元。 max 72x1+64x2 st end OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 2 DO RANGE (SENSITIVITY) ANALYSIS? No 20桶牛奶生产A1, 30桶生产A2,利润3360元。

结果解释 “资源” 剩余为零的约束为紧约束(有效约束) max 72x1+64x2 st 2)x1+x2<50 OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 2 max 72x1+64x2 st 2)x1+x2<50 3)12x1+8x2<480 4)3x1<100 end 三种资源 原料无剩余 时间无剩余 加工能力剩余40 “资源” 剩余为零的约束为紧约束(有效约束)

最优解下“资源”增加1单位时“效益”的增量 OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 2 结果解释 最优解下“资源”增加1单位时“效益”的增量 影子价格 原料增加1单位, 利润增长48 时间增加1单位, 利润增长2 加工能力增长不影响利润 35 <48, 应该买! 35元可买到1桶牛奶,要买吗? 聘用临时工人付出的工资最多每小时几元? 2元!

不变! A1获利增加到 30元/千克,应否改变生产计划 Yes 最优解不变时目标函数系数允许变化范围 (约束条件不变) DO RANGE(SENSITIVITY) ANALYSIS? Yes 最优解不变时目标函数系数允许变化范围 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000 (约束条件不变) x1系数范围(64,96) x2系数范围(48,72) x1系数由24 3=72增加为303=90,在允许范围内 不变! A1获利增加到 30元/千克,应否改变生产计划

结果解释 35元可买到1桶牛奶,每天最多买多少? 最多买10桶! 影子价格有意义时约束右端的允许变化范围 (目标函数不变) 原料最多增加10 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000 原料最多增加10 时间最多增加53 35元可买到1桶牛奶,每天最多买多少? 最多买10桶!

例2 奶制品的生产销售计划 在例1基础上深加工 50桶牛奶, 480小时 至多100公斤A1 制订生产计划,使每天净利润最大 例2 奶制品的生产销售计划 在例1基础上深加工 1桶牛奶 3千克A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 0.8千克B1 2小时,3元 1千克 获利44元/千克 0.75千克B2 2小时,3元 1千克 获利32元/千克 50桶牛奶, 480小时 至多100公斤A1 制订生产计划,使每天净利润最大 30元可增加1桶牛奶,3元可增加1小时时间,应否投资?现投资150元,可赚回多少? B1,B2的获利经常有10%的波动,对计划有无影响?

决策变量 目标函数 约束条件 1桶牛奶 3千克 A1 12小时 8小时 4千克 A2 或 获利24元/千克 获利16元/kg 0.8千克 B1 2小时,3元 1千克 获利44元/千克 0.75千克 B2 获利32元/千克 决策变量 出售x1 千克 A1, x2 千克 A2, x3千克 B1, x4千克 B2 x5千克 A1加工B1, x6千克 A2加工B2 目标函数 利润 原料供应 加工能力 约束条件 附加约束 劳动时间 非负约束

模型求解 软件实现 LINDO 6.1 DO RANGE (SENSITIVITY) ANALYSIS? No OBJECTIVE FUNCTION VALUE 1) 3460.800 VARIABLE VALUE REDUCED COST X1 0.000000 1.680000 X2 168.000000 0.000000 X3 19.200001 0.000000 X4 0.000000 0.000000 X5 24.000000 0.000000 X6 0.000000 1.520000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 3.160000 3) 0.000000 3.260000 4) 76.000000 0.000000 5) 0.000000 44.000000 6) 0.000000 32.000000 NO. ITERATIONS= 2 软件实现 LINDO 6.1 DO RANGE (SENSITIVITY) ANALYSIS? No

结果解释 每天销售168 千克A2和19.2 千克B1, 利润3460.8(元) 8桶牛奶加工成A1,42桶牛奶加工成A2, OBJECTIVE FUNCTION VALUE 1) 3460.800 VARIABLE VALUE REDUCED COST X1 0.000000 1.680000 X2 168.000000 0.000000 X3 19.200001 0.000000 X4 0.000000 0.000000 X5 24.000000 0.000000 X6 0.000000 1.520000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 3.160000 3) 0.000000 3.260000 4) 76.000000 0.000000 5) 0.000000 44.000000 6) 0.000000 32.000000 NO. ITERATIONS= 2 结果解释 每天销售168 千克A2和19.2 千克B1, 利润3460.8(元) 8桶牛奶加工成A1,42桶牛奶加工成A2, 将得到的24千克A1全部加工成B1 除加工能力外均为紧约束

结果解释 30元可增加1桶牛奶,3元可增加1小时时间,应否投资?现投资150元,可赚回多少? OBJECTIVE FUNCTION VALUE 1) 3460.800 VARIABLE VALUE REDUCED COST X1 0.000000 1.680000 X2 168.000000 0.000000 X3 19.200001 0.000000 X4 0.000000 0.000000 X5 24.000000 0.000000 X6 0.000000 1.520000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 3.160000 3) 0.000000 3.260000 4) 76.000000 0.000000 5) 0.000000 44.000000 6) 0.000000 32.000000 增加1桶牛奶使利润增长3.16×12=37.92 增加1小时时间使利润增长3.26 投资150元增加5桶牛奶,可赚回189.6元。(大于增加时间的利润增长)

生产计划应重新制订:如将x3的系数改为39.6计算,会发现结果有很大变化。 结果解释 B1,B2的获利有10%的波动,对计划有无影响 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 24.000000 1.680000 INFINITY X2 16.000000 8.150000 2.100000 X3 44.000000 19.750002 3.166667 X4 32.000000 2.026667 INFINITY X5 -3.000000 15.800000 2.533334 X6 -3.000000 1.520000 INFINITY …… …… DO RANGE (SENSITIVITY) ANALYSIS? Yes B1获利下降10%,超出X3 系数允许范围 B2获利上升10%,超出X4 系数允许范围 波动对计划有影响 生产计划应重新制订:如将x3的系数改为39.6计算,会发现结果有很大变化。

案例2:食谱问题 每种蔬菜含有的营养素成份是不同的,从医学上知道每人每周对每种营养成分的最低需求量以及各种蔬菜所含各种营养成分的数据。某医院营养室在制定下一周菜单时,需要确定表1中所列8种蔬菜的供应量,以便使费用最小而又能满足营养素等其它方面的要求。规定小白菜、豆芽的供应一周内不多于20千克,胡萝卜供应一周内不低于10千克,不高于35千克,其它蔬菜的供应在一周内不多于30千克,每周共需供应150千克蔬菜,为了使费用最小又满足营养成分等其它方面的要求,问在下一周内应当如何合理的安排食谱?

成份 表1 各种蔬菜的营养成分表 蔬菜 热量(卡) 水分(克) 维生素A(IU) 维生素C(毫克) 钾 (毫克) 纤维(克) 市场单价 表1 各种蔬菜的营养成分表 成份 蔬菜 热量(卡) 水分(克) 维生素A(IU) 维生素C(毫克) 钾 (毫克) 纤维(克) 市场单价 (元/千克) 小白菜 13 95.7 781 40.0 240 1.8 2 菠 菜 22 93.0 2106 9.0 460 2.4 4 胡萝卜 38 89.7 5100 4.0 290 2.6 5 小黄瓜 17 95.2 93 90 0.9 3 豆 芽 33 90.6 183.6 190 1.7 6 玉 米 111 74.2 8 6.0 4.6 7 香 菇 40 88.5 0.2 280 3.9 12 蕃 茄 26 92.9 278 21.0 210 1.2 人体最低需求量/周 12000 (卡) 17500 (克) 24500 (IU) 420 2100(毫克) 175 备注:此表为100克蔬菜所含的营养成分,IU表示国际单位

模型建立 决策变量:设xi(i=1,…,8)分别表示在下一周内应当供应的小白菜、 菠菜、胡萝卜、小黄瓜、豆芽、玉米、香菇及蕃茄的量(千克)。 费用的目标函数为: 根据人体每周对各种营养成分的需求量,可以得到如下 需求约束: 。

模型建立 需要注意的是,表中数据是每100克食物中所含营养成分的的量,而变量是以千克为单位,所以数据要作适当的转化处理,这里很明显就是各式两边除以10即可。 食物总供应量限制: 另外对食物需求的上限和下限有如下约束: 小白菜、豆芽的供应一周内不多于20千克,胡萝卜不低于10千克,不高于35千克,其它蔬菜的不多于30千克,每周共需供应150千克蔬菜

模型建立 食谱搭配问题的线性规划模型

模型求解 : min 2x1+4x2+5x3+3x4+6x5+7x6+12x7+6x8 st end 模型求解 在Lindo6.1中输入如下程序语句 :

结果分析 运行后得到如下结果: LP OPTIMUM FOUND AT STEP 22 OBJECTIVE FUNCTION VALUE 1) 635.0000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 X3 35.000000 0.000000 X4 30.000000 0.000000 X5 5.000000 0.000000 X6 0.000000 1.000000 X7 0.000000 6.000000 X8 30.000000 0.000000 小白菜 菠菜 胡萝卜 小黄瓜 豆芽 玉米 香菇 蕃茄 可见最佳的食物搭配方案为一周安排20千克小白菜,30千克菠菜,35千克胡萝卜,30千克小黄瓜,5千克豆芽和30千克蕃茄,方案最小费用为635元。

结果分析 ROW SLACK OR SURPLUS DUAL RICES 2) 2505.000000 0.000000 2) 2505.000000 0.000000 3) 12189.500000 0.000000 4) 265980.000000 0.000000 5) 2836.000000 0.000000 6) 38490.000000 0.000000 7) 253.000000 0.000000 8) 0.000000 -6.000000 9) 0.000000 4.000000 10) 15.000000 0.000000 11) 25.000000 0.000000 12) 0.000000 1.000000 13) 0.000000 2.000000 14) 0.000000 3.000000 15) 30.000000 0.000000 16) 30.000000 0.000000 17) 0.000000 0.000000 NO. ITERATIONS= 22 结果分析 可见最佳的食物搭配方案为一周安排20千克小白菜,30千克菠菜,35千克胡萝卜,30千克小黄瓜,5千克豆芽和30千克蕃茄,方案最小费用为635元。 x1<20 x5<20 x3>10 x3<35 x2<30 x4<30 x6<30 x7<30 x8<30 小白菜 豆芽 胡萝卜 小黄瓜 菠菜 玉米 香菇 蕃茄

MATLAB优化工具箱解数学规划 (一)线性规划 min z=cX 1、模型: 命令:x=linprog(c,A,b) 命令:x=linprog(c,A,b,Aeq,beq) 注意:若没有不等式: 存在,则令A=[ ],b=[ ].

3、模型:min z=cX VLB≤X≤VUB 命令:[1] x=linprog(c,A,b,Aeq,beq, VLB,VUB) [2] x=linprog(c,A,b,Aeq,beq, VLB,VUB, X0) 注意:[1] 若没有等式约束: , 则令Aeq=[ ], beq=[ ]. [2]其中X0表示初始点 4、命令:[x,fval]=linprog(…) 返回最优解x及x处的目标函数值fval。

Matlab求解 clear f=[2 4 5 3 6 7 12 6]; A=-[13 22 38 17 33 111 40 26; 95.7 93 89.7 95.2 90.6 74.2 88.5 92.9; 781 2106 5100 93 0 8 0 278; 40 9 4 4 183.6 6 0.2 21; 240 460 290 90 190 240 280 210; 1.8 2.4 2.6 0.9 1.7 4.6 3.9 1.2]; b=-[1200 1750 2450 42 210 17.5]'; aeq=[1 1 1 1 1 1 1 1]; beq=[150]; vlb =[0 0 10 0 0 0 0 0]'; vub=[20 30 35 30 20 30 30 30]'; [x,fval,exitflag,output]=linprog(f,A,b,aeq,beq,vlb,vub)

Lindo6.1求解结果 Optimization terminated successfully. x = 20.0000 30.0000 35.0000 17.6611 0.0000 17.3389 fval = 635.0000 exitflag = 1 output = iterations: 19 cgiterations: 0 algorithm: 'lipsol' X1 20.000000 X2 30.000000 X3 35.000000 X4 30.000000 X5 5.000000 X6 0.000000 X7 0.000000 X8 30.000000 Lindo6.1求解结果 豆芽 番茄

两种软件对比 1.最优解不同 2.代码输入方式不同 3.其他区别 对比用Matlab和Lindo求解的结果发现两个最优解不一样,主要是豆芽和蕃茄的量不一样,但最优值是一致的。导致这种结果的原因是不同软件使用算法的细节上有差异(初值,基变量选择),这从两个软件求解过程迭代的次数不同可见,同时由于线性规划问题可能存在多个最优解,而一般情况下软件只能给出一个解,这就使得不同软件求出的最优解可能具有算法上或精度上的差异。 2.代码输入方式不同 两种软件求解线性规划问题在格式上也有很大差别,Lindo语句在形式上和模型具有较大的相似性,使得输入比较直观,但如果约束条件多,变量多,可能程序会很罗嗦冗长,而Matlab所有数据需用矩阵形式输入,形式比较简单紧凑,也易于修改,但开始需要对模型进行变形整理,化成标准形式。 3.其他区别 灵敏度分析、整数规划求解等等。

一般的食谱问题可以描述为: 有n种食物,每种食物含有m种营养成分。如果用aij表示一个单位的第j种食物含有第i种营养成分的数量,用bi表示每个人每天对第i种营养成分的需求量,用cj表示第j种食物的市场单价,而xj表示第j种食物的消耗量,则满足各种营养成分需求量同时又使食物总成本最低的食物搭配模型为:

运输问题(Transportation Problem) 案例3:自来水输送与货机装运问题 运输问题(Transportation Problem) 生产、生活物资从若干供应点运送到一些需求点,怎样安排输送方案使运费最小,或利润最大; 各种类型的货物装箱,由于受体积、重量等限制,如何搭配装载,使获利最高,或装箱数量最少。

例1 自来水输送 收入:900元/千吨 支出 引水管理费 其他费用:450元/千吨 应如何分配水库供水量,公司才能获利最多? A:50 B:60 C:50 甲:30;50 乙:70;70 丙:10;20 丁:10;40 水库供水量(千吨) 小区基本用水量(千吨) 小区额外用水量(千吨) (以天计) 例1 自来水输送 收入:900元/千吨 元/千吨 甲 乙 丙 丁 A 160 130 220 170 B 140 190 150 C 200 230 / 支出 引水管理费 其他费用:450元/千吨 应如何分配水库供水量,公司才能获利最多? 若水库供水量都提高一倍,公司利润可增加到多少?

问题分析 总供水量:160 < 总需求量:120+180=300 收入:900元/千吨 总收入900160=144,000(元) A:50 B:60 C:50 甲:30;50 乙:70;70 丙:10;20 丁:10;40 问题分析 总供水量:160 < 总需求量:120+180=300 收入:900元/千吨 总收入900160=144,000(元) 支出 引水管理费 其他费用:450元/千吨 其他支出450160=72,000(元) 确定送水方案使利润最大 使引水管理费最小

模型建立 确定3个水库向4个小区的供水量 决策变量 水库i 向j 区的日供水量为 xij(x34=0) 目标函数 供应限制 线性规划模型(LP) 约束条件 需求限制

模型求解 引水管理费 24400(元) 利润=总收入-其它费用-引水管理费=144000-72000-24400 = 47600(元) OBJECTIVE FUNCTION VALUE 1) 24400.00 VARIABLE VALUE REDUCED COST X11 0.000000 30.000000 X12 50.000000 0.000000 X13 0.000000 50.000000 X14 0.000000 20.000000 X21 0.000000 10.000000 X22 50.000000 0.000000 X23 0.000000 20.000000 X24 10.000000 0.000000 X31 40.000000 0.000000 X32 0.000000 10.000000 X33 10.000000 0.000000 A(50) B(60) C(50) 甲(30;50) 乙(70;70) 丙(10;20) 丁(10;40) 50 40 10 引水管理费 24400(元) 利润=总收入-其它费用-引水管理费=144000-72000-24400 = 47600(元)

问题讨论 每个水库最大供水量都提高一倍 总供水量(320) > 总需求量(300) 确定送水方案使利润最大 利润 = 收入(900) –其它费用(450) –引水管理费 利润(元/千吨) 甲 乙 丙 丁 A 290 320 230 280 B 310 260 300 C 250 220 / 目标函数 供应限制 B, C 类似处理 需求约束可以不变

求解 总利润 88700(元) A(100) B(120) C(100) 甲(30;50) 乙(70;70) 丙(10;20) OBJECTIVE FUNCTION VALUE 1) 88700.00 VARIABLE VALUE REDUCED COST X11 0.000000 20.000000 X12 100.000000 0.000000 X13 0.000000 40.000000 X14 0.000000 20.000000 X21 30.000000 0.000000 X22 40.000000 0.000000 X23 0.000000 10.000000 X24 50.000000 0.000000 X31 50.000000 0.000000 X32 0.000000 20.000000 X33 30.000000 0.000000 求解 A(100) B(120) C(100) 甲(30;50) 乙(70;70) 丙(10;20) 丁(10;40) 40 100 50 30 总利润 88700(元)

例2 货机装运 前仓: 10;6800 中仓: 16;8700 后仓: 8;5300 飞机平衡 三个货舱中实际载重必须与其最大载重成比例 例2 货机装运 三个货舱最大载重(吨),最大容积(米3) 前仓: 10;6800 中仓: 16;8700 后仓: 8;5300 飞机平衡 三个货舱中实际载重必须与其最大载重成比例   重量(吨) 空间( 米3/吨) 利润(元/吨) 货物1 18 480 3100 货物2 15 650 3800 货物3 23 580 3500 货物4 12 390 2850 如何装运,使本次飞行获利最大?

模型假设 货机装运 模型建立 每种货物可以分割到任意小; 每种货物可以在一个或多个货舱中任意分布; 多种货物可以混装,并保证不留空隙; xij--第i 种货物装入第j 个货舱的重量(吨) i=1,2,3,4, j=1,2,3 (分别代表前、中、后仓) 决策变量

货机装运 模型建立 xij--第i 种货物装入第j 个货舱的重量 目标函数(利润) 货舱重量 约束条件 货舱容积 10;6800 16;8700 8;5300 约束条件 货舱容积

货机装运 模型建立 xij--第i 种货物装入第j 个货舱的重量 10;6800 16;8700 8;5300 平衡要求 约束条件 货物供应

货机装运 模型求解 货物2:前仓10,后仓5; 货物3: 中仓13, 后仓3;货物4: 中仓3。 最大利润约121516元 运输问题 OBJECTIVE FUNCTION VALUE 1) 121515.8 VARIABLE VALUE REDUCED COST X11 0.000000 400.000000 X12 0.000000 57.894737 X13 0.000000 400.000000 X21 10.000000 0.000000 X22 0.000000 239.473679 X23 5.000000 0.000000 X31 0.000000 0.000000 X32 12.947369 0.000000 X33 3.000000 0.000000 X41 0.000000 650.000000 X42 3.052632 0.000000 X43 0.000000 650.000000 货物2:前仓10,后仓5; 货物3: 中仓13, 后仓3;货物4: 中仓3。 最大利润约121516元 运输问题 货物~供应点 货舱~需求点 平衡要求 运输问题的扩展

4.2 整数规划模型 实际问题中经常遇到货物是不可分割的,如人,动物,整体装配的设备等,这时候除了题目本身的约束外,还要加上决策变量的整数约束,这就是这节要介绍的整数规划问题(Integer Programing )。 整数规划又可分为线性整数规划和非线性整数规划,这一节只介绍整线性规划。整数线性规划中如果所有决策变量都是整数,则称为纯整数规划;若只有部分变量为整数,则称为混合整数规划;若决策变量只能取0或1,则称为0-1规划。 求解整数规划的算法主要是分枝定界法和割平面法,这两种方法都是以求解线性规划的方法为基础。而0-1规划的求解使用隐枚举法,它不需要用单纯形法先求解线性规划,而是依次检查变量等于0或1的某种组合,以便使目前最好的可行解不断加以改进,最终获得最优解。 整数规划的求解主要使用Lindo和Lingo软件。

案例4:汽车生产计划制定 汽车厂生产三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需求,利润及工厂每月的现有量。 小型 中型 大型 现有量 钢材(吨) 1.5 3 5 600 劳动时间(小时) 280 250 400 60000 利润(万元) 2 3 4 制订月生产计划,使工厂的利润最大。 如果生产某一类型汽车,则至少要生产80辆, 那么最优的生产计划应作何改变?

汽车厂生产计划 模型建立 设每月生产小、中、大型汽车的数量分别为x1, x2, x3 线性规划模型(LP) 小型 中型 大型 现有量 小型 中型 大型 现有量 钢材 1.5 3 5 600 时间 280 250 400 60000 利润 2 3 4 设每月生产小、中、大型汽车的数量分别为x1, x2, x3 线性规划模型(LP)

模型求解 结果为小数,怎么办? 1)舍去小数:取x1=64,x2=167,算出目标函数值z=629,与LP最优值632.2581相差不大。 OBJECTIVE FUNCTION VALUE 1) 632.2581 VARIABLE VALUE REDUCED COST X1 64.516129 0.000000 X2 167.741928 0.000000 X3 0.000000 0.946237 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 0.731183 3) 0.000000 0.003226 结果为小数,怎么办? 1)舍去小数:取x1=64,x2=167,算出目标函数值z=629,与LP最优值632.2581相差不大。 2)试探:如取x1=65,x2=167;x1=64,x2=168等,计算函数值z,通过比较可能得到更优的解。 但必须检验它们是否满足约束条件。为什么? 3) 模型中增加条件:x1, x2, x3 均为整数,重新求解。

整数规划(Integer Programming,简记IP) 模型求解 IP可用LINDO直接求解 max 2x1+3x2+4x3 st 1.5x1+3x2+5x3<600 280x1+250x2+400x3<60000 end gin 3 IP 结果输出 OBJECTIVE FUNCTION VALUE 1) 632.0000 VARIABLE VALUE REDUCED COST X1 64.000000 -2.000000 X2 168.000000 -3.000000 X3 0.000000 -4.000000 “gin 3”表示“前3个变量为整数”,等价于: gin x1 gin x2 gin x3 IP 的最优解x1=64,x2=168,x3=0,最优值z=632

汽车厂生产计划    若生产某类汽车,则至少生产80辆,求生产计划。 x1,x2,, x3=0 或 80 方法1:分解为8个LP子模型 其中3个子模型应去掉,然后逐一求解,比较目标函数值,再加上整数约束,得最优解:   x1=80,x2= 150,x3=0,最优值z=610

若生产某类汽车,则至少生产80辆,求生产计划。 方法2:引入0-1变量,化为整数规划 x1=0 或 80 M为大的正数,可取1000 x2=0 或 80 x3=0 或 80 OBJECTIVE FUNCTION VALUE 1) 610.0000 VARIABLE VALUE REDUCED COST X1 80.000000 -2.000000 X2 150.000000 -3.000000 X3 0.000000 -4.000000 Y1 1.000000 0.000000 Y2 1.000000 0.000000 Y3 0.000000 0.000000 LINDO中对0-1变量的限定: int y1 int y2 int y3 最优解同前

案例5:铁路平板车装货问题 有七种规格的包装箱要装到两辆铁路平板车上去。包装箱的宽和高是一样的,但厚度(t,以厘米计)及重量(w,以公斤计)是不同的。下表给出了每种包装箱的厚度、重量以及数量。下图中每辆平板车有10.2米长的地方可用来装包装箱(象面包片那样),载重为40吨。由于当地货运的限制,对C5,C6,C7类的包装箱的总数有一定的限制:这类箱子所占的空间(厚度)不能超过302.7厘米。试把包装箱装到平板车上去使得浪费的空间最小。 问题描述

七种规格的包装箱参数 问题分析 C1 C2 C3 C4 C5 C6 C7 t厘米 48.7 52.0 61.3 72.0 64.0 W公斤 2000 3000 1000 500 4000 件数 8 7 9 6 4 问题分析 所有包装箱的总重量为89吨,大于两辆平板车的总载重量80,所以只能选择性的装载货物. 浪费空间是指平板车可装车长度10.2m与每辆车所有包装箱厚度总和的差值,可以等效的把浪费空间最小转化成两辆车装车总量最大. 包装箱的重量和厚度受到平板车装载条件的限制以及货物总量的限制.

问题分析 模型假设 货物是不可拆分的,所以这是一个典型的整数线性规划问题. 两辆平板车之间存在相互的制约关系,在考虑一辆平板车时,必须同时考虑第二辆平板车. 对题目中“由于当地货运的限制,对C5,C6,C7类的包装箱的总数有一定的限制:这类箱子所占的空间(厚度)不能超过302.7厘米。”可以理解成每辆车这三类货物的装车总数不超过302.7厘米,也可以是两辆车装载三类货物的总量不超过302.7厘米. 模型假设 1.各个货物之间排列时靠在一起,包装箱之间的空隙不计; 2.装载的过程中不考虑货物在车上的排列次序及各个货物的重量分布,排除因局部过重而造成平板车失衡的情况; 3.铁路平板车只能放置一列包装箱; 4.两辆平板车装载C5,C6,C7三类包装箱的总厚度不超过302.7厘米。

模型建立 决策变量 参数变量 目标函数 约束条件 设xij表示第i辆平板车装载Cj包装箱的件数,i=1,2;j=1,2,…,7. 分别表示包装箱的厚度、单个重量和可供装车的件数. 目标函数 装车总厚度记为T,则目标函数可表示为: 约束条件 各种包装箱可供装车数量的限制: 平板车载重限制: 厚度限制:

模型建立 约束条件 模型求解 两辆车对包装箱C5,C6,C7的特殊限制: 所有决策变量都是整数变量: 该整数规划模型可以利用Lindo和Lingo求解。求解之前注意到 20.4-3.027=17.373m,而前4类货物的总长度恰为17.373m。因此在满 足约束条件的情况下,应尽量将C1~C4四类箱子装完,以保证两辆车 浪费的空间最小。所以在求解时将前四类箱子的数量约束改成等式。

在Lindo6.1中输入程序代码: max 0.487x11+0.52x12+0.613x13+0.72x14+0.487x15+0.52x16+0.64x17 +0.487x21+0.52x22+0.613x23+0.72x24+0.487x25+0.52x26+0.64x27 st x11+x21=8 x12+x22=7 x13+x23=9 x14+x24=6 x15+x25<6 x16+x26<4 x17+x27<8 2x11+3x12+x13+0.5x14+4x15+2x16+x17<40 2x21+3x22+x23+0.5x24+4x25+2x26+x27<40 0.487x11+0.52x12+0.613x13+0.72x14+0.487x15+0.52x16+0.64x17<10.2 0.487x21+0.52x22+0.613x23+0.72x24+0.487x25+0.52x26+0.64x27<10.2 0.487x15+0.52x16+0.64x17+0.487x25+0.52x26+0.64x27<3.027 end gin 14 包装箱可供装车数量的限制 平板车载重限制 厚度限制 特殊限制 整数

OBJECTIVE FUNCTION VALUE VARIABLE VALUE REDUCED COST 计算结果: OBJECTIVE FUNCTION VALUE 1) 20.39400 VARIABLE VALUE REDUCED COST X11 0.000000 -0.487000 X12 7.000000 -0.520000 X13 9.000000 -0.613000 X14 0.000000 -0.720000 X15 0.000000 -0.487000 X16 2.000000 -0.520000 X17 0.000000 -0.640000 X21 8.000000 -0.487000 X22 0.000000 -0.520000 X23 0.000000 -0.613000 X24 6.000000 -0.720000 X25 3.000000 -0.487000 X26 1.000000 -0.520000 X27 0.000000 -0.640000 即最优的装车方案为: x11=0, x12=7, x13=9, x14=0, x15=0, x16=2, x17=0; x21=8, x22= 0, x23=0, x24=6, x25=3, x26=1, x27=0。 最优值为20.394,浪费的空间仅有0.6cm。 此时两辆车装车总长度均为10.197m,装车总重分别为34t和33t,装载C5,C6,C7三类货物总长度分别为1.04m和1.981m。

ROW SLACK OR SURPLUS DUAL PRICES 计算结果: ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 0.000000 3) 0.000000 0.000000 4) 0.000000 0.000000 5) 0.000000 0.000000 6) 3.000000 0.000000 7) 1.000000 0.000000 8) 8.000000 0.000000 9) 6.000000 0.000000 10) 7.000000 0.000000 11) 0.003000 0.000000 12) 0.003000 0.000000 13) 0.006000 0.000000 NO. ITERATIONS= 155747

结果分析 注意:题目中C1与C5,C2与C6厚度相同,导致可能存在多个解。 通过不断求解这种实验方式来体验多个解的存在性! OBJECTIVE FUNCTION VALUE 1) 20.39400 VARIABLE VALUE REDUCED COST X11 6.000000 -0.487000 X12 2.000000 -0.520000 X13 9.000000 -0.613000 X14 1.000000 -0.720000 X15 0.000000 -0.487000 X16 0.000000 -0.520000 X17 0.000000 -0.640000 X21 2.000000 -0.487000 X22 5.000000 -0.520000 X23 0.000000 -0.613000 X24 5.000000 -0.720000 X25 3.000000 -0.487000 X26 3.000000 -0.520000 X27 0.000000 -0.640000 通过不断求解这种实验方式来体验多个解的存在性! 继续求解会得到不同的最优解,而且呈现一定的周期性重复,但最优值都是20.394。其原因就在于模型有多个解,但Lindo一次只能给出一个最优解。 NO. ITERATIONS= 300985

虽然每次求解可能有不同解,但并不是说一直进行下去就会求出所有解。可以利用最优解已知(20.394),通过计算机编程枚举得出如下所有可能解: 第一辆 第二辆 x11 x 12 x 13 x 14 x 15 x 16 x 17 x 21 x 22 x 23 x 24 x 25 x 26 x 27 7 9 2 8 6 3 1 5 4

2 7 4 3 6 5 1 9

结果分析 小结 这30组解中,所有的装车方案都是值得推荐的吗? 现实中还应考虑两辆平板车的载重量、占用空间差别均不应太大。需要进行结果筛选。 每组解中第7种货物都没有选! 该模型的计算量较大,每次迭代次数达到数十万次,寻找改进的、简化的计算方法和技巧是值得我们进一步思考的。如果将两辆车装载后三类货物总厚度不超过302.7cm改成每辆车装载不超过此值,则情况如何? 小结 该问题和自来水输送以及飞机装货问题一样属于运输问题,只不过是运输问题的一种变形,运筹学中通常将这类问题称为背包问题,由于有长度、重量两项约束,所以称为二维背包问题,可以利用数学规划或动态规划求解。 这是88年一道MCM竞赛题,在当时软件还不发达时是有较大难度的!

案例6:人力资源配置问题 问题描述 某城市有一昼夜服务的公交线路,经过长期观察统计,每天各时间区段内需司机和乘务人员总数如下表。 班次 所需人数 1 6:00~10:00 50 2 10:00~14:00 60 3 14:00~18:00 4 18:00~22:00 40 5 22:00~2:00 20 6 2:00~6:00 30 设司机和乘务人员分别在各时间区段一开始时上班,并连续工作八小时,问该公交线路至少配备多少名司机和乘务人员才能满足实际需要?

模型建立 设xi为第i时段所需的人数,由于从第i时段开始上班的人在第i+1时段会继续上班(注意如果i取6,则i+1应取1) 目标函数 班次 时间区段 1 6:00~10:00 2 10:00~14:00 3 14:00~18:00 4 18:00~22:00 5 22:00~2:00 6 2:00~6:00 约束条件

Global optimal solution found. Objective value: 130.0000 模型求解 Lingo程序(方式一): Global optimal solution found. Objective value: 130.0000 Extended solver steps: 0 Total solver iterations: 7 Variable Value Reduced Cost X1 50.00000 1.000000 X2 10.00000 1.000000 X3 40.00000 1.000000 X4 0.000000 1.000000 X5 30.00000 1.000000 X6 0.000000 1.000000 计算结果: 直接输入方式: model: min=x1+x2+x3+x4+x5+x6; x1+x6>50; x1+x2>60; x2+x3>50; x3+x4>40; x4+x5>20; x5+x6>30; @gin(x1);@gin(x2);@gin(x3); @gin(x4);@gin(x5);@gin(x6); end 注意与Lindo的相似性和区别

time/1..6/:required,driver; endsets data: required=60 50 40 20 30 50; 模型求解 Lingo程序(方式二): 编程方式 定义原始集time,6个成员,两个属性 注:在集合循环函数中,当达到集合的最后(或第一个)成员后,可以用@wrap函数把索引转到集合的第一个(或最后一个)成员。 @wrap(i,N)的返回值当i位于区间[1,N]内时返回i,否则返回j=i-k*N,k为整数,且j位于区间[1,N]内。 如@wrap(2,5)返回值为2,@wrap(16,5)返回值为1。在这里的作用是让@wrap(7,6)返回到1。 model: sets: time/1..6/:required,driver; endsets data: required=60 50 40 20 30 50; enddata min=@sum(time:driver); !各时段需求约束; @for(time(i): driver(i)+driver(@wrap(i+1,6))>=required(i)); !各变量整数约束; @for(time:@gin(driver)); end 数据部分

求解结果 Global optimal solution found. Objective value: 130.0000 Extended solver steps: 0 Total solver iterations: 6 Variable Value Reduced Cost REQUIRED( 1) 60.00000 0.000000 REQUIRED( 2) 50.00000 0.000000 REQUIRED( 3) 40.00000 0.000000 REQUIRED( 4) 20.00000 0.000000 REQUIRED( 5) 30.00000 0.000000 REQUIRED( 6) 50.00000 0.000000 DRIVER( 1) 50.00000 1.000000 DRIVER( 2) 10.00000 1.000000 DRIVER( 3) 40.00000 1.000000 DRIVER( 4) 0.000000 1.000000 DRIVER( 5) 30.00000 1.000000 DRIVER( 6) 0.000000 1.000000 即6个班次依次需要的司乘人员数量分别为:x1=50;x2=10;x3=40;x4=0; x5=30;x6=0。 共计至少需要130名司乘人员。

案例7:下料问题 I 原料下料问题 生产中通过切割、剪裁、冲压等手段,将原材料加工成所需大小 按照工艺要求,确定下料方案,使所用材料最省,或利润最大

例1 钢管下料 原料钢管:每根19米 工地需求 4米50根 6米20根 8米15根 问题. 如何下料最节省 ? 节省的标准是什么? 某建筑工地需要一批不同型号的钢管,其中4m的50根,6m的20根,8m的15根。现在从钢管厂进货的原料都是19m的,需要对这些原料进行合理的切割。问怎样切割使得既满足工地需求,又使浪费材料最小? 问题描述 原料钢管:每根19米 工地需求 4米50根 6米20根 8米15根 问题. 如何下料最节省 ? 节省的标准是什么?

钢管下料 切割模式 按照客户需要在一根原料钢管上安排切割的一种组合。 余料1米 4米1根 6米1根 8米1根 余料3米 4米1根 6米1根 合理切割模式的余料应小于客户需要钢管的最小尺寸

为满足客户需要,按照哪些种合理模式,每种模式切割多少根原料钢管,最为节省? 钢管下料问题1 合理切割模式 模式  4米钢管根数 6米钢管根数 8米钢管根数 余料(米) 1 4 3 2 5 6 7 为满足客户需要,按照哪些种合理模式,每种模式切割多少根原料钢管,最为节省? 两种标准 1. 原料钢管剩余总余量最小 2. 所用原料钢管总根数最少

xi ~按第i 种模式切割的原料钢管根数(i=1,2,…7) 决策变量 xi ~按第i 种模式切割的原料钢管根数(i=1,2,…7) 目标1(总余量) 模 式 4米 根数 6米 8米 余 料 1 4 3 2 5 6 7 需 求 50 20 15 约束 满足需求 整数约束: xi 为整数 最优解:x2=12, x5=15, 其余为0; 最优值:27。 按模式2切割12根,按模式5切割15根,余料27米

钢管切割问题的Lingo程序 model: sets: !目标函数(总余量最小) pattern/1..7/:residu,number; type/1..3/:required; link(pattern,type):aa; endsets data: residu=3 1 3 3 1 1 3; required=50 20 15; aa=4 0 0 3 1 0 2 0 1 1 2 0 1 1 1 0 3 0 0 0 2; enddata !目标函数(总余量最小) min=@sum(pattern:residu*number); !工地需求; @for(type(i): @sum(pattern(j): aa(j,i)*number(j))>required(i)); !各变量整数约束; @for(pattern:@gin(number)); end

钢管下料问题1 目标2(总根数) 约束条件不变 xi 为整数 最优解:x2=15, x5=5, x7=5, 其余为0; 最优值:25。 按模式2切割15根,按模式5切割5根,按模式7切割5根,共25根,余料35米 与目标1的结果“共切割27根,余料27米” 相比 虽余料增加8米,但减少了2根 当余料没有用处时,通常以总根数最少为目标

例2 易拉罐下料 板材规格1: 正方形,边长24cm,5万张。 板材规格2: 长方形, 罐身高10cm,上盖、下底直径均5cm。 模式1:1.5秒 模式2:2秒 模式3:1秒 板材规格1: 正方形,边长24cm,5万张。 板材规格2: 长方形, 3228cm, 2万张。 模式4:3秒 上盖 下底 罐 身 罐身高10cm,上盖、下底直径均5cm。 每周工作40小时,每只易拉罐利润0.10元,原料余料损失0.001元 / cm2(不能装配的罐身、盖、底也是余料) 如何安排每周生产?

问题分析 计算各种模式下的余料损失 模式1: 上、下底直径d=5cm,罐身高h=10cm。 正方形 边长24cm 模式1 余料损失 242-10d2/4 - dh=222.6 cm2   罐身个数 底、盖 个数 余料损失 (cm2) 冲压时间(秒) 模式1 1 10 222.6 1.5 模式2 2 4 183.3 模式3 16 261.8 模式4 5 169.5 3

问题分析 模型建立 目标:易拉罐利润扣除原料余料损失后的净利润最大 注意:不能装配的罐身、上下底也是余料 约束:每周工作时间不超过40小时; 原料数量:规格1(模式1 ~3)5万张, 规格2(模式4)2万张; 罐身和底、盖的配套组装 。 模型建立 xi ~ 按照第i 种模式的生产张数(i=1,2,3,4); y1 ~ 一周生产的易拉罐个数; y2 ~ 不配套的罐身个数; y3 ~ 不配套的底、盖个数。 决策变量

模型建立 y1 ~ 易拉罐个数;y2 ~ 不配套的罐身; y3 ~ 不配套的底、盖。 每只易拉罐利润0.10元,余料损失0.001元 / cm2 产量 余料 时间 x1 222.6 1.5 x2 183.3 2 x3 261.8 1 x4 169.5 3 罐身面积dh=157.1 cm2 底盖面积d2/4=19.6 cm2 目标 时间约束 (40小时) 约束条件 原料约束

虽然xi和y1,y2,y3应是整数,但是因生产量很大,可以把它们看成实数,从而用线性规划模型处理 。 约束条件 y1 ~ 易拉罐个数;y2 ~ 不配套的罐身; y3 ~ 不配套的底、盖。 罐身 底、盖 1 10 2 4 16 5 产量 x1 x2 x3 x4 配套约束 虽然xi和y1,y2,y3应是整数,但是因生产量很大,可以把它们看成实数,从而用线性规划模型处理 。

模型求解 LINDO发出警告信息:“数据之间的数量级差别太大,建议进行预处理,缩小数据之间的差别” 将所有决策变量扩大10000倍(xi ~万张,yi ~万件) OBJECTIVE FUNCTION VALUE 1) 0.4298337 VARIABLE VALUE REDUCED COST Y1 16.025000 0.000000 X1 0.000000 0.000050 X2 4.012500 0.000000 X3 0.375000 0.000000 X4 2.000000 0.000000 Y2 0.000000 0.223331 Y3 0.000000 0.036484 模式2生产40125张, 模式3生产3750张, 模式4生产20000张, 共产易拉罐160250个 (罐身和底、盖无剩余), 净利润为4298元

下料问题的建模 确定下料模式 构造优化模型 一维问题(如钢管下料) 规格不太多,可枚举下料模式,建立整数线性规划模型,否则要构造整数非线性规划模型,求解困难,可用缩小可行域的方法进行化简,但要保证最优解的存在。 二维问题(如易拉罐下料) 具体问题具体分析(比较复杂 )

案例8:接力队选拔和选课策略 分派问题 若干项任务分给一些候选人来完成,每人的专长不同,完成每项任务取得的效益或需要的资源就不同,如何分派任务使获得的总效益最大,或付出的总资源最少。 若干种策略供选择,不同的策略得到的收益或付出的成本不同,各个策略之间有相互制约关系,如何在满足一定条件下作出决择,使得收益最大或成本最小。

例1 混合泳接力队的选拔 5名候选人的百米成绩 如何选拔队员组成4100米混合泳接力队? 例1 混合泳接力队的选拔 5名候选人的百米成绩   甲 乙 丙 丁 戊 蝶泳 1’06”8 57”2 1’18” 1’10” 1’07”4 仰泳 1’15”6 1’06” 1’07”8 1’14”2 1’11” 蛙泳 1’27” 1’06”4 1’24”6 1’09”6 1’23”8 自由泳 58”6 53” 59”4 1’02”4 如何选拔队员组成4100米混合泳接力队? 丁的蛙泳成绩退步到1’15”2;戊的自由泳成绩进步到57”5, 组成接力队的方案是否应该调整? 穷举法:组成接力队的方案共有5!=120种。

0-1规划模型 cij(秒)~队员i 第j 种泳姿的百米成绩 若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 目标函数 66.8 57.2 78 70 67.4 j=2 75.6 66 67.8 74.2 71 j=3 87 66.4 84.6 69.6 83.8 j=4 58.6 53 59.4 62.4 若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 目标函数 每人最多入选泳姿之一 每种泳姿有且只有1人 约束条件

模型求解 输入LINDO求解 最优解:x14 = x21 = x32 = x43 = 1, 其它变量为0; 成绩为253.2(秒)=4’13”2 MIN 66.8x11+75.6x12+87x13+58.6x14 +… … +67.4x51+71 x52+83.8x53+62.4x54 SUBJECT TO x11+x12+x13+x14 <=1 … … x41+x42+x43+x44 <=1 x11+x21+x31+x41+x51 =1 x14+x24+x34+x44+x54 =1 END INT 20 甲~ 自由泳、乙~ 蝶泳、丙~ 仰泳、丁~ 蛙泳.   甲 乙 丙 丁 戊 蝶泳 1’06”8 57”2 1’18” 1’10” 1’07”4 仰泳 1’15”6 1’06” 1’07”8 1’14”2 1’11” 蛙泳 1’27” 1’06”4 1’24”6 1’09”6 1’23”8 自由泳 58”6 53” 59”4 1’02”4

讨论 丁蛙泳c43 =69.675.2,戊自由泳c54=62.4  57.5, 方案是否调整? 敏感性分析? IP规划一般没有与LP规划相类似的理论,LINDO输出的敏感性分析结果通常是没有意义的。 c43, c54 的新数据重新输入模型,用LINDO求解 最优解:x21 = x32 = x43 = x51 = 1, 成绩为4’17”7 乙~ 蝶泳、丙~ 仰泳、丁~ 蛙泳、戊~ 自由泳 甲~ 自由泳、乙~ 蝶泳、丙~ 仰泳、丁~ 蛙泳. 原方案 指派(Assignment)问题:每项任务有且只有一人承担,每人只能承担一项,效益不同,怎样分派使总效益最大.

例2 选课策略 要求至少选两门数学课、三门运筹学课和两门计算机课 为了选修课程门数最少,应学习哪些课程 ? 例2 选课策略 课号 课名 学分 所属类别 先修课要求 1 微积分 5 数学   2 线性代数 4 3 最优化方法 数学;运筹学 微积分;线性代数 数据结构 数学;计算机 计算机编程 应用统计 6 计算机模拟 计算机;运筹学 7 计算机 8 预测理论 运筹学 9 数学实验 运筹学;计算机 要求至少选两门数学课、三门运筹学课和两门计算机课 为了选修课程门数最少,应学习哪些课程 ? 选修课程最少,且学分尽量多,应学习哪些课程 ?

0-1规划模型 决策变量 xi=1 ~选修课号i 的课程(xi=0 ~不选) 目标函数 选修课程总数最少 最少2门数学课,3门运筹学课, 课名 所属类别 1 微积分 数学 2 线性代数 3 最优化方法 数学;运筹学 4 数据结构 数学;计算机 5 应用统计 6 计算机模拟 计算机;运筹学 7 计算机编程 计算机 8 预测理论 运筹学 9 数学实验 运筹学;计算机 xi=1 ~选修课号i 的课程(xi=0 ~不选) 目标函数 选修课程总数最少 最少2门数学课,3门运筹学课, 2门计算机课。 约束条件

0-1规划模型 约束条件 先修课程要求 x3=1必有x1 = x2 =1 模型求解(LINDO) 课号 课名 先修课要求 1 微积分   2 线性代数 3 最优化方法 微积分;线性代数 4 数据结构 计算机编程 5 应用统计 6 计算机模拟 7 8 预测理论 9 数学实验 先修课程要求       x3=1必有x1 = x2 =1 模型求解(LINDO) 最优解: x1 = x2 = x3 = x6 = x7 = x9 =1, 其它为0;6门课程,总学分21

讨论:选修课程最少,学分尽量多,应学习哪些课程? 学分最多 两目标(多目标)规划 多目标优化的处理方法:化成单目标优化。 以课程最少为目标,不管学分多少。 最优解如上,6门课程,总学分21 。 以学分最多为目标,不管课程多少。 最优解显然是选修所有9门课程 。

多目标规划 增加约束 , 以学分最多为目标求解。 在课程最少的前提下以学分最多为目标。 增加约束 , 以学分最多为目标求解。 在课程最少的前提下以学分最多为目标。 课号 课名 学分 1 微积分 5 2 线性代数 4 3 最优化方法 数据结构 应用统计 6 计算机模拟 7 计算机编程 8 预测理论 9 数学实验       最优解: x1 = x2 = x3 = x5 = x7 = x9 =1, 其它为0;总学分由21增至22。     注意:最优解不唯一! 可将x9 =1 易为x6 =1 LINDO无法告诉优化问题的解是否唯一。

多目标规划 对学分数和课程数加权形成一个目标,如三七开。 课号 课名 学分 1 微积分 5 2 线性代数 4 3 最优化方法 数据结构 应用统计 6 计算机模拟 7 计算机编程 8 预测理论 9 数学实验     最优解: x1 = x2 = x3 = x4 = x5 = x6 = x7 = x9 =1, 其它为0;总学分28。

多目标规划 讨论与思考 最优解与1=0,2=1的结果相同——学分最多 最优解与1=1,2=0的结果相同——课程最少

案例9:饮料厂的生产与检修 企业生产计划 单阶段生产计划 外部需求和内部资源随时间变化 多阶段生产计划 生产批量问题 考虑与产量无关的固定费用 给优化模型求解带来新的困难

例1 饮料厂的生产与检修计划 某种饮料4周的需求量、生产能力和成本 存贮费:每周每千箱饮料 0.2千元。 周次 需求量(千箱) 生产能力(千箱) 成本(千元/千箱) 1 15 30 5.0 2 25 40 5.1 3 35 45 5.4 4 20 5.5 合计 100 135   存贮费:每周每千箱饮料 0.2千元。 安排生产计划, 满足每周的需求, 使4周总费用最小。 在4周内安排一次设备检修,占用当周15千箱生产能力,能使检修后每周增产5千箱,检修应排在哪一周?

问题分析 模型假设 除第4周外每周的生产能力超过每周的需求; 生产成本逐周上升; 前几周应多生产一些。 饮料厂在第1周开始时没有库存; 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 合计 100 135 成本 5.0 5.1 5.4 5.5   模型假设 饮料厂在第1周开始时没有库存; 从费用最小考虑, 第4周末不能有库存; 周末有库存时需支出一周的存贮费; 每周末的库存量等于下周初的库存量。

模型建立 决策变量 目标函数 约束条件 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 成本 5.0 5.1 5.4 5.5 x1~ x4:第1~4周的生产量 y1~ y3:第1~3周末库存量 存贮费:0.2 (千元/周•千箱) 目标函数 产量、库存与需求平衡 能力限制 约束条件 非负限制

模型求解 LINDO求解 最优解: x1~ x4:15,40,25,20; y1~ y3: 0,15,5 . 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 成本 5.0 5.1 5.4 5.5 产量 库存 5 4周生产计划的总费用为528 (千元)

检修计划 约束条件 能力限制 在4周内安排一次设备检修,占用当周15千箱生产能力,能使检修后每周增产5千箱,检修应排在哪一周? 周次 需求 30 2 25 40 3 35 45 4 20 成本 5.0 5.1 5.4 5.5 检修安排在任一周均可 0-1变量wt :wt=1~ 检修安排在第t周(t=1,2,3,4) 约束条件 能力限制 产量、库存与需求平衡条件不变

检修计划 目标函数不变 0-1变量wt :wt=1~ 检修安排在第t周(t=1,2,3,4) 增加约束条件:检修1次 LINDO求解 最优解: w1=1, w2 , w3, w4=0; x1~ x4:15,45,15,25; y1~ y3:0,20,0 . 总费用由528千元降为527千元 检修所导致的生产能力提高的作用, 需要更长的时间才能得到充分体现。

例2 饮料的生产批量问题 饮料厂使用同一条生产线轮流生产多种饮料。 若某周开工生产某种饮料, 需支出生产准备费8千元。 例2 饮料的生产批量问题 饮料厂使用同一条生产线轮流生产多种饮料。 若某周开工生产某种饮料, 需支出生产准备费8千元。 某种饮料4周的需求量、生产能力和成本 周次 需求量(千箱) 生产能力(千箱) 成本(千元/千箱) 1 15 30 5.0 2 25 40 5.1 3 35 45 5.4 4 20 5.5 合计 100 135   存贮费:每周每千箱饮料 0.2千元。 安排生产计划, 满足每周的需求, 使4周总费用最小。

生产批量问题的一般提法 ct ~时段t 生产费用(元/件); 假设初始库存为0 ht ~时段t (末)库存费(元/件); st ~时段t 生产准备费(元); dt ~时段t 市场需求(件); Mt ~时段t 生产能力(件)。 假设初始库存为0 制订生产计划, 满足需求,并使T个时段的总费用最小。 决策变量 目标 xt ~时段t 生产量; yt ~时段t (末)库存量; wt =1 ~时段t 开工生产 (wt =0 ~不开工)。 约束

生产批量问题的一般提法 混合0-1规划模型 将所给参数代入模型,用LINDO求解 最优解:x1~ x4:15,40,45,0;总费用:554.0(千元)

4.3 非线性规划模型 非线性规划研究一个n元实函数在一组等式或不等式的约束条件下的极值问题,且目标函数和约束条件至少有一个是未知量的非线性函数。 非线性规划模型可分为二次规划模型、一般非线性模型、非线性整数规划模型和混合模型等。 非线性规划的求解主要使用Matlab 和Lingo软件。

案例10:原油采购与加工 汽油甲(A50%) 原油A 原油B 汽油乙 (A60%) 售价4800元/吨 售价5600元/吨 库存500吨 库存1000吨 市场上可买到不超过1500吨的原油A: 购买量不超过500吨时的单价为10000元/吨; 购买量超过500吨但不超过1000吨时,超过500吨的 部分8000元/吨; 购买量超过1000吨时,超过1000吨的部分6000元/吨。 应如何安排原油的采购和加工 ?

问题分析 决策变量 目标函数 利润:销售汽油的收入 - 购买原油A的支出 难点:原油A的购价与购买量的关系较复杂 原油A的购买量,原油A, B生产汽油甲,乙的数量 甲(A50%) A B 乙(A60%) 购买x x11 x12 x21 x22 4.8千元/吨 5.6千元/吨 目标函数 利润(千元) c(x) ~ 购买原油A的支出 c(x)如何表述?

目标函数 约束条件 x 500吨单价为10千元/吨; 500吨 x 1000吨,超过500吨的8千元/吨; 原油供应 购买x A B x11 x12 x21 x22 库存500吨 库存1000吨

约束条件 汽油含原油A的比例限制 目标函数中c(x)不是线性函数,是非线性规划; B 乙(A60%) x11 x12 x21 x22 目标函数中c(x)不是线性函数,是非线性规划; 对于用分段函数定义的c(x),一般的非线性规划软件也难以输入和求解; 想办法将模型化简,用现成的软件求解。

模型求解 方法1 x1 , x2 , x3 ~以价格10, 8, 6(千元/吨)采购A的吨数 x= x1+x2+x3, c(x) = 10x1+8x2+6x3 x= x1+x2+x3, c(x) = 10x1+8x2+6x3 目标函数 500吨 x 1000吨,超过500吨的8千元/吨 增加约束 只有当以10千元/吨的价格购买x1=500(吨)时,才能以8千元/吨的价格购买x2 非线性规划模型,可以用LINGO求解

方法1:LINGO求解 用库存的500吨原油A、500吨原油B生产汽油甲,不购买新的原油A,利润为4,800千元。 Model: Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - 10*x1 - 8*x2 - 6*x3; x11+x12 < x + 500; x21+x22 < 1000; x11 - x21 > 0; 2*x12 - 3*x22 > 0; x=x1+x2+x3; (x1 - 500) * x2=0; (x2 - 500) * x3=0; x1 < 500; x2 < 500; x3 < 500; x > 0; x11 > 0; x12 > 0; x21 > 0; x22 > 0; x1 > 0; x2 > 0; x3 > 0; end Objective value: 4800.000 Variable Value Reduced Cost X11 500.0000 0.0000000E+00 X21 500.0000 0.0000000E+00 X12 0.0000000E+00 0.0000000E+00 X22 0.0000000E+00 0.0000000E+00 X1 0.1021405E-13 10.00000 X2 0.0000000E+00 8.000000 X3 0.0000000E+00 6.000000 X 0.0000000E+00 0.0000000E+00 用库存的500吨原油A、500吨原油B生产汽油甲,不购买新的原油A,利润为4,800千元。 LINGO得到的是局部最优解,还能得到更好的解吗?

方法2 x1 , x2 , x3 ~以价格10, 8, 6(千元/吨)采购A的吨数 y1, y2 , y3=1 ~以价格10, 8, 6(千元/吨)采购A x1 , x2 , x3 ~以价格10, 8, 6(千元/吨)采购A的吨数 增加约束 y=0  x=0 x>0  y=1 y1,y2,y3 =0或1 OBJECTIVE FUNCTION VALUE 1) 5000.000 VARIABLE VALUE REDUCED COST Y1 1.000000 0.000000 Y2 1.000000 2200.000000 Y3 1.000000 1200.000000 X11 0.000000 0.800000 X21 0.000000 0.800000 X12 1500.000000 0.000000 X22 1000.000000 0.000000 X1 500.000000 0.000000 X2 500.000000 0.000000 X3 0.000000 0.400000 X 1000.000000 0.000000 0-1线性规划模型,可用LINDO求解 购买1000吨原油A,与库存的500吨原油A和1000吨原油B一起,生产汽油乙,利润为5,000千元 。 优于方法1的结果

案例11:下料问题 I I 钢管下料问题2 增加一种需求:5米10根;切割模式不超过3种。 现有4种需求:4米50根,5米10根,6米20根,8米15根,用枚举法确定合理切割模式,过于复杂。 对大规模问题,用模型的约束条件界定合理模式 决策变量 xi ~按第i 种模式切割的原料钢管根数(i=1,2,3) r1i, r2i, r3i, r4i ~ 第i 种切割模式下,每根原料钢管生产4米、5米、6米和8米长的钢管的数量

钢管下料问题2 目标函数(总根数) 模式合理:每根余料不超过3米 约束条件 满足需求 整数约束: xi ,r1i, r2i, r3i, r4i (i=1,2,3)为整数 整数非线性规划模型

钢管下料问题2 增加约束,缩小可行域,便于求解 需求:4米50根,5米10根,6米20根,8米15根 每根原料钢管长19米 原料钢管总根数下界: 特殊生产计划:对每根原料钢管 模式1:切割成4根4米钢管,需13根; 模式2:切割成1根5米和2根6米钢管,需10根; 模式3:切割成2根8米钢管,需8根。 原料钢管总根数上界:13+10+8=31 模式排列顺序可任定

钢管切割问题非线性规划模型Lingo程序 model: sets: !定义3种模式; pattern/1..3/:x; !定义钢条的4种规格,需求量; type/1..4/:size,demand; !建立4*3的矩阵r; link(type,pattern):r; endsets data: size=4 5 6 8; demand=50 10 20 15; enddata !目标函数; min=@sum(pattern:x); !需求约束; @for(type(i): @sum(pattern(j):r(i,j)*x(j))>=demand(i)); !合理性约束; @for(pattern(i): @sum(type(j):size(j)*r(j,i))<=19); @sum(type(j):size(j)*r(j,i))>=16); @sum(pattern:x)<=31; @sum(pattern:x)>=26; @for(pattern(i)|i#le#2:x(i)>=x(i+1)); !整数约束; @for(link:@gin(r)); @for(pattern:@gin(x)); end

模式1:每根原料钢管切割成3根4米和1根6米钢管,共10根; 模式2:每根原料钢管切割成2根4米、1根5米和1根6米钢管,共10根; LINGO求解整数非线性规划模型 Local optimal solution found at iteration: 12211 Objective value: 28.00000 Variable Value Reduced Cost X1 10.00000 0.000000 X2 10.00000 2.000000 X3 8.000000 1.000000 R11 3.000000 0.000000 R12 2.000000 0.000000 R13 0.000000 0.000000 R21 0.000000 0.000000 R22 1.000000 0.000000 R23 0.000000 0.000000 R31 1.000000 0.000000 R32 1.000000 0.000000 R33 0.000000 0.000000 R41 0.000000 0.000000 R42 0.000000 0.000000 R43 2.000000 0.000000 模式1:每根原料钢管切割成3根4米和1根6米钢管,共10根; 模式2:每根原料钢管切割成2根4米、1根5米和1根6米钢管,共10根; 模式3:每根原料钢管切割成2根8米钢管,共8根。 原料钢管总根数为28根。