【列生成CG】

列生成简介

列生成(column generation)用于求解大规模线性规划问题,其优点在于不需要枚举所有可行解而快速得到精确解的一种方法。

列生成解决问题主要流程

列生成求解问题主要包括主问题(MP),限制主问题(RMP)和子问题(sub-problem)。
首先在限制主问题上,构建可行初始基向量,求解得到的参数传到子问题中,根据这些参数构建新子问题并求解,根据检验系数符号,判断是否将新的列加入限制主问题中,接着求解限制主问题,直到子问题不再得到可行列加入到主问题中。

在这里插入图片描述

案例:Cutting Stock Problem(CSP)

【问题】现有数量不限长度为17m的钢管,根据生产要求,需要数量分别为25,20,15的长度分别为3m,5m,9m的钢条。求至少需要切割多少条钢管以满足生产要求。

【原模型】
1.目标:使用的钢条数最少;
2.约束:
2.1满足生产各种长度钢条数量要求;
2.2每条钢管长度限制;

决策变量:
x i n x_i^n xin表示第 i i i条钢管切割类型 n n n的数量,整数;
y i y_i yi表示钢管 i i i是否使用,0,1变量。

目标函数:
M i n ∑ i = 1 N y i Min \sum_{i=1}^{N}y_i Mini=1Nyi
约束条件:
1.满足生产各种型号数量要求
∑ i = 1 N x i j < = b j \sum_{i=1}^{N} x_{i}^{j}<=b_j i=1Nxij<=bj
2.长度限制和钢管切割才使用
∑ j = 1 J l j x i j < = L y i \sum_{j=1}^{J}l_j x_{i}^{j}<=Ly_i j=1Jljxij<=Lyi
3.变量符号限制
x i j ∈ Z + x_i^{j} \in Z^+ xijZ+
y i ∈ 0 , 1 y_i\in {0,1} yi0,1

考虑钢管切割为几种类型的钢条模式构成集合P;
a i p a_ip aip:为模式p下类型为i的钢条数量;
x p x_p xp:为模式p下使用的钢条数量;

则问题转变为
【限制主问题】
目标:
M i n ( Z = ∑ p P x p ) Min (Z= \sum_{p}^{P}x_p) Min(Z=pPxp)
约束:
∑ A X > = b \sum AX>=b AX>=b
X > = 0 X>=0 X>=0
【限制主问题对偶问题】
其对偶问题dual为:
目标函数: M a x ( Z d u a l = b T π ) Max (Z^{dual}= b^T\pi) Max(Zdual=bTπ)
约束条件:
∑ A T π < = 1 T \sum A^{T}\pi<=1^{T} ATπ<=1T
π > = 0 \pi>=0 π>=0

【子问题】
目标函数:
M i n ( 1 − ∑ i π i a i p ) \\Min (1-\sum_{i}\pi_{i}a_{ip}) Min(1iπiaip)
约束条件:
L a p < = L La_p<=L Lap<=L
a i p ∈ Z + a_{ip}\in Z^+ aipZ+

代码:列生成结合Cplex求解CSP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值