首页 理论教育生产调度中的遗传算子应用

生产调度中的遗传算子应用

【摘要】:分别是拒绝策略、 修复策略、 改变遗传算子策略和惩罚策略。本书采用改变遗传算子的策略, 用分组交叉的算子来实现个体的交叉, 这样, 不仅易于实现, 而且不会产生非法染色体。如图6-1 所示:图6-1交叉算子遗传算法是群体进化的一种方法, 其最大优势在于同时使用多个点的搜索信息, 在各种方案之间进行选择、 交叉、 变异等运算。图6-2遗传算法实施流程图

1. 编码与解码

对于车间工件调度, 采用基于工序的十进制编码方式, 如果由m 个工件类, 每个工件类有n 个操作, 每类工件各有一个工件要加工, 那么编码的长度为min, 在一条染色体中, 相同的工件号重复出现n 次, 用工件号的先后次序来表示各工件要加工操作的先后次序, 这样能够有效地消除死锁。

2. 种群初始化

种群的初始化通常有初步优化和随机产生两种方式。 初步优化是指通过一定的简单优化算法对初始种群进行初步的优化得到较为理想的初始种群; 随机产生的方法则是通过随机的方法来产生没有规律的种群, 这种方法产生种群的质量不如初步优化高, 但是比较方便, 较为容易实现。

3. 交叉算子

一般交叉算子有四种处理方法。 分别是拒绝策略、 修复策略、 改变遗传算子策略和惩罚策略。 拒绝策略要求的充分条件很严, 一般很难满足, 在本问题中, 这种策略也不具备可操作性;本问题的约束条件较严, 若采用修复策略, 修复过程会比原问题更复杂; 交叉操作后的不可行解, 在种群中的比例较大, 若采用惩罚策略, 很可能找不到可行解。 一条染色体是每个零件编号重复n 次的集合。 本书采用改变遗传算子的策略, 用分组交叉的算子来实现个体的交叉, 这样, 不仅易于实现, 而且不会产生非法染色体。

随机地将工件的编号{1, 2, …, m}分成两个不相交的子集A和B, 每个子集至少有一个零件编号, 然后从头至尾同时扫描两个父代染色体。 将父代个体parentl 中属于A 的基因放到子代个体Sonl 中, 父代个体parent1 中属于B 的基因放到子代个体Son2 中;将父代个体parent2 中属于A 的基因放到子代个体sonZ 中, 父代个体parent2 中属于B 的基因放到子代个体sonl 中。 例如: parentl 和parent2 都是由a、 b 和e 三种基因构成的, 每个个体的基因个数为9 个, 令A={a, b}, B ={c}。 根据上面提到的规则, 对parentl 和parent2 进行交叉算子操作, 可以得到子代个体sonl 和son2。 如图6-1 所示:

图6-1 交叉算子

遗传算法是群体进化的一种方法, 其最大优势在于同时使用多个点的搜索信息, 在各种方案之间进行选择、 交叉、 变异等运算。图6-2 展示了遗传基因算法的一般实施流程。

图6-2 遗传算法实施流程图