当前位置:
文档之家› 19486-数学建模-第2讲整数规划
19486-数学建模-第2讲整数规划
(时间成本等)
引 入x ij
1
0
第i个 人 完 成 第j项 任 务 否则
模型:
min
(
P
)
s.t
.
nn
f
cij
x ij
i1 j1
n
x ij
1,
j
1,, n 每项任务一人
i 1
n
x ij
1,
i
1,, n
每人一项任务
j 1
x 0或1 ij
数 据 集 中 在 下 列 系 数 矩阵 上 :
c 11
C
c 21
c 12
c 22
cn1
c n2
称为指派问题的系数矩阵
c 1n
c 2n
c nn
二、求解方法
1、直接利用Matlab的函数binprog。 整数规划问题的求解可以使用Lingo等专用软件。对于一般的整数 规划规划问题,无法直接利用Matlab的函数,必须利用Matlab编 程实现分枝定界解法和割平面解法。但对于指派问题等特殊的整
4 x2 x3 6
(iv) 由于对每个组合首先计算目标值以验证过 滤条件,故应优先计算目标值大的组合,这样可
x1 , x2 , x3 0或1 提前抬高过滤门槛,以减少计算量。
§3.4分派问题及解法
一 、 分 派 问 题 ( 指 派 问题 ) : n项 任 务 要 分 配 给n个 人 ( 每 人 一 项 )
记 加 圈 零 的 个 数 为m .
当m n时,停止,所加圈零对应的x 1,其余 ij x 0,即为最优解。 ij
当m n时,转step3.
step3. 确定覆盖全部零元素的最小直线数。
1 对无加圈零元素的行作记号,无妨记““;
2 对有“”行中,划去零“0”元素所在列, 记 “” ;
3 再 对 有 “” 列 中 , 加 圈 零 “(0)” 元 素 所 在 行 , 记 “” ;
(i) 先试探性求一个可行解,易看出(x1,x2,x3) =(1,0,0)满足约束条件,故为一个可行解,且z=3。
x1 2 x2 x3 2 (ii) 因为是求极大值问题,故求最优解时,凡是
x1 x1
4x2 x3 x2 3
4
目标值z<3的解不必检验是否满足约束条件即可删 除,因它肯定不是最优解,于是应增加一个约束 条件(目标值下界):(iii) 改进过滤条件。
去 完 成 , 各 人 对 完 成 不同 任 务 的 效 率 不 同 , 决 定 如 何 指 派 可 使 总 效率 最 高 。 Assignment problem
类似有:
n台 机 床 加 工n项 任 务 ; n条 航 线 有n艘 船 去 航 行 等 。
1.一 般 模 型 :
设c 0 : 第i个人完成第j项任务的效率 ij
8
8 9
第1,2,3,4行 分 别 加( 2), ( 2), ( 5), ( 2),
0 1 3 5
得
1
4 0
3 0 0
0 2 1
6
3 7
第4列 减3
(0) 1 3 2
得
1
4 0
3 (0) 3
0 (0)
2 1
(40)
显然 x x x x 1是一组最优解,
11
23
34
52
相应最小费用f 2 2 8 2 14
数规划问题,有时可以直接利用Matlab的函数binprog。
2、匈牙利算法 由于指派问题的特殊性,又存在着由匈牙利数学家 Konig提出的更为简便的解法—匈牙利算法。算法主要 依据以下事实:
若从矩阵C的一行(或一列)各元素中
加上同一个实数a得到矩阵B (bij )mn , 那么 以B为系数矩阵的分派问题与原问题有相同的解。
0 1 3 4
Ex.
2 0
0 5
6 9
0 至少有3个独立零元素 3 至少3条直线覆盖所有零
2 7 0 6
注 : 这 里 提 供 的 一 种 “对 偶 ” 关 系 找 最 多 的 独 立 零 个 数( 独 立 零 个
数 为n) 找 最 少 的 覆 盖 全 部 零 的直 线 数
( 覆 盖 零 的 直 线 数m) 有 mn
匈牙利法求解分派问题步骤:设求 min, 各元素 0 step1. 对矩阵的每一行(每一列)分别减去该行
(列)各元素的最小值,反复进行,至每行、 每列均有零元素;
step2. 试派,即找独立零元素:
1 对每行检查,若当前行中只有一个零元素, 则给它加圈,标为“(0)”,同时把该元素所在 列的其他零元素划去,标为“0”;
大?
1
先引入0-1Ai点没被选中i
1,27
7 bixi B
7
max z cixi i 1
i1 x1 x2 x3 2 s.t.x4 x5 1
x6 x7 1 xi 0或1
3.1.2 相互排斥的约束条件 有两个相互排斥的约束条件5x1+4x2≤24 或7x1+3x2 ≤45 。 为了统一在一个问题中,引入0-1变量y,则上述约束条件可改写 为: 5x1+4x2≤24+yM,7x1+3x2 ≤45+(1-y)M,y=0或1 其中M是充分大的数。 约束条件x1=0 或500 ≤x1 ≤800 可改写为500 y≤x1 ≤800y, y=0或1
§2整数规划的分枝定界法
对有约束条件的最优化问题(其可行解为有限数)的所有可解空 间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部 可行解空间反复地分割为越来越小的子集,称为分枝;并且对每 个子集内的解集计算一个目标下界(对于最小值问题),这称为 定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些 子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。 这就是分枝定界法的主要思路。 分枝定界法可用于解纯整数或混合的整数规划问题。由于这方法 灵活且便于用计算机求解,所以现在它已是解整数规划的重要方 法。目前已成功地应用于求解生产进度问题、旅行推销员问题、 工厂选址问题、背包问题及分配问题等。 设有最大化的整数规划问题A,与它相应的线性规划为问题B,从 解问题B开始,若其最优解不符合A的整数条件,那么B的最优目 标函数必是A的最优目标函数的上界;而A的任意可行解的目标函 数值将是它的最优目标函数的一个下界。
能取0值,设yi*=0,代入(1),就只有i=i*的约束条件起作 用,而别的式子都是多余的
3.2 0-1型整数规划解法之一(过滤隐枚举法)
解0-1型整数规划最容易想到的方法,和一般整数规划的情形一
样,就是穷举法,即检查变量取值为0或1的每一种组合,比较目
标函数值以求得最优解,这就需要检查变量取值的2n个组合。对
数学建模培训讲义
整数规划
2009年8月
§1 整数规划问题的提出 一、整数规划问题的特征:
规划中的变量(部分或全部)限制为整数,若在线 性规划模型中,变量限制为整数,则称为整数线性 规划。目前所流行的求解整数规划的方法,往往只 适用于整数线性规划。目前还没有一种方法能有效 地求解一切整数规划。 二、整数规划问题的求解方法分类: 1、(i)分枝定界法—可求纯或混合整数线性规划。 (ii)割平面法—可求纯或混合整数线性规划。 (iii)隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。 (iv)匈牙利法—解决指派问题(“0-1”规划特殊情 形)。 (v)蒙特卡洛法—求解各种类型规划。
例4 某公司拟在市东、西、南三区建立门市部。拟议中有7个
位置(点)Ai(i=1,2…7)可供选择。规定
在东区。由A1,A2,A3三个点中至多选两个;
在西区。由A4,A5两个点中至少选一个;
在南区,由A6,A7两个点中至少选一个。
如选用Ai点,设备投资估计为bi元,每年可获利润估计为ci元,
但投资总额不能超过B元。问应选择哪几个点可使年利润为最
(2)定界,以每个后继问题为一分枝标明求解的结 果,与其它问题的解的结果中,找出最优目标函数
值最大者作为新的上界 f ,从已符合整数条件的各
分支中,找出目标函数值为最大者作为新的下界 f
若无作用 f 不变。
第二步:比较与剪枝,各分枝的最优目标函数中若有 小于 f 者,则剪掉这枝,即以后不再考虑了。若大
注 : 可 行 解 特 征 : 各 行有 一 个 零 , 且 仅 有 一 个零
各 列 有 一 个 零 , 且 仅 有一 个 零
称 之 为 有n个 独 立 的 零 。
3.关于独立元素的定理(D.Konig 匈牙利)
系 数 矩 阵 中 独 立 零 元 素的 最 多 个 数 等 于
覆 盖 所 有 零 元 素 的 最 少直 线 数 。
于变量个数n较大,这几乎是不可能的。因此常设计一些方法,只
检查变量取值的组合的一部分,就能求到问题的最优解。这样的
方法称为隐枚举法(Implicit Enumeration),分枝定界法也是
一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时
穷举法还是必要的。
例
Max
求解思路及改进措施:
z 3x1 2x2 5x3
分枝定界法就是将B的可行域分成子区域的方法。逐步减小上界 和增大下界,最终求到最优目标函数值 。
设线性整数规划问题:
max
f CT X
( A)
s.t. AX b
X 0
x
j为整数,j
1,2,, n
max
f CT X
(B)s.t. AX b 问题
X 0 标准LP
分枝定界法:(一般步骤) 1 求解( B), 可能得到以下情况之一: i)若( B)无可行解,则停(剪枝),说明( A)无可行解; ii)若(B)有最优解x,且符合A的整数条件,则停(剪枝),得到( A)的解。 iii)若(B)有最优解,但不符合A的整数条件,记为 f 为( A)最优值的的上界,转2 2用观察法找( A)的一个整数可行解, 一般可取x j 0, j 1,, n,试探,求得其目标函数值,记为 f, 以f 表示问题A的最优目标函数值,这时有 f f f