0-1规划

原理介绍

0 − 1 0-1 01 规划是一种特殊的整形规划,其中变量 x i x_i xi 要么取值为 0 0 0,要么取值为 1 1 1,这里的 x i x_i xi 也称为 0 − 1 0-1 01 规划变量。 0 − 1 0-1 01 规划问题可以归纳为如下形式:
m i n ∑ j = 1 n c j x j s . t . ∑ j = 1 n a i j x i j ≤ b i , i = 1 , 2 , . . . , m ∑ j = 1 n a i j 1 x j ≤ b i 1 , i = 1 , 2 , . . . , m x j = 0 或 x j = 1 , j = 1 , 2 , . . . , n min \sum_{j=1}^{n} c_j x_j \\ \\ s.t. \sum_{j=1}^{n} a_{ij} x_{ij} \leq b_i,\quad i=1,2,...,m \\ \sum_{j=1}^{n} a_{ij}^{1} x_j \leq b_{i}^{1},\quad i=1,2,...,m \\ x_j=0或x_j=1,\quad j=1,2,...,n minj=1ncjxjs.t.j=1naijxijbi,i=1,2,...,mj=1naij1xjbi1,i=1,2,...,mxj=0xj=1,j=1,2,...,n
MATLAB提供了函数intlinprog求解 0 − 1 0-1 01 规划问题,其调用格式如下所示:

x = intlinprog(f,intcon,A,b)
x = intlinprog(f,intcon,A,b,Aeq,beq)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0)
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options)
x = intlinprog(problem)
[x,fval,exitflag,output] = intlinprog(...)

intlinprog是混合整数线性规划(MILP)求解器。其中, f , x , i n t c o n , b , b e q , l b , u b f,x,intcon,b,beq,lb,ub f,x,intcon,b,beq,lb,ub 是向量, A , A e q A,Aeq A,Aeq 是矩阵。下面分别对上述七种调用格式进行说明。

第一种调用格式表示求解整数规划的 min ⁡ x f T x \min_{x} f^{T}x minxfTx 问题,使得 A ∗ x ≤ b A*x \leq b Axb 成立;

第二种调用格式表示求解整数规划的问题 min ⁡ x f T x \min_{x} f^{T}x minxfTx,使得 A ∗ x ≤ b , A e q ∗ x ≤ b e q A*x \leq b, Aeq*x\leq beq Axb,Aeqxbeq 成立;

第三种调用格式表示在 l b ≤ x ≤ u b lb \leq x \leq ub lbxub 范围内求解整数规划的问题 min ⁡ x f T x \min_{x} f^{T}x minxfTx,使得 A ∗ x ≤ b , A e q ∗ x ≤ b e q A*x \leq b, Aeq*x\leq beq Axb,Aeqxbeq 成立;

第四种调用格式表示在 l b ≤ x ≤ u b lb \leq x \leq ub lbxub 范围内并且给定 x 0 x_0 x0 为初始值的条件下,求解整数规划的问题 min ⁡ x f T x \min_{x} f^{T}x minxfTx,使得 A ∗ x ≤ b , A e q ∗ x ≤ b e q A*x \leq b, Aeq*x\leq beq Axb,Aeqxbeq 成立,如果此时以 x 0 x_0 x0 为初始值找不到解,则以默认的初始值求解;

第五种调用格式表示利用 o p t i m s e t optimset optimset 函数制定的优化参数 o p t i o n s options options x 0 x_0 x0 为初始值求解整数规划问题 min ⁡ x f T x \min_{x} f^{T}x minxfTx,使得 A ∗ x ≤ b , A e q ∗ x ≤ b e q A*x \leq b, Aeq*x\leq beq Axb,Aeqxbeq 成立;

第六种调用格式表示求解由问题 p r o b l e m problem problem 指定的整数规划问题;

第七种调用格式表示在求解整数规划问题时返回最小值点 x x x、目标函数 f T x f^Tx fTx 在最小值点 x x x 处的函数值 f v a l fval fval、函数退出信息 e x i t f l a g exitflag exitflag,以及一个包含优化信息的结构体 o u t p u t output output

示例

某生产车间有四位工人,现要安排他们完成四项工作,每人各项工作所消耗的时间参见下表所示:

四人各项工作所耗时间
-ABCD
15182124
19232218
26171619
19212317

请问安排哪位工人完成哪项工作,可使总的消耗工时最少?

解析

根据题意,要将上述问题转换为线性规划问题。首先引进变量 x i j , i = 1 , 2 , 3 , 4 , j = 1 , 2 , 3 , 4 x_{ij},i=1,2,3,4,j=1,2,3,4 xij,i=1,2,3,4,j=1,2,3,4,其值要么为 0 0 0,要么为 1 1 1。令 x i j = 1 x_{ij}=1 xij=1,当指派第 i i i 个工人去完成第 j j j 项工作;否则 x i j = 0 , i , j = 1 , 2 , 3 , 4 x_{ij}=0,i,j=1,2,3,4 xij=0,i,j=1,2,3,4。同时,用 c i j c_{ij} cij 表示第 i i i 个工人做第 j j j 项工作所需的时间。则上述的 0 − 1 0-1 01 规划问题可以表示为
m i n ∑ i = 1 4 ∑ j = 1 4 c i j x i j s . t . ∑ j = 1 4 x i j = 1 , i = 1 , . . . , 4 ∑ i = 1 4 x i j = 1 , j = 1 , . . . , 4 x i j = { 1 , 指 派 第 i 个 工 人 去 完 成 第 j 项 工 作 0 , e l s e ( i , j = 1 , . . . , 4 ) min \sum_{i=1}^{4} \sum_{j=1}^{4}c_{ij}x_{ij} \\ s.t. \sum_{j=1}^{4}x_{ij}=1,\quad i=1,...,4 \\ \sum_{i=1}^{4}x_{ij}=1,\quad j=1,...,4 \\ x_{ij}=\left\{\begin{matrix} 1, \quad 指派第 i 个工人去完成第 j 项工作 \\0, \quad else\end{matrix}\right.\quad (i,j=1,...,4) mini=14j=14cijxijs.t.j=14xij=1,i=1,...,4i=14xij=1,j=1,...,4xij={1,ij0,else(i,j=1,...,4)
在这里,设 x = ( x 11 , x 12 , . . . , x 14 , x 21 , . . . , x 24 , . . . x 41 , . . . , x 44 ) T x=(x_{11},x_{12},...,x_{14},x_{21},...,x_{24},...x_{41},...,x_{44})^T x=(x11,x12,...,x14,x21,...,x24,...x41,...,x44)T

创建 M 程序文件,写入下述代码:

f = [15;18;21;24;19;23;22;18;26;17;16;19;19;21;23;17];
intcon=1:16;
Aeq = [1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0;
     0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0;
     0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0;
     0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1;
     1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0;
     0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0;
     0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0;
     0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1];
 beq = ones(8,1);
 lb=zeros(16,1);
 [x,fval] = intlinprog(f,intcon,[],[],Aeq,beq,lb,[])

运行之后,输出下述结果:

LP:                Optimal objective value is 70.000000.                                            


Optimal solution found.

Intlinprog stopped at the root node because the objective value is within a gap tolerance of the optimal value, options.AbsoluteGapTolerance = 0 (the default value). The intcon variables are
integer within tolerance, options.IntegerTolerance = 1e-05 (the default value).


x =

     0
     1
     0
     0
     1
     0
     0
     0
     0
     0
     1
     0
     0
     0
     0
     1


fval =

    70

参考文献

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值