🌅整数规划
🧠本篇只包含软件求解,算法尚未了解
整数规划:数学规划中的变量限制为整数
- 纯整数规划 :决策变量都是整数
- 0-1整数规划 (指派问题)
- 混合整数规划:部分决策变量取整数
- 混合0-1整数规划
- 整数规划特点:
- 原线性规划最优解为整数,则整数规划最优解与之一致
- 原线性规划有最优解,整数规划未必有可行解
- 求解算法:
- 分枝定界法:纯或混合整数规划✅
- 割平面法:纯或混合整数规划✅
- 隐枚举法 :求解0-1整数规划
- 过滤隐枚举法
- 分枝隐枚举法
- 匈牙利法(指派问题:0-1整数规划)
- Monte Carlo 法:求解各种类型规划
求解整数规划
-
lingo 🎯
- @bin(x(k)) 0-1整数
- @gin(x(k)) 限制为整数
-
python cvxpy
- 设置决策变量为整数
x=cp.Variable(2,integer=True)#将2个决策变量设置为整数
- 对于0-1 整数规划:
constrain=[x>=0,x<=1,...]#注意声明的x的维度
-
matlab (对应的数学模型):
m a x z = f T x x ( i n t c o n ) 为整数 s . t . { A x ≤ b , A e q ⋅ x = b e q , l b ≤ x ≤ u b . max~z=f^Tx\\ x(intcon)为整数\\ s.t.\left\{ \begin{aligned} &Ax\le b,\\ &Aeq\cdot x=beq,\\ &lb\le x\le ub. \end{aligned} \right. max z=fTxx(intcon)为整数s.t.⎩ ⎨ ⎧Ax≤b,Aeq⋅x=beq,lb≤x≤ub.-
调用函数intlinprog()必须要把高维决策变量转化为一维决策变量
-
可以据此求解混合整数规划(未必有可行解)
[x,fval]=intlinprog(f,intction,A,b,Aeq,beq,lb,ub) %f 为价值系数 %inction :一维向量,向量元素指的是作为整数的决策变量 如:1:3(x1,x2,x3为整数) %对于0-1整数规划可以在lb,ub进行限制(zeros(n,1),ones(n,1))
-
互斥约束条件
m个互斥的约束条件:
a i 1 x 1 + ⋯ + a i n x n ≤ b i , i = 1 , 2 , … , m a_{i1}x_1+\dots+a_{in}x_n\le b_i,i=1,2,\dots,m ai1x1+⋯+ainxn≤bi,i=1,2,…,m ,但这m个互斥的条件只有一个起作用,引入m个0-1变量y
约束条件变形为:
a i 1 x 1 + ⋯ + a i n x n ≤ b i + ( 1 − y i ) M , i = 1 , 2 , … , m a_{i1}x_1+\dots+a_{in}x_n\le b_i+(1-y_i)M,i=1,2,\dots,m ai1x1+⋯+ainxn≤bi+(1−yi)M,i=1,2,…,m
∑ i = 1 m y i = 1 \sum_{i=1}^{m}y_i=1 ∑i=1myi=1
其中M趋近与 ∞ \infty ∞ ,所以这m个 y i y_i yi只能有一个取1(因为和为1),而其他取0后等式的右边都趋于 ∞ \infty ∞ ,该约束失效
固定费用问题
目标函数在变化,会随着决策变量的改变而发生变化
i = 1 , 2 , ⋯ , n i=1,2,\cdots,n i=1,2,⋯,n 代表n种生产方式
x i x_i xi表示采用第 i i i种生产方式的产量
c i c_i ci表示采用第 i i i种方式时的变动成本
k i k_i ki表示采用第 i i i种方式时的固定成本
所以采用各种方式的总成本为:
P i = { k i + c i x i , 当 x i > 0 , 0 , 当 x i = 0 , i = 1 , 2 , … , n P_i=\left\{ \begin{aligned} &k_i+c_ix_i,当x_i>0,\\ &0,\quad\quad\quad~~当x_i=0,i=1,2,\dots,n\\ \end{aligned} \right. Pi={
ki+cixi,当xi>0,0, 当xi=0,i=1,2,…,n
y i y_i yi取0或1代表(不)采用第 i种生产方式
所以目标函数: m i n z = ( k 1 y 1 + c 1 x 1 ) + ⋯ + ( k n y n + c n x n ) min~z=(k_1y_1+c_1x_1)+\dots+(k_ny_n+c_nx_n) min z=(k1y1+c1x1)+⋯+(knyn+cn<