Python中遗传算法(GA)的适应度函数设计咨询
遗传算法适配生产排程的适应度函数设计疑问
我正在用遗传算法(GA)解决生产排程问题——核心是确定不同产品的生产起始日期,目标是最小化原材料转化为成品各工序中机器可用工时的冲突。目前卡在适应度函数的设计环节,不确定现有方案是否合理,也不知道该如何优化推进。
当前实现方案
我现在的思路是计算每台机器在一段时间内每天的总负载,将过载天数的总和作为GA中每个候选解的评估值,但总觉得这个简单的设计存在概念上的问题。当前的评估代码如下:
def evaluate(self, scenario): sum_overload = calculate_load_machine(self.reference_date, scenario).to_numpy().sum() self.evaluation_note = sum_overload
示例说明
我以机器为索引、生产日期为列生成负载表,当某天机器负载超过1.00(即达到100%容量)时,判定该机器当天过载。
机器负载表
| Machines | 20/02/2023 | 21/02/2023 | 22/02/2023 | 23/02/2023 |
|---|---|---|---|---|
| mA | 0.86 | 0.80 | 0.74 | 0.90 |
| mB | 0.90 | 0.51 | 0.86 | 1.10 |
| mC | 0.33 | 0.25 | 0.24 | 0.50 |
| mD | 1.20 | 1.15 | 0.99 | 0.95 |
对应的过载表
| Machines | 20/02/2023 | 21/02/2023 | 22/02/2023 | 23/02/2023 |
|---|---|---|---|---|
| mA | 0.00 | 0.00 | 0.00 | 0.00 |
| mB | 0.00 | 0.00 | 0.00 | 1.00 |
| mC | 0.00 | 0.00 | 0.00 | 0.00 |
| mD | 1.00 | 1.00 | 0.00 | 0.00 |
在这个示例中,calculate_load_machine返回的过载总和为3。
潜在优化方向
我考虑将适应度函数改为基于每日可生产产品总数的设计:针对每台机器,根据不同产品的负载占用情况,选择合适的生产组合来避免机器过载,但不确定这个方向是否可行,也不知道具体该落地。
希望能得到关于当前方案的评审、优化建议或者新的设计思路,感谢帮助!
内容的提问来源于stack exchange,提问作者Douglas Mateus Machado
相关产品推荐
相关产品推荐

