生产线平衡问题的+Leapms解法

生产线平衡问题 (The Assembly Line Balancing Problem)

生产线又叫做组装生产线, 是把产品的工艺做串行生产安排的流水生产线。一个产品的组装需要不同的工序来完成,且工序之间有先后次序要求。

下表是Jackson, J. R. . (1956)给出一个产品工序的装配次序要求:

工序 执行时长 紧前工序
1 6 --
2 2 1
3 5 1
4 7 1
5 1 1
6 2 2
7 3 3,4,5
8 6 6
9 5 7
10 5 8
11 4 10,9

上表也可以用有向图表示:

生产线平衡问题的目的是:把工序划分成工作站,且满足工序紧前要求。优化目标有两种:(1)在生产节拍被指定时使得工作站数量最少;或(2)在工作站数量被限定情况下使得生产节拍最小。

前一种目标被称为第一类生产线平衡问题,后一种目标被称为第二类生产线平衡问题。


第2类问题生产线平衡问题的建模

(1)问题

已知工作站共有m=5个,工序共有n=11个,极小化生产节拍。

(2)有向图的表达

有向图可以表达为节点的点对集合,例如 e={ 1 2, 1 3, 1 4,...,10 11}

第k条边的前后两个顶点一般被写成 a[k], 和 b[k]。第k条边被记为 (a[k], b[k])

边的数目 ne 是 e 中元素数除以2,即:ne=_$(e)/2

(3)决策变量

设 x[i][j] 为0-1变量,表示工序j是否被分配给工作站i。其中i=1,...,m; j=1,...,n。

(4)依赖变量

设变量c为生产线的节拍

(5)目标是极小化生产节拍,即:

  minimize  c

(6)约束1: 每个工序被分配给且仅被分配给一个工作站:

sum{i=1,...,m} x[i][j] =1 | j =1,...,n

(7)约束2:节拍大于等于任何一个工作站的执行时长:

c >= sum{j=1,...,n}x[i][j]t[j]   | i=1,...,m

(8)约束3:对任何边k,如果其后节点b[k]被分配到工作站i,则其前节点 a[k] 必须被分配到 j=1,...,i 中的某个节点,即:

x[i][b[k]] <= sum{j=1,...,i}x[j][a[k]]   |  i=1,...,m;k=1,...,ne

第2类问题生产线平衡问题的+leapms模型

//第二类生产线平衡问题
minimize  c

subject to
    sum{i=1,...,m} x[i][j] =1 | j =1,...,n
    c >= sum{j=1,...,n}x[i][j]t[j] | i=1,...,m
    x[i][b[k]]<=sum{j=1,...,i}x[j][a[k]]|i=1,...,m;k=1,...,ne

where
    m,n,ne are integers
    t[j] is a number | j=1,...,n
    e is a set
    a[k],b[k] is an integer|k=1,...,ne
    c is a variable of number
    x[i][j] is a variable of binary|i=1,...,m;j=1,...,n

data
    m=5
    n=11
    t={6 2 5 7 1 2 3 6 5 5 4}
    e={
      1 2
      1 3
      1 3
      1 5
      2 6
      3 7
      4 7
      5 7
      6 8
      7 9
      8 10
      9 11
      10 11
    }

data_relation
  ne=_$(e)/2
  a[k]=e[2k-1]|k=1,...,ne
  b[k]=e[2k]|k=1,...,ne

第2类问题生产线平衡问题的模型求解

Welcome to +Leapms ver 1.1(162260) Teaching Version  -- an LP/LMIP modeling and
solving tool.欢迎使用利珀 版本1.1(162260) Teaching Version  -- LP/LMIP 建模和求
解工具.

+Leapms>load
 Current directory is "ROOT".
 .........
        p2.leap
 .........
please input the filename:p2
================================================================
1:  //第二类生产线平衡问题
2:  minimize  c
3:
4:  subject to
5:      sum{i=1,...,m} x[i][j] =1 | j =1,...,n
6:      c >= sum{j=1,...,n}x[i][j]t[j] | i=1,...,m
7:      x[i][b[k]]<=sum{j=1,...,i}x[j][a[k]]|i=1,...,m;k=1,...,ne
8:
9:  where
10:      m,n,ne are integers
11:      t[j] is a number | j=1,...,n
12:      e is a set
13:      a[k],b[k] is an integer|k=1,...,ne
14:      c is a variable of number
15:      x[i][j] is a variable of binary|i=1,...,m;j=1,...,n
16:
17:  data
18:      m=5
19:      n=11
20:      t={6 2 5 7 1 2 3 6 5 5 4}
21:      e={
22:        1 2
23:        1 3
24:        1 3
25:        1 5
26:        2 6
27:        3 7
28:        4 7
29:        5 7
30:        6 8
31:        7 9
32:        8 10
33:        9 11
34:        10 11
35:      }
36:  data_relation
37:    ne=_$(e)/2
38:    a[k]=e[2k-1]|k=1,...,ne
39:    b[k]=e[2k]|k=1,...,ne
40:
================================================================
>>end of the file.
Parsing model:
1D
2R
3V
4O
5C
6S
7End.
..................................
number of variables=56
number of constraints=81
..................................
+Leapms>mip
relexed_solution=9.2; number_of_nodes_branched=0; memindex=(2,2)
 nbnode=230;  memindex=(24,24) zstar=13; GB->zi=10
The Problem is solved to optimal as an MIP.
找到整数规划的最优解.非零变量值和最优目标值如下:
  .........
    c* =10
    x1_1* =1
    x1_5* =1
    x2_2* =1
    x2_6* =1
    x2_8* =1
    x3_3* =1
    x3_10* =1
    x4_4* =1
    x4_7* =1
    x5_9* =1
    x5_11* =1
  .........
    Objective*=10
  .........
+Leapms>

上面的结果显示, 目标值即最小节拍为10, 分配方案是: 工序1,5分配在工作站1, 工序2,6,8 分配在工作站2, 工序3,10 分配在工作站3, 工序4,7分配在工作站4, 工序9,11分配在工作站5。

第2类生产线平衡问题求解结果图示


第1类生产线平衡问题

由求解第2类生产线平衡问题知道,工作站数是5时,最小节拍是10。假设如果将节拍上限增加到10,问是否能够减小工作站数目。

第1类生产线平衡问题的建模

第1类生产线平衡问题的数学模型见Ritt, M. , & Costa, A. M. . (2015)。

第1类生产线平衡问题的+Leapms模型

//第一类生产线平衡问题
minimize  sum{i=1,...,m}y[i]

subject to
    sum{i=1,...,m} x[i][j] =1 | j =1,...,n
    y[i]c >= sum{j=1,...,n}x[i][j]t[j] | i=1,...,m
    x[i][b[k]]<=sum{j=1,...,i}x[j][a[k]]|i=1,...,m;k=1,...,ne
    y[i]<=y[i-1]|i=2,...,m

where
    m,n,ne are integers
    t[j] is a number | j=1,...,n
    e is a set
    a[k],b[k] is an integer|k=1,...,ne
    c is a number
    x[i][j] is a variable of binary|i=1,...,m;j=1,...,n
    y[i] is a variable of binary|i=1,...,m

data
    m=6
    n=11
    c=12
    t={6 2 5 7 1 2 3 6 5 5 4}
    e={
      1 2
      1 3
      1 3
      1 5
      2 6
      3 7
      4 7
      5 7
      6 8
      7 9
      8 10
      9 11
      10 11
    }
data_relation
  ne=_$(e)/2
  a[k]=e[2k-1]|k=1,...,ne
  b[k]=e[2k]|k=1,...,ne

第1类生产线平衡问题的模型求解

Welcome to +Leapms ver 1.1(162260) Teaching Version  -- an LP/LMIP modeling and
solving tool.欢迎使用利珀 版本1.1(162260) Teaching Version  -- LP/LMIP 建模和求
解工具.

+Leapms>load
 Current directory is "ROOT".
 .........
        p1.leap
        p2.leap
 .........
please input the filename:p1
1:  //第一类生产线平衡问题
2:  minimize  sum{i=1,...,m}y[i]
3:
4:  subject to
5:      sum{i=1,...,m} x[i][j] =1 | j =1,...,n
6:      y[i]c >= sum{j=1,...,n}x[i][j]t[j] | i=1,...,m
7:      x[i][b[k]]<=sum{j=1,...,i}x[j][a[k]]|i=1,...,m;k=1,...,ne
8:      y[i]<=y[i-1]|i=2,...,m
9:
10:  where
11:      m,n,ne are integers
12:      t[j] is a number | j=1,...,n
13:      e is a set
14:      a[k],b[k] is an integer|k=1,...,ne
15:      c is a number
16:      x[i][j] is a variable of binary|i=1,...,m;j=1,...,n
17:      y[i] is a variable of binary|i=1,...,m
18:
19:  data
20:      m=6
21:      n=11
22:      c=12
23:      t={6 2 5 7 1 2 3 6 5 5 4}
24:      e={
25:        1 2
26:        1 3
27:        1 3
28:        1 5
29:        2 6
30:        3 7
31:        4 7
32:        5 7
33:        6 8
34:        7 9
35:        8 10
36:        9 11
37:        10 11
38:      }
39:  data_relation
40:    ne=_$(e)/2
41:    a[k]=e[2k-1]|k=1,...,ne
42:    b[k]=e[2k]|k=1,...,ne
43:
>>end of the file.
Parsing model:
1D
2R
3V
4O
5C
6S
7End.
===========================================
number of variables=72
number of constraints=100
int_obj=0
===========================================

+Leapms>mip
relexed_solution=3.83333; number_of_nodes_branched=0; memindex=(2,2)
 nbnode=117;  memindex=(12,12) zstar=5.22619; GB->zi=6
 nbnode=314;  memindex=(38,38) zstar=5.625; GB->zi=6
 nbnode=587;  memindex=(24,24) zstar=5.01852; GB->zi=5
 nbnode=861;  memindex=(26,26) zstar=4.25; GB->zi=5
 nbnode=1128;  memindex=(22,22) zstar=3.83333; GB->zi=5
 nbnode=1395;  memindex=(38,38) zstar=3.83333; GB->zi=5
 nbnode=1680;  memindex=(40,40) zstar=6; GB->zi=5
 nbnode=1959;  memindex=(46,46) zstar=6; GB->zi=5
 nbnode=2230;  memindex=(30,30) zstar=3.9246; GB->zi=5
 nbnode=2487;  memindex=(26,26) zstar=4.44444; GB->zi=5
 nbnode=2774;  memindex=(36,36) zstar=4.16667; GB->zi=4
 nbnode=2971;  memindex=(20,20) zstar=3.83333; GB->zi=4
 nbnode=3149;  memindex=(26,26) zstar=4.16667; GB->zi=4
 nbnode=3343;  memindex=(36,36) zstar=3.91667; GB->zi=4
 nbnode=3546;  memindex=(20,20) zstar=4.04167; GB->zi=4
The Problem is solved to optimal as an MIP.
找到整数规划的最优解.非零变量值和最优目标值如下:
  .........
    x1_1* =1
    x1_2* =1
    x1_6* =1
    x2_5* =1
    x2_8* =1
    x2_10* =1
    x3_3* =1
    x3_4* =1
    x4_7* =1
    x4_9* =1
    x4_11* =1
    y1* =1
    y2* =1
    y3* =1
    y4* =1
  .........
    Objective*=4
  .........
+Leapms>

结果显示工作站数可减少到4。分配方式如下面的图示。

第1类生产线平衡问题求解结果图示


参考文献

[1] Jackson, J. R. . (1956). A computing procedure for a line balancing problem. Management Science, 2(3), 261-271.

[2] Ritt, M. , & Costa, A. M. . (2015). Improved integer programming models for simple assembly line balancing, and related problems. International Transactions in Operational Research, 19(8), 455-455.

原文地址:https://www.cnblogs.com/leapms/p/10052689.html

时间: 2024-10-03 09:43:36

生产线平衡问题的+Leapms解法的相关文章

生产线平衡问题——知识点、Leapms模型及python应用

本文要点:(一)简述了基础工业工程中生产线平衡的知识 (二)用Leapms建模语言进行算例建模与求解 (三)用python画出先决关系图 (一)基础工业工程中生产线平衡简要知识点     流水生产的特点: 工作的专业化程度高 生产按节拍进行 工艺过程是封闭的 生产对象在工序间单向移动 工作地之间有传送装置连结    生产线平衡的概念:生产线平衡就是对生产的全部工序进行均衡化,调整作业负荷,以使各作业时间尽可能相近的技术手段与方法.    单品种流水线平衡方法 绘制装配生产线的流程图(紧前关系图)

[LeetCode系列]有序链表转换为平衡BST的递归解法

给定有序链表(元素由小到大), 试问如何将其转换为一个平衡BST? 平衡BST: 任意节点的左右子树的深度差值不大于1. 主要思想是用递归. Trick是使用快慢指针来获取中间节点. 获得中间节点后, 将其设为此次递归的root, 随后删除此节点, 并将前一节点的next置NULL. 随后, 对中间节点的前后部分分别进行递归调用, 并将返回值作为其左右子树. 代码如下: 1 /** 2 * Definition for singly-linked list. 3 * struct ListNod

平衡车跌倒 雷军能扶起这个阿斗吗?

Segway号称"人类史上第一辆能够自主平衡的运输工具".但谁也想不到,创立15年之久.全球销量第一的Segway,却被中国一家年轻的平衡车企业收入囊中.Segway所开拓出来的平衡车市场,又能否从小众化.玩具化的狭小空间中脱身呢? 文/张书乐   刊载于<商界评论>2015年6月刊 年前,英国富翁吉米·海赛尔登站在Segway两个轮子的平衡车上,然后就冲下了悬崖,坠崖而亡--此时,离他收购Segway还不足十个月. 这一次,雷军说:"我来试试." 4月

hdu3709(求区间内平衡数的个数)数位dp

题意:题中平衡数的定义: 以一个位置作为平衡轴,然后左右其他数字本身大小作为重量,到平衡轴的距离作为全职,实现左右平衡(即杠杆原理平衡).然后为区间[x,y]内平衡数的个数. (0 ≤ x ≤ y ≤ 1018) 解法:数位dp.如果一个数的平衡数,那么它的平衡轴位置是确定的.原来一直尝试数位dp在dfs时候列举平衡轴的位置,后来才意识到可以提前枚举平衡轴位置,然后再dfs,这样比较好写.dp[mid][pre][wei];表示对称轴是mid,计算第pre个位置以后需要力矩大小wei的数的个数.

1221. 分割平衡字符串

1221. 分割平衡字符串 描述: 在一个「平衡字符串」中,'L' 和 'R' 字符的数量是相同的. 给出一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串. 返回可以通过分割得到的平衡字符串的最大数量. 示例 1: 输入:s = "RLRRLLRLRL"输出:4解释:s 可以分割为 "RL", "RRLL", "RL", "RL", 每个子字符串中都包含相同数量的 'L' 和 'R'.示例 2: 输入

蒟蒻林荫小复习——关于有限制区间元素查询的一些解法

如题:本文主要说明对于区间有限制查询的一些解法(其实就两种) 问题1:给定一个数列,要求查询区间L—R中所有大于等于Va小于等于Vb的元素和 解法: 1.线段树套权值线段树 第一维维护区间,第二维作为权值线段树,维护值域在A—B之间的元素之和 每次查询就从第一维拉到对应区间,然后用Va和Vb确定在权值线段树中的查询范围即可 2.分块 分块数组记为a,对每一个a块都开一个数组b,b数组将a块中元素拷贝后排序,新建c,对于每一个b都求前缀和 这样对于整块而言,用二分确定Va和Vb在b数组中的位置Ia

pfsense Web服务器负载平衡配置示例

在pfsense的网关和服务器中有两种类型的负载平衡功能.网关负载平衡可以通过多个WAN连接分发Internet绑定的流量.服务器负载平衡管理传入流量,因此它利用多个内部服务器进行负载分配和冗余,服务器负载平衡允许流量在多个内部服务器之间分配,它最常用于Web服务器和SMTP服务器.下面我们就以实例来介绍服务器负载平衡的设置. 下面介绍如何通过pfsense2.32配置Web服务器的负载平衡. 网络环境 服务器负载平衡示例网络环境 上图为示例网络环境.它由单个防火墙组成,使用其WAN IP地址池

一个不简洁的约瑟夫环解法

约瑟夫环类似模型:已知有n个人,每次间隔k个人剔除一个,求最后一个剩余的. 此解法为变种,k最初为k-2,之后每次都加1. 例:n=5,k=3.从1开始,第一次间隔k-2=1,将3剔除,第二次间隔k-1=2,将1剔除.依此类推,直至剩余最后一个元素. 核心思路:将原列表复制多份横向展开,每次根据间隔获取被剔除的元素,同时将此元素存入一个剔除列表中.若被剔除元素不存在于剔除列表,则将其加入,若已存在,则顺势后移至从未加入剔除列表的元素,并将其加入.如此重复n-1次.面试遇到的题,当时只写了思路,没

斐波那契数列的递归和非递归解法

//递归解法 function fib(n){ if(n < 1){ throw new Error('invalid arguments'); } if(n == 1 || n == 2){ return 1; } return fib(n - 1) + fib(n - 2); } //非递归解法 function fib(n){ if(n < 1){ throw new Error('invalid arguments'); } if(n == 1 || n == 2){ return 1