方形件组批优化

方形件组批优化问题

问题来源

第十九届中国研究生数学建模竞赛

背景介绍

智能制造被“中国制造2025”列为主攻方向, 而个性化定制、更短的产品及系统生命周期、互联互通的服务模式等成为目前企业在智能制造转型中的主要竞争点。以离散行业中的产品为例,如电子器件、汽车、航空航天零部件等,这些产品均是依赖于机械设计、可分散加工、可灵活组装且同类产品款式极多。对于此类产品,客户可能提出的产品需求难以穷举、订单规模难以预测且产品质量要求极高。此时“个性化定制”的服务需求则要求企业具有高效快速的需求分析及产品设计能力、具有柔性且精益的生产流程、具有完整且精细的全流程生产管控能力。

方形件产品(也称板式类产品)是以板材为主要原片、通过平面加工后的几种板式配件装配而形成的一类产品。常见方形件产品制造企业,如3C(计算、通讯、消费电子)、板式家具、玻璃、钣金件等行业,多采用“多品种小批量”的个性化定制生产,由于企业订单数量庞大,生产组织通常采用“订单组批+批量生产+订单分拣”的模式,通过使用订单组批来实现批量切割,提高原材料的利用率,加工完成后再按不同客户订单进行分拣。

上述个性化定制生产模式中的订单组批排样优化至关重要,订单组批是将不同订单组成若干批次,实现订单的批量化生产。在对小批量、多品种、大规模的订单进行组批生产时,如果组批批次太小,材料利用率低,生产效率低;如果组批批次太大,材料利用率会提高,但订单交货期得不到保证,订单分拣难度提高,生产效率降低,缓冲区容量不足而造成堵塞等,需要解决个性化与生产高效性之间的矛盾。

排样优化本质上一个下料问题(也称切割填充问题),优化的目的是合理规划方形件在板材上的布局,以减少下料过程中存在板材浪费,简化切割过程。此问题是一种计算复杂度很高的组合优化问题,也是运筹学中的一个重要分支。下料作为众多制造企业生产链中产品及零部件生产的第一道工序,消耗的材料和资源不容小视,如何提高材料利用率,降低原材料消耗,是企业减少资源和能源浪费,承担环境责任所要解决的关键问题。

问题描述

订单组批问题:在考虑订单交货期、设备产能负荷、仓储容量、材料利用率、生产效率、生产工艺约束等因素下,对生产订单进行组批优化。使具有相同材质、交货期相近、工艺相似的订单安排在同一个生产批次, 通过订单组批优化来保证交货期, 提高原材料的利用率,提高设备生产效率等。为便于统一处理数据和体现问题本质,本次赛题所有订单的交货期均相同,不做区分。批次的定义为完成若干订单全部任务且不含任何不完整订单任务的订单集合。

下料优化问题(也称排样优化问题):根据同一生产批次内方形件的尺寸与数量,选择原片的规格和数量,进行下料排样优化,最大化板材原片利用率。依据切割工序的工艺要求,排样方案必须满足“一刀切”(也称齐头切,Guillotine cut)约束(任何一次直线切割都要保证板材可分离,换言之,每次直线切割使得板材分成两块)。下料优化问题属于具有“一刀切”约束的板型材方形件排样优化问题。

考虑切割工艺的方式不同,分齐头切(guillotine cut)和非齐头切(如图1),齐头切又可以细分精确方式和非精确方式(涉及到切割的阶段数,如图2).图2中的三阶段排样方式主要有三种不同的类型:三阶段非精确(3NE)排样方式、三阶段匀质排样方式(3E)、三阶段同质排样方式(3H)。其中 3E 和 3H 排样方式可在三个阶段内切割出准确尺寸的方形件,因此都属于精确排样方式。3NE 排样方式中,部分方形件还需要额外的第四阶段切割才能得到满足规格尺寸要求。

方形件组批优化_第1张图片
方形件组批优化_第2张图片
由于涉及到阶段数不同,不同文献对于切割每个阶段的称呼不一样,为了便于理解和统一表述形式,采用英文的方式形容关键阶段模块的描述,具体可参见图3(实际切割过程中,第一刀可能垂直于长边,也可能垂直于短边,图3以垂直于其中一条边为例)。

方形件组批优化_第3张图片

因为常见的阶段最多为3-4个,因此以3阶段的切割方式为例(如图3),第1阶段的横向切割生成模块称之为stripe(条带),如Stripe1和Strip2;第2阶段纵向切割生成模块称之为stack(栈),如Strip1继续被切割分成Stack1、Stack2和Stack3;第三阶段横向切割生成模块称之为item(产品项),如Stack1继续被切割分成Item1、Item2和Item3。

问题

问题假设:

  • 只考虑齐头切的切割方式(直线切割、切割方向垂直于板材一条边,并保证每次直线切割板材可分离成两块);
  • 切割阶段数不超过3,同一个阶段切割方向相同;
  • 排样方式为精确排样;
  • 假定板材原片仅有一种规格且数量充足;
  • 排样方案不用考虑锯缝宽度(即切割的缝隙宽度)影响。

子问题1:排样优化问题。要求建立混合整数规划模型,在满足生产订单需求和相关约束条件下,尽可能减少板材用量。

约束:

  • 在相同栈(stack)里的产品项(item)的宽度(或长度)应该相同;

  • 最终切割生成的产品项是完整的,非拼接而成。

符号定义

  • H:原片的高度
  • W:原片的宽度
  • h i h_i hi:产品 i i i的宽度
  • w i w_i wi:产品 i i i的高度
  • x j , i x_{j,i} xj,i:0-1变量,如果item i i i被包含于stack j j j,则 x j , i = 1 x_{j,i}=1 xj,i=1,反之为0
  • y k , j y_{k,j} yk,j:0-1变量,如果stack j j j被包含于stripe k k k,则 y k , j = 1 y_{k,j}=1 yk,j=1,反之为0
  • z l , k z_{l,k} zl,k:0-1变量,如果stripe k k k属于原片 l l l,则 z l , k = 1 z_{l,k}=1 zl,k=1,反之为0
  • δ l , i , j \delta_{l,i,j} δl,i,j:0-1变量,在原片 l l l中,如果item i i i在stripe j j j中最高的stack j j j,则 δ l , i , j = 1 \delta_{l,i,j}=1 δl,i,j=1,反之为0

模型

m i n i m i z e ∑ l = 1 n γ l , l minimize \quad \sum_{l=1}^n \gamma_{l,l} minimizel=1nγl,l
s . t ∑ j = 1 i α j , i = 1 , ∀ i = 1 , … , n ∑ i = j + 1 n α j , i = ( n − j ) α j , j , ∀ j = 1 , … , n α j , i = 0 , ∀ j = 1 , … , n − 1 , ∀ i > j ∣ w i ≠ w j ∨ h i + h j > H ∑ k = 1 n β k , j = α j , j , ∀ j = 1 , … , n ∑ i = j n h i α j , i ≤ ∑ i = k n h i α k , i + ( H + 1 ) ( 1 − β k , j ) , ∀ k = 2 , … , n , ∀ j = 1 , … , k − 1 ∑ i = j n h i α j , i ≤ ∑ i = k n h i α k , i + H ( 1 − β k , j ) , ∀ k = 1 , … , n − 1 , ∀ j = k + 1 , … , n ∑ j = 1 n w j β k , j ≤ W β k , k , ∀ k = 1 , … , n ∑ l = 1 k γ l , k = β k , k , ∀ k = 1 , … , n ∑ i = l n h i γ l , i + ∑ i = l + 1 n h i ∑ j = l i − 1 δ l , i , j ≤ H γ l , l , ∀ l = 1 , … , n − 1 α j , i + γ l , j − 1 ≤ δ l , i , j ≤ ( α j , i + γ l , j ) / 2 , ∀ l = 1 , … , n − 1 , ∀ i = l + 1 , … , n , ∀ j = l , … , i − 1 ∑ k = l + 1 n γ l , k ≤ ( n − l ) γ l , l , ∀ l = 1 , … , n − 1 α j , i ∈ { 0 , 1 } , ∀ j = 1 , … , n , i = j , … , n β k , j ∈ { 0 , 1 } , ∀ k = 1 , … , n , j = 1 , … , n γ l , k ∈ { 0 , 1 } , ∀ l = 1 , … , n , ∀ k = l , … , n δ l , i , j ∈ { 0 , 1 } , ∀ l = 1 , … , n − 1 , i = l + 1 , … , n s.t \begin{align} &\sum_{j=1}^i \alpha_{j,i} = 1,\quad \forall i = 1,\dots,n \\ &\sum_{i=j+1}^n \alpha_{j,i} = (n-j) \alpha_{j,j},\quad \forall j = 1,\dots,n\\ &\alpha_{j,i}=0,\quad \forall j=1,\dots,n-1,\forall i > j|w_i \neq w_j \vee h_i + h_j > H \\ &\sum_{k=1}^n \beta_{k,j} = \alpha_{j,j},\quad \forall j = 1,\dots,n \\ &\sum_{i=j}^n h_i \alpha_{j,i} \le \sum_{i=k}^n h_i \alpha_{k,i} + (H+1)(1-\beta_{k,j}),\quad \forall k=2,\dots,n,\forall j=1,\dots,k-1\\ &\sum_{i=j}^n h_i \alpha_{j,i} \le \sum_{i=k}^n h_i \alpha_{k,i} + H(1-\beta_{k,j}),\quad \forall k=1,\dots,n-1,\forall j=k+1,\dots,n\\ &\sum_{j=1}^n w_j \beta_{k,j} \le W \beta_{k,k},\quad \forall k=1,\dots,n\\ &\sum_{l=1}^k \gamma_{l,k} = \beta_{k,k},\quad \forall k = 1,\dots,n\\ &\sum_{i=l}^n h_i \gamma_{l,i} + \sum_{i=l+1}^n h_i \sum_{j=l}^{i-1}\delta_{l,i,j} \le H \gamma_{l,l},\quad \forall l = 1,\dots,n-1 \\ &\alpha_{j,i} + \gamma_{l,j} - 1 \le \delta_{l,i,j} \le (\alpha_{j,i} + \gamma_{l,j})/2,\quad \forall l=1,\dots,n-1,\forall i=l+1,\dots,n,\forall j=l,\dots,i-1\\ &\sum_{k=l+1}^n \gamma_{l,k} \le (n-l) \gamma_{l,l},\quad \forall l=1,\dots,n-1\\ &\alpha_{j,i} \in \{0,1\},\quad \forall j=1,\dots,n,i=j,\dots,n\\ &\beta_{k,j} \in \{0,1\},\quad \forall k=1,\dots,n,j=1,\dots,n\\ &\gamma_{l,k} \in \{0,1\},\quad \forall l=1,\dots,n,\forall k=l,\dots,n\\ &\delta_{l,i,j} \in \{0,1\},\quad \forall l=1,\dots,n-1,i=l+1,\dots,n \end{align} s.tj=1iαj,i=1,i=1,,ni=j+1nαj,i=(nj)αj,j,j=1,,nαj,i=0,j=1,,n1,i>jwi=wjhi+hj>Hk=1nβk,j=αj,j,j=1,,ni=jnhiαj,ii=knhiαk,i+(H+1)(1βk,j),k=2,,n,j=1,,k1i=jnhiαj,ii=knhiαk,i+H(1βk,j),k=1,,n1,j=k+1,,nj=1nwjβk,jWβk,k,k=1,,nl=1kγl,k=βk,k,k=1,,ni=lnhiγl,i+i=l+1nhij=li1δl,i,jHγl,l,l=1,,n1αj,i+γl,j1δl,i,j(αj,i+γl,j)/2,l=1,,n1,i=l+1,,n,j=l,,i1k=l+1nγl,k(nl)γl,l,l=1,,n1αj,i{0,1},j=1,,n,i=j,,nβk,j{0,1},k=1,,n,j=1,,nγl,k{0,1},l=1,,n,k=l,,nδl,i,j{0,1},l=1,,n1,i=l+1,,n

模型释义

  • 目标函数:最小化使用的原片数量

  • 约束(1):每个item被生产一次;

  • 约束(2):item只能安排到已有的stack;

  • 约束(3):同一个stack中的item宽度必须相同,且任意两个item的高度之和不能超过原片高度 H H H

  • 约束(4):stack必定属于某一个stripe;

  • 约束(5-6):stack于stripe之间的高度约束;

  • 约束(7):同一个stripe中的stack宽度之和小于等于原片的宽度 W W W

  • 约束(8):stripe必须被包含于某一个原片;

  • 约束(9):stripe的高度取决于其包含的stack最大高度,并且同一原片中的stripe高度之和应小于等于原片高度;

  • 约束(10):当且仅当 α j , i = 1 \alpha_{j,i}=1 αj,i=1 γ l , j = 1 \gamma_{l,j}=1 γl,j=1时, δ l , i , j = 1 \delta_{l,i,j}=1 δl,i,j=1

  • 约束(11):stripe只能安排到已使用的原片中;

  • 约束(12-15):0-1变量声明。

模型二:

子问题2:订单组批问题。要求建立混合整数规划模型,对数据集B中全部的订单进行组批,然后对每个批次进行独立排样,在满足订单需求和相关约束条件下,使得板材原片的用量尽可能少。

在满足子问题1约束的基础上进一步要求:

  • 每份订单当且仅当出现在一个批次中;
  • 每个批次中的相同材质的产品项(item)才能使用同一块板材原片进行排样;
  • 为保证加工环节快速流转,每个批次产品项(item)总数不能超过限定值;
  • 因工厂产能限制,每个批次产品项(item)的面积总和不能超过限定值;

代码实现

方形件组批优化_第4张图片

代码见github

你可能感兴趣的:(Algorithms,4,程序人生)