车间调度系列文章:

  • 1、车间调度的编码、解码,调度方案可视化的探讨
  • 2、多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度
  • 3、柔性车间调度问题:以算例MK01初探数据处理和多个遗传算子
  • 4、车间调度丨粒子群算法初探:以算例MK01为例
  • 5、车间调度丨布谷鸟算法:以算例MK01为例

柔性车间调度问题

柔性车间调度问题可描述为:多个工件在多台机器上加工,工件安排加工时严格按照工序的先后顺序,至少有一道工序有多个可加工机器,在某些优化目标下安排生产。
柔性车间调度问题的约束条件如下:

  • (1)同一台机器同一时刻只能加工一个工件;
  • (2)同一工件的同一道工序在同一时刻被加工的机器数是一;
  • (3)任意工序开始加工不能中断;
  • (4)各个工件之间不存在的优先级的差别;
  • (5)同一工件的工序之间存在先后约束,不同工件的工序之间不存在先后约束;
  • (6)所有工件在零时刻都可以被加工。

MK01算例:

10 6 2
6 2 1 5 3 4 3 5 3 3 5 2 1 2 3 4 6 2 3 6 5 2 6 1 1 1 3 1 3 6 6 3 6 4 3
5 1 2 6 1 3 1 1 1 2 2 2 6 4 6 3 6 5 2 6 1 1
5 1 2 6 2 3 4 6 2 3 6 5 2 6 1 1 3 3 4 2 6 6 6 2 1 1 5 5
5 3 6 5 2 6 1 1 1 2 6 1 3 1 3 5 3 3 5 2 1 2 3 4 6 2
6 3 5 3 3 5 2 1 3 6 5 2 6 1 1 1 2 6 2 1 5 3 4 2 2 6 4 6 3 3 4 2 6 6 6
6 2 3 4 6 2 1 1 2 3 3 4 2 6 6 6 1 2 6 3 6 5 2 6 1 1 2 1 3 4 2
5 1 6 1 2 1 3 4 2 3 3 4 2 6 6 6 3 2 6 5 1 1 6 1 3 1
5 2 3 4 6 2 3 3 4 2 6 6 6 3 6 5 2 6 1 1 1 2 6 2 2 6 4 6
6 1 6 1 2 1 1 5 5 3 6 6 3 6 4 3 1 1 2 3 3 4 2 6 6 6 2 2 6 4 6
6 2 3 4 6 2 3 3 4 2 6 6 6 3 5 3 3 5 2 1 1 6 1 2 2 6 4 6 2 1 3 4 2

第一行的10,6是工件数和机器数。

第二行第一个加粗的数字6表示,工件1有6道工序。斜体的2 1 5 3 4,表示工件1的第一道工序有两个可选机器,分别是1和3,加工时间是5和4,后面的3 5 3 3 5 2 1表示工件1的第二道工序有3个可选机器,分别是5,3,2,加工时间是3,5,1,一行就是1个工件的所有工序的可选机器可加工时间,后面的工序以此类推。

下面的每一行以此类推。

模型

字符说明:

目标函数:

约束条件:

布谷鸟算法

布谷鸟算法的一个重要特征是使用了Levy飞行的方式进行局部和全局搜索。Levy飞行过程,以前被用于其他搜索启发式,其特征是从概率密度函数中选择一系列瞬时移动。这个过程代表了最佳随机搜索模式,在自然界中经常发现。Levy飞行的原理是模拟一种随机游走过程,它由低频率的长距离飞行和高频率的短距离飞行所组成,其步长服从Levy分布。因此,布谷鸟算法寻找鸟巢的位置以及路径更新公式如下:

xi(t+1)=xi(t)+αL(λ)

式中xi(t)为当前的解;⊗为点乘;L(λ)为Levy飞行的搜索路径;λ为参数;α是步长参数,其大小直接取决于问题的规模,具体可表示为: α=a0(xi(t)-xbest)

式中a0为大于0的实数,通常取0.01,本文取1;xbest表示当前最优解。

柔性作业车间工具

本文写了甘特图的画图函数;工序,机器,加工时间编码的生成函数;编码的解码函数。甘特图和解码前面推文有介绍,为了能在布谷鸟算法使用,下面介绍一下编码的生成:

  • 步骤1:按照工件的工序数依次生成工序编码如下:

work = [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9]

程序里为方便运算,0表示工件1,依次类推。

  • 步骤2:work长度是55,即编码长度。在0到4倍编码长度生成55个不重复的数,即0到220生成55个不重复的数。

initial_a= [138, 200, 170, 51, 2, 119, 9, 0, 82, 81, 165, 39, 174, 71, 11, 74, 24, 107, 23, 204, 15, 33, 162, 50, 37, 31, 89, 148, 97, 43, 106, 25, 136, 61, 190, 45, 178, 145, 93, 149, 209, 188, 196, 159, 157, 137, 155, 110, 100, 187, 48, 173, 122, 69, 88]

  • 步骤3:对步骤2得到的编码,进行从小到大的排列,按照从小到大的顺序取出其在编码的位置。

index_work= [7, 4, 6, 14, 20, 18, 16, 31, 25, 21, 24, 11, 29, 35, 50, 23, 3, 33, 53, 13, 15, 9, 8, 54, 26, 38, 28, 48, 30, 17, 47, 5, 52, 32, 45, 0, 37, 27, 39, 46, 44, 43, 22, 10, 2, 51, 12, 36, 49, 41, 34, 42, 1, 19, 40]

initial_a的第8(7+1)个数最小,第5(4+1)个数第二小,依次类推。

  • 步骤4:依据步骤3的得到编码位置,在work中找到对应工序编码,即可得到长度55的工序编码。

job= [1, 0, 1, 2, 3, 3, 3, 5, 4, 4, 4, 2, 5, 6, 9, 4, 0, 6, 9, 2, 2, 1, 1, 9, 4, 7, 5, 8, 5, 3, 8, 0, 9, 5, 8, 0, 6, 5, 7, 8, 8, 8, 4, 1, 0, 9, 2, 6, 9, 7, 6, 7, 0, 3, 7]

work的第8(7+1)个数是1,第5(4+1)个数是0,依次类推。

代码在fjsp.py里。

机器和加工时间编码:

随机生成0到1之间的数,如果该随机数小于pi,选择加工时间最小的机器,否则随机选择加工机器,pi自行设计。

算法运行环境

本代码运行环境是win7系统,python3.5.2,第三方库:

numpy==1.18.5
matplotlib==3.0.3

自适应布谷鸟算法

本文对工序编码用布谷鸟算法更新,全局最优xbest是每次迭代种群的最优解。机器编码迭代加入自适应算子:遗传算法的均匀交叉。

算法步骤:

  • 步骤1:初始化多个工序,机器,加工时间编码

  • 步骤2:对工序编码用布谷鸟算法更新,如果新的编码的完工时间小于原来的编码,则取代原编码,反之则反

  • 步骤3:对机器编码用均匀交叉进行更新,如果新的编码的完工时间小于原来的编码,则取代原编码,反之则反

  • 步骤4:对种群所有个体按完工时间进行排序,给定的被发现概率乘种群数量下的最差个体,生成随机的工序、机器、加工时间编码取代

  • 步骤5:判断是否达到最大迭代次数,是的话输出结果,否则转到步骤1
    levy模型在python里很好实现,其math有很多函数,具体代码如下:

    def getLEVY(self):                      #LEVY飞行公式计算Lama=self.parm_lv[0]beta=self.parm_lv[1]sigma_v=self.parm_lv[2]sigma_u=(math.gamma(1+beta)*math.sin(math.pi*beta/2)/(math.gamma((1+ beta)/2)*beta*(2**((beta-1)/2))))**(1/beta)u=np.random.normal(0,sigma_u,1)v=np.random.normal(0, sigma_v, 1)LS=u/((abs(v))**(1/beta))return Lama*LS

结果

自适应布谷鸟算法的运行命令如下:

ho=pso([10,6,0.5],50,100,[1,1.5,1],0.25)    #第一个中括号是工件数,机器数,选择最短机器的概率
#数50,100分别代表迭代的次数和种群的规模
#第二个中括号是LEVY飞行的参数,分别是a0、u、V,代码里是Lama、beta、sigma_v
#0.25是种群个体被发现的概率
a,b,c,d=ho.pso_total()  #最后一次迭代的最优解job,machine,machine_time=np.array([a]),np.array([b]),np.array([c])
to.draw(job,machine,machine_time) #画图result=np.array(result).reshape(len(result),2)
plt.plot(result[:,0],result[:,1])                   #画完工时间随迭代次数的变化
font1={'weight':'bold','size':22}
plt.xlabel("迭代次数",font1)
plt.title("完工时间变化图",font1)
plt.ylabel("完工时间",font1)
plt.show()

结果如下:

结果的甘特图如下:

完工时间随迭代次数的变化图如下:

代码

有3个代码和一个mk01的text文档:

篇幅问题,给出布谷鸟算法的代码LEVY.py:

完整代码,请扫描下方二维码,关注后,回复:车间调度,查看系列文章

公众号二维码:

车间调度丨布谷鸟算法:以算例MK01为例相关推荐

  1. 多目标柔性车间调度丨mogv算法:以算例MK01为例

    车间调度系列文章: 1.车间调度的编码.解码,调度方案可视化的探讨 2.多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度 3.柔性车间调度问题:以算例MK01初探 ...

  2. 车间调度-灰狼算法的应用:以算例MK01为例

    车间调度系列文章: 1.车间调度的编码.解码,调度方案可视化的探讨 2.多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度 3.柔性车间调度问题:以算例MK01初探 ...

  3. 多目标柔性车间调度丨NSGA-II:以算例MK01为例

    车间调度系列文章: 1.车间调度的编码.解码,调度方案可视化的探讨 2.多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度 3.柔性车间调度问题:以算例MK01初探 ...

  4. 车间调度丨粒子群算法初探:以算例MK01为例

    车间调度系列文章: 1.车间调度的编码.解码,调度方案可视化的探讨 2.多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度 3.柔性车间调度问题:以算例MK01初探 ...

  5. 书本算法重现丨遗传算法:以算例MK01为例

    车间调度系列文章: 1.车间调度历史文章 2.书本算法重现丨遗传算法:以算例MK01为例 引言 算法重现系列文章,都是对书本<柔性作业车间调度智能算法及其应用>一书的算法实现,该书作者:高 ...

  6. 【车间调度】模拟退火算法求解车间调度(jobshop-3)问题【含Matlab源码 1082期】

    ⛄一.车间调度简介 1 车间调度定义 车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源.提高企业经济效益的目的.车间调度问题从数学上可以描述为有n个待加工的零件要在m台 ...

  7. 【车间调度】鸟群算法求解车间调度问题【含Matlab源码 1395期】

    ⛄一.车间调度简介 1 车间调度定义 车间调度是指根据产品制造的合理需求分配加工车间顺序,从而达到合理利用产品制造资源.提高企业经济效益的目的.车间调度问题从数学上可以描述为有n个待加工的零件要在m台 ...

  8. 柔性车间调度问题丨一种贪婪策略的应用:以算例MK02例

    车间调度系列文章: 1.车间调度的编码.解码,调度方案可视化的探讨 2.多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度 3.柔性车间调度问题:以算例MK01初探 ...

  9. 布谷鸟算法求解车间调度问题(书籍摘录版)

    布谷鸟算法求解车间调度问题 基本原理 布谷鸟算法 理想化描述 每只布谷鸟选择一个巢并产一个卵 具有高质量的卵保留到下一代 可选择巢的数量是固定的,并且布谷鸟的卵被原巢主鸟发现的概率 pa∈(0,1)p ...

  10. (流水车间调度 FSSP) NEH启发式算法改进 (时间复杂度从 O(mn^3) 降至 O(mn^2) )

    出自  [1]    TAILLARD E. Some efficient heuristic methods for the flow shop sequencing problem[J]. Eur ...

最新文章

  1. PHP环境下配置WebGrind——让你的网站性能看得见
  2. 8月22-23日 首届IT管理技术大会
  3. 在storm中使用定时保存
  4. 如何更改Live Writer发布照片到不同相册
  5. g++链接boost库
  6. epoll的一个使用例子
  7. c++中的队列_C ++中的队列
  8. 42. netcat
  9. API卡_医院卡读卡器 IC卡读卡器 USB口写卡器_社保卡读卡器
  10. 实验一 单片机 绘制原理图
  11. spring注解@Lazy
  12. win10如何设置保护色保护眼睛
  13. Python简单监控键盘输入的木马实现
  14. echarts饼状图去除他的划过放大效果。
  15. 用ps轻松更改嘴唇颜色
  16. 那些烦人的VC++库、win10中的VC++库(全部)
  17. 经济基础知识(中级)【4】
  18. WordPress常用模板函数 修改或自制WordPress主题必备
  19. c语言基础知识(知识点较为完整)
  20. 2. 认识O(logN)的排序

热门文章

  1. base64编码规则
  2. db文件查看工具SQLiteExpert
  3. 三菱a系列motion软体_三菱系列 PLC常见问题解答
  4. Linux ❉ iptables详解
  5. matlab编写禁忌搜索算法,禁忌搜索算法matlab
  6. nv驱动版本linux,完善支持NV显卡Linux驱动275.19正式版,275.19增加了对
  7. 360安全浏览器极速模式怎么设置
  8. 微信小程序中生成二维码
  9. QQ浏览器该站点长时间无响应_消除CNZZ.站长统计代码被Chrome浏览器警告的操作...
  10. 程序员【超实用】面试问题