列生成算法及python实践

列生成算法及python实践

列生成算法是在混合整数规划中一个经典的且强大的精确算法。

引例-下料问题

一家木材厂有一种长度为80英寸的木材原料。现在有3个顾客,他们分别需要46个10英寸,22个11英寸,43个19英寸的木材产品。
为了满足客户不同的需求并且使得切割的原料最少,问该公司最少需要的木材多少根,以及如何切割?

为了方便求解该问题,我们引入如下记号:

记号 含义
m m m 客户的集合
W W W 木材的最大宽度
w i , i ∈ m w_i,i\in m wiim 客户 i i i要求的棒材宽度
n i , i ∈ m n_i,i\in m niim 客户 i i i对棒材宽度为 w i w_i wi的需求数量

求解方法

Kantorovich 建模方式

记号 含义
K \mathcal{K} K 待切割的棒材的集合
y k ∈ { 0 , 1 } y_k\in\{0,1\} yk{ 0,1} 棒材 k k k是否被切割,1表示切割,0表示不切割
x i k x_i^k xik 棒材 k k k被规格为 w i w_i wi切割的个数

于是可以将数学模型表述为如下形式:
min ∑ k ∈ K y k s.t. ∑ k ∈ K x i k ≥ n i , i = 1 , … , m , (demand) ∑ i = 1 n w i x i k ≤ W y k , k ∈ K , (width limitation) x i k ∈ Z + , y k ∈ { 0 , 1 } . \begin{aligned} &\text{min} \sum_{k\in\mathcal{K}}y_k \\ &\text{s.t.} \sum_{k\in\mathcal{K}}x_i^k\geq n_i,\quad i=1,\ldots,m,\quad\text{(demand)} \\ &\sum_{i=1}^nw_ix_i^k\leq Wy_k,\quad k\in\mathcal{K},\quad\text{(width limitation)} \\ &x_i^k\in\mathbb{Z}_+, y_k\in\{0,1\}. \end{aligned} min

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾盼w(゚Д゚)w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值