作业车间调度与遗传算法Python/Java实现及应用:BitMES,基于Electron的作业车间调度系统

本文介绍了作业车间调度问题及其重要性,详细阐述了遗传算法在解决此类问题上的应用,并展示了如何使用Python和Java实现遗传算法。此外,还介绍了一个基于Electron的作业车间调度系统,该系统利用前后端分离技术,采用GraphQL服务端和Python调度服务端,实现了数据管理和调度计算功能。
摘要由CSDN通过智能技术生成

作业车间调度问题描述

       作业车间调度(Job shop scheduling problem, JSP) 是车间调度中最常见的调度类型,是最难的组合优化问题之一,应用领域极其广泛,涉及航母调度,机场飞机调度,港口码头货船调度,汽车加工流水线等,因此对其研究具有重大的现实意义。科学有效的生产调度不但可以提高生产加工过程中工人、设备资源的高效利用,还可缩短生产周期,降低生产成本。

作业车间调度问题描述:

一个加工系统有M台机器,要求加工N个作业,其中,作业i包含工序数为L_{i}。令,则L为任务集的总工序数。其中,各工序的加工时间已确定,并且每个作业必须按照工序的先后顺序加工。调度的任务是安排所有作业的加工调度排序,约束条件被满足的同时,使性能指标得到优化。作业车间调度需要考虑如下约束:

  1. 每道工序在指定的机器上加工,且必须在前一道工序加工完成后才能开始加工。
  2. 某一时刻1台机器只能加工1个作业。
  3. 每个作业只能在1台机器上加工1次。
  4. 各作业的工序顺序和加工时间已知,不随加工排序的改变而改变。

问题的数学模型:

      令(i,j)表示作业i的第j个工序。S_{ij}T_{ij}分别表示(i,j)的加工起始时刻和加工时间。Z_{ijk}表示(i,j)是否在第k台机器上加工:如果(i,j)在第k台机器上加工,Z_{ijk} = 1;否则,Z_{ijk} = 0C_{k}为第k台机器的完工时间,则问题的数学模型如下:

     公式(1)为目标函数,即优化目标,系统中使用总加工时间最短为优化目标。公式(2)表示1个作业只能在加工完成前一道工序后才可以加工后一道工序。公式(3)表示1个作业的第1道工序的起始加工时刻大于或等于0。公式(4)表示在1台机床上不会同时加工1个以上的作业。

遗传算法

       随着遗传算法(genetic algorithm (GA))在组合优化问题的广泛应用,许多人开始对遗传算法进行深度研究。已有研究结果表明,遗传算法对求解作业车间调度问题具有较好的效果,因此系统采用遗传算法来解该问题,遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。系统通过模拟生物进化,包括遗传、突变、选择等,来不断地产生新个体,并在算法终止时求得最优个体,即最优解。

遗传算法解决作业车间调度问题基本步骤

  1. 初始化一定数量的种群(染色体编码)
  2. 计算个体适应度(染色体解码)
  3. 采用锦标赛法选择染色体并交叉产生新个体
  4. 个体(染色体)变异
  5. 达到遗传代数终止算法并从中选取适应度最优的个体作为作业车间调度问题的解

流程图如下

遗传算法所需参数

  1. 种群规模:种群中个体的数量,用populationNumber表示
  2. 染色体长度:个体的染色体的长度,用chromosomeSize表示
  3. 交叉概率:控制交叉算子的使用频率,用crossProbability表示,并且值为0.95
  4. 变异概率:控制变异算子的使用频率,用mutationProbability表示,并且值为0.05
  5. 遗传代数:种群的遗传代数,用于控制遗传算法的终止,用times来表示

遗传算法实现基本步骤及伪代码

1. 编码及初始化种群

       采用工序实数编码来表示染色体,即M台机器,N个工件,每个工件的工序数为process_{i} (0 <= i < N),则染色体长度为chromosomeSize = \sum process_{i},对染色体编码如下:chromosome = { ..., w_i, w_j, w_k, ... }。其中w_i代表第i个工件编号,而出现的次数代表该工件的第几道工序。例如{0, 1, 2, 1, 2, 0, 0, 1, 2},中0,1,2表示工件的编号,第几次出现就代表第几道工序。然后将每一次随机生成的染色体个体加入到种群集合中。

算法伪代码:

2. 解码及计算适应度

       将优化目标定义为总加工时间最短,因此适应度定义为最短加工时间的倒数,设fitness为对应个体的适应度,fulfillTime为最短加工时间,因此                                                       

其中fulfillTime的计算方法如下:

首先定义如下变量

然后从左到右遍历个体的染色体序列{..., w_i, w_j, w_k, ...},其中w_i表示第i个工件的编号,则w_i对应的当前工序为processIds_{w_i},设为p。当前工件当前工序所使用的机器编号为machine_{w_i, p},设为m。当前工件当前工序对应的加工时间为time_{w_i, p},设为t。则工件的第p道工序的最晚开始时间为          

而第m台机器的加工时间为                                   

工件w_i的第p道工序的结束时间为

最后加工完所有工件的最短加工时间fulfillTime为

从而计算出适应度fitness。

伪代码如下:

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sundial dreams

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

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

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

打赏作者

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

抵扣说明:

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

余额充值