Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题

阅读本文可以理解什么是“强”整数规划模型。

单源固定费用网络流问题见文献[1]第13.4.1节(p229-231),是"强整数规划建模“的极好案例。

本文是本博客原创,本博客不转贴他人作品。

单源固定费用网络流问题(The Signle Source Fixed Charge Network Flow Problem)

单源固定费用网络流问题:给定一个有向网络 (边数为m,节点数n),网络上只有一个流量流入节点(标记为1),但有若干个流量流出节点, 节点 i 的流出流量标记为 B[i], 每个边 e (e =1,...,m) 有流量限制(此例中不考虑流量限制,因此流量限制取为-B[1]) 。网络情况如下图:

网络的节点数n=4, 边数m=8。

对应节点1,2,3,4, 流(出)量B={ -6  2  3  4}。

对应边e=1,2,3,4,5,6,7,8, 边由节点对定义,数据是 E={(1 4) (1 2) (4 2) (1 3) (2 3) (3 2) (4 3) (3 4)}.

对应边e=1,2,3,4,5,6,7,8, 边上的一次性费用是C={5 2 7 3 2 4 9 12}.

非“强”整数规划模型

设非负变量 x[e] 是边e (e =1,...,8) 上的流量, 又设0-1变量 y[e] 表示边e上是否有流量。于是模型的目标是极小化一次性费用和,约束无外乎节点上的流量平衡约束和x[e]-y[e]之间的关联约束。

用+Leapms写出模型,其PDF摘录如下:

上述模型用+Leapms中的solve命令求松弛解,可以看到y变量非0-1:

+Leapms>solve
The LP is solved to optimal.
找到线性规划最优解.非零变量值和最优目标值如下:
.........
x1*=
x2*=
x4*=
y1*=0.166667
y2*=0.333333
y4*=0.5
.........
Objective*=
.........
+Leapms>

若要获得整解则必须使用mip命令对问题进行分支定界/割平面求解:

+Leapms>mip
relexed_solution=; number_of_nodes_branched=; memindex=(,)
The Problem is solved to optimal as an MIP.
找到整数规划的最优解.非零变量值和最优目标值如下:
.........
x1* =
x2* =
x5* =
y1* =
y2* =
y5* =
.........
Objective*=
.........
+Leapms>

结果在网络上表现:

“强”整数规划模型(Strong Integer Formulation)

“强”整数规划模型对上述模型采用了Multicommodity改写。方法是引入一个新非负变量 z[e][k], 其含义是流过e边最终贡献给k节点流出的流量(显然此处k=2,...,n, k$\neq 1$)。

新模型的目标不会改变,约束中的节点平衡条件逻辑上也不改变,即对任何节点 i , 流出和流入之差应该为0 或者 当i==k时等于k的流出量。

用+Leapms写出模型,其PDF摘录如下:

上述所谓“强”模型比之前的模型的好处在于在+Leapms中直接使用solve命令就可以求出整数解,即不需要分支定界/割平面过程!

不十分严格地:此即是“强”整数规划模型和含义,强模型更容易求解,或者说对求解器更友好。

+Leapms的求解过程:

+Leapms>solve
The LP is solved to optimal.
找到线性规划最优解.非零变量值和最优目标值如下:
.........
x1*=
x2*=
x5*=
y1*=
y2*=
y5*=
z1_4*=
z2_2*=
z2_3*=
z5_3*=
.........
Objective*=
.........
+Leapms>

结果在网络上表现:

强整数规划模型的详细解释 及 “强”建模原理

本案例的“强”建模原理来源于文[1]中的三个观察(Oberservation 13.2-13.4, page 230) 。

关于“强”模型的详细解释,见文[2]。

其他

文[1]并未在13.4.1中给出此案例的所有数据,其余数据(主要是边上费用数据C是从13.1, page 222)的XPRESS MP模型中读出的。贴在这里,供看官与+Leapms建模语言作对比:

结论

“强”整数规划建模概念是经典建模方法中的重要内容,如果说在本科《运筹学》教学中只要讲述0-1变量的应用即可,那么在研究生层次的《高级运筹学》教学中最好增加“强”整数规划建模内容。

使用本土完全自主知识产权的+Leapms建模语言和+Leapms求解器,可以有效辅助教学,比之传统的舶来建模语言和求解器有优势。

参考文献

[1] Wolsey L A. Integer Programming. New York: Jonh Wiley & Sons, 1998 / ISBN 978-0-471-28366-9

[2] Wolsey L . Strong formulations for mixed integer programming: A survey[J]. Mathematical Programming, 1989, 45(1-3):173-191.

Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题的更多相关文章

  1. Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题

    Wolsey "强整数规划“ 建模的+Leapms实践——无产能批量问题 <整数规划>[1]一书作者L. A. Wolsey对批量问题(Lot-sizing Problem)做了 ...

  2. Altera OpenCL用于计算机领域的13个经典案例(转)

    英文出自:Streamcomputing 转自:http://www.csdn.net/article/2013-10-29/2817319-the-application-areas-opencl- ...

  3. (zhuan) 资源|TensorFlow初学者必须了解的55个经典案例

    资源|TensorFlow初学者必须了解的55个经典案例 2017-05-27 全球人工智能 >>>>>>欢迎投稿:news@top25.cn<<< ...

  4. javascript的理解及经典案例

    js的简介: JavaScript是一种能让你的网页更加生动活泼的程式语言,也是目前网页中设计中最容易学又最方便的语言. 你可以利用JavaScript轻易的做出亲切的欢迎讯息.漂亮的数字钟.有广告效 ...

  5. jQuery基础的工厂函数以及定时器的经典案例

    1. jQuery的基本信息:  1.1 定义: jQuery是JavaScript的程序库之一,它是JavaScript对象和实用函数的封装, 1.2 作用: 许多使用JavaScript能实现的交 ...

  6. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...

  7. 经典案例:那些让人赞不绝口的创新 HTML5 网站

    在过去的10年里,网页设计师使用 Flash.JavaScript 或其他复杂的软件和技术来创建网站.但现在你可以前所未有的快速.轻松地设计或创造互动的.有趣好看的网站.如何创建?答案是 HTML5 ...

  8. php中foreach()函数与Array数组经典案例讲解

    //php中foreach()函数与Array数组经典案例讲解 function getVal($v) { return $v; //可以加任意检查代码,列入要求$v必须是数字,或过滤非法字符串等.} ...

  9. 阿里云资深DBA专家罗龙九:云数据库十大经典案例分析【转载】

    阿里云资深DBA专家罗龙九:云数据库十大经典案例分析 2016-07-21 06:33 本文已获阿里云授权发布,转载具体要求见文末 摘要:本文根据阿里云资深DBA专家罗龙九在首届阿里巴巴在线峰会的&l ...

随机推荐

  1. 【bzoj 4176】 Lucas的数论 莫比乌斯反演(杜教筛)

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  2. MySQL--各版本DDL 操作总结

    MySQL 5.5 DDL 在MySQL 5.5版本前,所有DDL操作都使用Copy Table的方式完成,操作过程中原表数据库不允许写入,只能读取,在MySQL 5.5版本中引入FIC(Fast i ...

  3. jquery简易版xwPop.js弹出消息对话框插件

    xwPop.js弹出消息对话框插件是一款含有多种情景模式的原生模态消息对话框代码,可用于替代浏览器默认的alert弹出对话框,它提供各种参数和方法,功能非常强大.目前已经在项目中有应用到xwpop开发 ...

  4. SpringBoot(一)_快速实战搭建项目

    现在在学习springboot 相关的知识,感觉真的很好用,用idea 进行开发,根据慕课网和纯洁的微笑的课程.进行总结下. 使用idea创建springboot项目 (1)单击 File | New ...

  5. 【原】js数组对象去重最简单的方法

    简单的数组去重是比较简单的,方法也特别多,如给下面的数组去重: let arr = [1,2,2,4,9,6,7,5,2,3,5,6,5] 最常用的可以用for循环套for循环,再用splice删除重 ...

  6. 开发教程(四) MIP组件平台使用说明

    组件审核平台用于上传 MIP 组件.经过自动校验之后,提交审核,通过审核的组件会定时推送到线上,供网站使用. 平台地址:https://www.mipengine.org/platform/ 1. 使 ...

  7. 解决:git push error: failed to push some refs to

    出现错误的原因是github中的README.md文件不在本地代码目录中. 也就是说我们需要先将远程代码库中的任何文件先pull到本地代码库中,才能push新的代码到github代码库中. 使用如下命 ...

  8. Word页眉、页码的使用:利用分隔符设置指定页显示页眉,解决页码显示{PAGE \* MERGEFORMAT}问题

    不常编辑对文档有格式要求的朋友来说,偶尔需要编辑指定格式页眉页码的word文档时,会一时不记得如何使用,在网上搜索半天,异常烦躁. 特整理一下,记录下来,备不时只需. 以下操作环境为word2016. ...

  9. 使用ConcurrentHashMap一定线程安全?

    前言 老王为何半夜惨叫?几行代码为何导致服务器爆炸?说好的线程安全为何还是出问题?让我们一起收看今天的<走进IT> 正文 CurrentHashMap出现背景 说到ConcurrentHa ...

  10. Linux 系统调用过程详细分析

    内核版本:Linux-4.19 操作系统通过系统调用为运行于其上的进程提供服务. 那么,在应用程序内,调用一个系统调用的流程是怎样的呢? 我们以一个假设的系统调用 xyz() 为例,介绍一次系统调用的 ...