第二章 整数规划

第二章 整数规划


§1 概论

1.1 定义

规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。

1.2 整数规划的分类

如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:
1. 变量全限制为整数时,称纯(完全)整数规划。
2. 变量部分限制为整数的,称混合整数规划。

 1.3 整数规划特点

特点1. 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:

  • 原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
  • 整数规划无可行解
  • 有可行解(当然就存在最优解),但最优解值变差。

-“整数规划无可行解”的例子
m i n z = x 1 + x 2 min \quad z = x_1 + x_2 minz=x1+x2
s . t . 2 x 1 + 4 x 2 = 5 x 1 ≥ 0 , x 2 ≥ 0 s.t.\quad2x_1 + 4x_2 = 5\quad\quad x_1\geq0,x_2\geq0 s.t.2x1+4x2=5x10,x20
其最优实数解为:
x 1 = 0 , x 2 = 3 / 2 , m i n z = 3 / 2 x_1 = 0,x_2 = 3/2,\qquad minz =3/2 x1=0,x2=3/2,minz=3/2

-“有可行解(当然就存在最优解),但最优解值变差” 的例子
m i n z = x 1 + x 2 min z = x_1 + x_2 minz=x1+x2
s . t . 2 x 1 + 4 x 2 = 6 x 1 ≥ 0 , x 2 ≥ 0 s.t.\quad2x_1 + 4x_2 = 6\quad\quad x_1\geq0,x_2\geq0 s.t.2x1+4x2=6x10,x20
 其最优实数解为:
x 1 = 0 , x 2 = 3 / 2 , m i n z = 3 / 2 x_1 = 0,x_2 = 3/2,\qquad minz =3/2 x1=0,x2=3/2,minz=3/2
 限制整数后的最优解
x 1 = 1 , x 2 = 1 , m i n z = 2 x_1=1,x_2=1,\qquad minz=2 x1=1,x2=1,minz=2

特点2.整数规划最优解不能按照实数最优解简单取整而获得。

 1.4 求解方法分类

1. 分枝定界法—可求纯或混合整数线性规划。
2. 割平面法—可求纯或混合整数线性规划。
3. 隐枚举法—求解“0-1”整数规划:
 ①过滤隐枚举法;②分枝隐枚举法。
4. 匈牙利法—解决指派问题(“0-1”规划特殊情形)
5. 蒙特卡洛法—求解各种类型规划。

下面将简要介绍常用的几种求解整数规划的方法。


§2 分枝定界法

  对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。
  分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由Land Doig和Dakin等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等。

例子:求解下述整数规划

m a x z = 40 ∗ x 1 + 90 ∗ x 2 max\qquad z = 40*x_1 + 90*x_2 maxz=40x1+90x2

y = {   9 x 1 + 7 x 2 ≤ 56 7 x 1 + 20 x 2 ≤ 70 x 1 , x 2 ≥ 0 且 为 整 数 y = \begin{cases} \ 9x_1+7x_2\leq56 \\ 7x_1+20x_2\leq70 \\ x_1,x_2\geq0 \qquad 且为 整数 \\ \end{cases} y= 9x1+7x2567x1+20x270x1,x20
第一步,先不考虑整数限制,即解相应的线性规划 B ,得最优解为:
x 1 = 4.8092 , x 2 = 1.8168 , z = 355.8779 x1 = 4.8092, x2 = 1.8168,z = 355.8779 x1=4.8092,x2=1.8168,z=355.8779

这时 z z z 是问题 A 的最优目标函数值 z ∗ z^* z 的上界,记作 z ‾ \overline{\text{z}} z 。而 x 1 = 0 x1 = 0 x1=0, x 2 = 0 x2 = 0 x2=0显然是问题 A 的一个整数可行解,这时 z = 0 z = 0 z=0 ,是 z ∗ z^* z的一个下界,记作 z ‾ \underline{\text{z}} z , 即
0 ≤ z ∗ ≤ 355 0 \leq z^* \leq 355 0z355

第二步,因为 x1, x2 当前均为非整数,故不满足整数要求,任选一个进行分枝。设选 x1进行分枝,把可行集分成2个子集(问题B1和问题B2):
x 1 ≤ 4 , x 2 ≥ 5 x_1\leq4, x_2\geq5 x14,x25
因为 4 与 5 之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这一步称为分枝。这两个子集的规划(B1和B2)及求解如下:

问题B1: m a x z = 40 ∗ x 1 + 90 ∗ x 2 max\quad z = 40*x_1 + 90*x_2 maxz=40x1+90x2

y = {   9 x 1 + 7 x 2 ≤ 56 7 x 1 + 20 x 2 ≤ 70 0 ≤ x 1 ≤ 4 , x ≥ 0 y = \begin{cases} \ 9x_1+7x_2\leq56 \\ 7x_1+20x_2\leq70 \\ 0\leq x_1\leq4,\quad x\geq0 \\ \end{cases} y= 9x1+7x2567x1+20x2700x14,x0
问题B2: m a x z = 40 ∗ x 1 + 90 ∗ x 2 max\quad z = 40*x_1 + 90*x_2 maxz=40x1+90x2

y = {   9 x 1 + 7 x 2 ≤ 56 7 x 1 + 20 x 2 ≤ 70 x 1 ≥ 5 , x ≥ 0 y = \begin{cases} \ 9x_1+7x_2\leq56 \\ 7x_1+20x_2\leq70 \\ x_1\geq5, \quad x\geq0 \\ \end{cases} y= 9x1+7x2567x1+20x270x15,x0
B1的最优解为: x 1 = 4.0 , x 2 = 2.1 , z 1 = 349 x_1 = 4.0,x_2=2.1,z_1=349 x1=4.0,x2=2.1,z1=349
B2的最优解为: x 1 = 5.0 , x 2 = 1.57 , z 1 = 341.4 x_1 = 5.0,x_2=1.57,z_1=341.4 x1=5.0,x2=1.57,z1=341.4
重新定界: 0 ≤ z ∗ ≤ 349 0\leq z^*\leq349 0z349

第三步,对问题 B 1 B_1 B1 再进行分枝得问题 B 11 B_{11} B11 B 12 B_{12} B12 ,它们的最优解为
B 11 : x 1 = 4.0 , x 2 = 2.0 , z 1 = 340 B_{11}:x_1 = 4.0,x_2=2.0,z_1=340 B11:x1=4.0,x2=2.0,z1=340
B 12 : x 1 = 1.43 , x 2 = 3.00 , z 1 = 327.14 B_{12}:x_1 = 1.43,x_2=3.00,z_1=327.14 B12:x1=1.43,x2=3.00,z1=327.14
在重新定界: 340 ≤ z ∗ ≤ 341 340\leq z^*\leq 341 340z341 并将 B 12 剪 枝 B_{12}剪枝 B12

注意:
1.这里的z的上界为什么是341,而不是349?因为我们已经掌握了B1问题的最优解,340必然是下界。而比340大的最大解只有可能在B2中取。因此上界设为B2的最大值。
2.第三步的分支是选择对x_2进行的,因为B1求出的最优解X1已经无法再分。

第四步,对问题 B2 再进行分枝得问题 B21和 B22,它们的最优解为
B 21 : x 1 = 5.44 , x 2 = 1.00 , z 1 = 308 B_{21}:x_1 = 5.44,x_2=1.00,z_1=308 B21:x1=5.44,x2=1.00,z1=308
B 22 : 无 可 行 解 B_{22}:无可行解 B22:
B 21 , B 22 B_{21},B_{22} B21,B22剪枝

于是可以断定原问题的最优解为: x 1 = 4 , x 2 = 2 , z ∗ = 340 x_1 = 4, x_2 = 2,z^* = 340 x1=4,x2=2,z=340

由上面的求解过程,我们可以得到分枝定界法的基本步骤:
第一步,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问题B。
(1)解问题 B 可能得到以下情况之一:

  • B 没有可行解,这时 A 也没有可行解,则停止
  • B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则停止。
  • B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z 。

(2)定下界,用观察法找问题 A 的一个整数可行解,一般可取 x j = 0 , j = 1 , . . . , n x_j = 0, j = 1,...,n xj=0,j=1,...,n,试探,求得其目标函数值,并记作 z z z 。以 z ∗ z^* z表示问题 A 的最优目标函数值。这时有
z ‾ ≤ z ∗ ≤ z ‾ \underline{\text{z}} \leq z^*\leq \overline{\text{z}} zzz

第二步,分枝,在 B 的最优解中任选一个不符合整数条件的变量 x j x_j xj ,其值为 b j b_j bj , 以 [ b j ] [b_j] [bj] 表示小于 b j b_j bj 的最大整数。构造两个约束条件
x j ≤ [ b j ] a n d x j ≥ [ b j ] + 1 xj ≤ [bj] and xj ≥ [bj] +1 xj[bj]andxj[bj]+1

将这两个约束条件,分别加入问题 B ,求两个后继规划问题 B1 和 B2。不考虑整数条件求解这两个后继问题。定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界 z ‾ \overline{\text{z}} z。从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界 z ‾ \underline{\text{z}} z ,若无作用 z ‾ \underline{\text{z}} z 不变

第三步:比较与剪枝,各分枝的最优目标函数中若有小于 z ‾ \underline{\text{z}} z者,则剪掉这枝,即以后不再考虑了。若大于 z ‾ \underline{\text{z}} z,且不符合整数条件,则重复第二步。一直到最后得到 z ∗ = z z^* = z z=z 为止。得最优整数解 x j , j = 1 , . . . , n . x_j,j= 1,...,n. xj,j=1,...,n.


§3. 0 −1型整数规划

  0−1型整数规划是整数规划中的特殊情形,它的变量 x j x_j xj 仅取值 0 或 1。这时 x j x_j xj 称为0 −1变量,或称二进制变量。在实际问题中,如果引入0−1变量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们先介绍引入0 −1变量的实际问题,再研究解法

3.1 引入0 −1变量的实际问题

3.1.1 投资场所的选定——相互排斥的计划

例某公司拟在市东、西、南三区建立门市部。拟议中有 7 个位置(点) A i ( i = 1 , 2 , . . . , 7 ) A_i(i = 1,2,...,7) Ai(i=1,2,...,7)可供选择。
规定在东区。由 A1, A2 , A3 三个点中至多选两个;
在西区。由 A4 , A5 两个点中至少选一个;
在南区,由 A6 , A7 两个点中至少选一个。
如选用 A i A_i Ai 点,设备投资估计为 b i b_i bi 元,每年可获利润估计为$c_i $元,但投资总额不能
超过 B 元。问应选择哪几个点可使年利润为最大?

解:先引入0−1变量 x i ( i = 1 , 2 , . . . , 7 ) x_i(i =1,2,...,7) xi(i=1,2,...,7)
其中
x i = {   1 当 A i 点 被 选 中   0 当 A i 点 没 被 选 中 x_i = \begin{cases} \ 1 当A_i 点被选中 \\ \ 0 当A_i 点没被选中 \\ \end{cases} xi={ 1Ai 0Ai
其中问题可以写成
m a x z = ∑ i = 1 7 c i x i max \quad z = \sum_{i=1}^{7}{c_ix_i} maxz=i=17cixi

{ ∑ i = 1 7 b i x i ≤ 2 x 1 + x 2 + x 3 ≤ 2 x 4 + x 5 ≤ 1 x 6 + x 7 ≤ 1 x i = 0 o r 1 \left\{ \begin{aligned} \sum_{i=1}^{7}{b_ix_i}&\leq 2 \\ x_1+x_2+x_3&\leq2\\ x_4+x_5&\leq1\\ x_6+x_7&\leq1\\ x_i=0or1 \end{aligned} \right. i=17bixix1+x2+x3x4+x5x6+x7xi=0or12211

3.1.2 相互排斥的约束条件

例1:有两个相互排斥的约束条件
5 x 1 + 4 x 2 ≤ 24 o r 7 x 1 + 3 x 2 ≤ 45 5x_1+4x_2\leq24 \quad or \quad7x_1+3x_2\leq45 5x1+4x224or7x1+3x245

为了统一在一个问题中,引入0 −1变量 y ,则上述约束条件可改写为:
{   5 x 1 + 4 x 2 ≤ 24 + y M 7 x 1 + 3 x 2 ≤ 45 + ( 1 − y ) M y = 0 o r 1 \left\{ \begin{aligned} \\ \ 5x_1+4x_2&\leq24+yM\\ 7x_1+3x_2&\leq45+(1-y)M\\ y=0\quad &or \quad1\\ \end{aligned} \right.  5x1+4x27x1+3x2y=024+yM45+(1y)Mor1
其中M是自己设置的一个充分大的常数

例2:两个互相排斥的约束条件
x i = 0 o r 500 ≤ x i ≤ 800 x_i = 0 \quad or\quad 500 \leq x_i\leq800 xi=0or500xi800

可改写为
{   500 y ≤ x i ≤ 800 y y = 0 o r 1 \left\{ \begin{aligned} \\ \ 500y \leq x_i&\leq800y\\ y&=0or1\\ \end{aligned} \right.  500yxiy800y=0or1

一般的情况
如果有 m 个互相排斥的约束条件:
a i 1 x 1 + . . . + a i n x n ≤ b i i = 1 , 2 , . . . , m a_{i1}x_1+...+a_{in}x_n\leq b_i\quad i = 1,2,...,m ai1x1+...+ainxnbii=1,2,...,m

为了保证这 m 个约束条件只有一个起作用,我们引入 m 个0−1变量 y i ( i = 1 , 2 , . . . , m ) y_i\quad(i = 1,2,...,m) yi(i=1,2,...,m)
和一个充分大的常数 M.
可改写成
{   a i 1 x 1 + . . . + a i n x n ≤ b i + y i M i = 1 , 2 , . . . , m y 1 + . . . + y m = m − 1 \left\{ \begin{aligned} \\ \ a_{i1}x_1+...+a_{in}x_n&\leq b_i +y_iM \quad\quad i = 1,2,...,m\\ y_1+...+y_m&=m-1\\ \end{aligned} \right.  ai1x1+...+ainxny1+...+ymbi+yiMi=1,2,...,m=m1

3.1.3 关于固定费用的问题(Fixed Cost Problem)

在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线性规划来描述,但可改变为混合整数规划来解决,见下例。

某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。所以必须全面考虑。今设有三种方式可供选择,

x j x_j xj 表示采用第 j 种方式时的产量;
c j c_j cj 表示采用第 j 种方式时每件产品的变动成本;
k j k_j kj 表示采用第 j 种方式时的固定成本。

为了说明成本的特点,暂不考虑其它约束条件。采用各种生产方式的总成本分别为
P j = {   k j + c j x j 当 x j > 0   0 当 x j = 0 a n d j = 1 , 2 , 3 P_j = \begin{cases} \ k_j + c_jx_j 当x_j>0 \\ \ 0 当x_j=0 \\ \end{cases} \quad and \quad j=1,2,3 Pj={ kj+cjxjxj>0 0xj=0andj=1,2,3
在构成目标函数时,为了统一在一个问题中讨论,现引入0 −1变量 y j ,令
y j = {   1 当 采 用 第 j 种 生 产 方 式 , 即 x j > 0 时   0 当 不 采 用 第 j 种 生 产 方 式 , 即 x j = 0 时 a n d j = 1 , 2 , 3 ( 1 ) y_j = \begin{cases} \ 1 当采用第j种生产方式,即x_j>0时 \\ \ 0 当不采用第j种生产方式,即x_j=0时 \\ \end{cases}\quad and \quad j=1,2,3 \quad\quad\quad\quad\quad (1) yj={ 1jxj>0 0jxj=0andj=1,2,3(1)
因此得到下面的整数型线性规划:
m i n z = ( k 1 y 1 + c 1 x 1 ) + ( k 2 y 2 + c 2 x 2 ) + ( k 3 y 3 + c 3 x 3 ) minz = (k_1y_1+c_1x_1)+(k_2y_2+c_2x_2)+(k_3y_3+c_3x_3) minz=(k1y1+c1x1)+(k2y2+c2x2)+(k3y3+c3x3)
y j ϵ ≤ x j ≤ y j M , j = 1 , 2 , 3 ( 2 ) y_j\epsilon\leq x_j\leq y_jM, \quad j=1,2,3 \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad(2) yjϵxjyjM,j=1,2,3(2)

其中ε 是一个充分小的正常数,M 是个充分大的正常数。(2)式说明 当 x j > 0 x_j > 0 xj>0 y j y_j yj必须为 1;当 x j = 0 x_j = 0 xj=0时只有 y j y_j yj 为 0 时才有意义,所以(2)式完全可以代替(1)式。

3.2 0−1型整数规划解法之一(过滤隐枚举法

解0 −1型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的 2 n 2^n 2n个组合。对于变量个数 n 较大(例如 n >100),这几乎是不可能的。因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法(Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的。
下面举例说明一种解0 −1型整数规划的隐枚举法。

m a x z = 3 x 1 − 2 x 2 + 5 x 3 max\quad z = 3x_1-2x_2+5x_3 maxz=3x12x2+5x3

{   x 1 + 2 x 2 − x 3 ≤ 2 x 1 + 4 x 2 + x 3 ≤ 4 x 1 , x 2 , x 3 = 0 o r 1 \left\{ \begin{aligned} \\ \ x_1+2x_2-x_3&\leq2\\ x_1+4x_2+x_3&\leq4\\ x_1,x_2,x_3&=0\quad or\quad 1 \end{aligned} \right.  x1+2x2x3x1+4x2+x3x1,x2,x324=0or1

求解思路及改进措施:
(1) 先试探性求一个可行解,易看出 ( x 1 , x 2 , x 3 ) = ( 1 , 0 , 0 ) (x_1, x_2 , x_3 ) = (1,0,0) (x1,x2,x3)=(1,0,0) 满足约束条件,故为一
个可行解,且 z = 3。
(2) 因为是求极大值问题,故求最优解时,凡是目标值 z < 3 z <3 z<3的解不必检验是否满足约束条件即可删除,因它肯定不是最优解,于是应增加一个约束条件(目标值下界)
(3) 改进过滤条件。
(4)由于对每个组合首先计算目标值以验证过滤条件,故应优先计算目标值 z 大的组合,这样可提前抬高过滤门槛,以减少计算量。


§4 蒙特卡洛法(随机取样法)

前面介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线性整数规划目前尚未有一种成熟而准确的求解方法,因为非线性规划本身的通用有效解法尚未找到,更何况是非线性整数规划。
然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可以证明,在一定的计算量的情况下,完全可以得出一个满意解。

m a x z = x 1 2 + x 2 2 + 3 x 3 2 + 4 x 4 2 + 5 x 5 2 max \quad z = x_1^2+x_2^2+3x_3^2+4x_4^2+5x_5^2 maxz=x12+x22+3x32+4x42+5x52

{ 0 ≤ x i ≤ 99 x 1 + x 2 + x 3 + x 4 + x 5 ≤ 400 x 1 + 2 x 2 + 2 x 3 + x 4 + 6 x 5 ≤ 800 2 x 1 + x 2 + 6 x 3 ≤ 200 x 3 + x 4 + 5 x 5 ≤ 200 \left\{ \begin{aligned} \\ 0 \leq x_i&\leq 99\\ x_1+x_2+x_3+x_4+x_5&\leq400\\ x_1+2x_2+2x_3+x_4+6x_5&\leq800\\ 2x_1+x_2+6x_3&\leq200\\ x_3+x_4+5x_5&\leq200\\ \end{aligned} \right. 0xix1+x2+x3+x4+x5x1+2x2+2x3+x4+6x52x1+x2+6x3x3+x4+5x599400800200200

如果用显枚举法试探,共需计算(100)5 = 1010 个点,其计算量非常之大。然而应用蒙特卡洛去随机计算106 个点,便可找到满意解.(证明不详细讲,可看下面代码)

1.编写 M 文件 mente.m 定义目标函数 f 和约束向量函数 g

function [f,g]=mengte(x);
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)-x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];

2.编写M文件mainint.m如下求问题的解:

rand('state',sum(clock)); 
p0=0; 
tic 
for i=1:10^6 
 x=99*rand(5,1); 
x1=floor(x);x2=ceil(x); 
[f,g]=mengte(x1); 
if sum(g<=0)==4 
 if p0<=f 
 x0=x1;p0=f; 
 end 
end 
[f,g]=mengte(x2); 
if sum(g<=0)==4 
 if p0<=f 
 x0=x2;p0=f; 
 end 
end 
end 
x0,p0 
toc

§5 指派问题的计算机求解

整数规划问题的求解可以使用 Lingo 等专用软件。对于一般的整数规划问题,无法直接利用 Matlab 的函数,必须利用 Matlab编程实现分枝定界解法和割平面解法。但对于指派问题等0−1整数规划问题,可以直接利用 Matlab 的函数 bintprog 进行求解。
例 求解下列指派问题,已知指派矩阵为
[ 3 8 2 10 3 8 7 2 9 7 6 4 2 7 5 8 4 2 3 5 9 10 6 9 10 ] \left[ \begin{matrix} 3 & 8 & 2 & 10 & 3 \\ 8 & 7 & 2 & 9 & 7 \\ 6 & 4 & 2 & 7 & 5 \\ 8 & 4 & 2 & 3 & 5 \\ 9 & 10 & 6 & 9 & 10 \\ \end{matrix} \right] 3868987441022226109739375510

编写matlab程序

c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5 ;8 4 2 3 5;9 10 6 9 10]; 
c=c(:); 
a=zeros(10,25); 
for i=1:5 
 a(i,(i-1)*5+1:5*i)=1; 
 a(5+i,i:5:25)=1; 
end 
b=ones(10,1); 
[x,y]=bintprog(c,[],[],a,b); 
x=reshape(x,[5,5]),y

求得最优指派方案为 x 15 = x 23 = x 32 = x 44 = x 51 = 1 x_{15} = x_{23} = x_{32} = x_{44} = x_{51} = 1 x15=x23=x32=x44=x51=1,最优值为 21。

相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页