设备的分配与调度简单方案_连铸生产调度与动态重调度的优化与研究-3,炼钢技术(3)原创...

基于生产扰动分类的二阶段遗传算法求解动态重调度问题

4.1引言

电炉炼钢-连铸生产对整个生产的节奏要求较高,各个工序各个工位间配合要比较紧密,但实际的生产过程中总会存在许多不可避免的扰动因素,必须根据实时现场的监控数据来进行动态调度以调整原调度计划,当钢种冶炼质量不合格超过指定加工时间时,要调整其后炉次的开工时间以适应;当钢种的温度达不到浇铸条件时, 要进行钢种回炉补温;当设备发生故障时,要调够相应设备上原先分配的炉次,当设备重新启用时,又要给其分配调度任务。对于实际生产,非常关心生产的有序进行,当出现异常扰动时,如何快速识别扰动态调整生产调度,产生新的调度方案,减少异常扰动对生产的影响。

常见的动态重调度策略有周期性重调度旳、事件驱动式的重调度的以及周期性混合事件驱动的的重调度.但是由于周期性重调度的周期参数很能确定无法有效的快退应对扰动因素;而事件驱动式重调度在应对生产过程中的扰动因素,过于频繁的启动重调度,降低了系统的鲁棒性;混合的重调度不但没能解决这些问题,反而増加了重调度频率。本章提出的基于实时现场监控的事件驱动式重调度,根据不同的生产扰动提出重调度策略,并结合上-章的改进的遗传算法,既利用了事件驱动式重调度的针对性强的特点,又实时反馈监控数据减少了重调度频率,提高了系统的稳定性。

4.2电炉炼钢-连铸的生产扰动分类

对生产过程中发生的异常扰动很多,对其进行相似特征的分类,有助于找到分类扰动问题的-体化解决方法。根据总结与归纳,电炉炼钢-连铸的生产扰动分类如下:

⑴计划任务扰动:因计划任务临时变更或错误产生的扰动࿰

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个示例代码,结合分布鲁棒优化模型和NSGA-II算法来解决车间调度问题: ```python import numpy as np from cvxpy import * from pymoo.factory import get_problem, get_algorithm, get_sampling from pymoo.optimize import minimize # 定义车间调度问题 class WorkshopSchedulingProblem(Problem): def __init__(self, n_jobs, n_machines, processing_times): super().__init__(n_var=n_jobs, n_obj=2, n_constr=0) self.n_jobs = n_jobs self.n_machines = n_machines self.processing_times = processing_times def _evaluate(self, x, out, *args, **kwargs): makespan = sum(max(out["F"][:, 0]), axis=0) # 最小化最大完成时间 total_flow_time = sum(sum(out["F"][:, 1]), axis=0) # 最小化总流程时间 out["F"] = np.column_stack([makespan, total_flow_time]) # 定义分布鲁棒优化模型 def robust_optimization(processing_times): n_jobs, n_machines = processing_times.shape x = Variable(n_jobs, boolean=True) makespan = Variable() constraints = [] # 所有工作必须被分配到机器上 constraints.append(sum(x) == n_jobs) # 每个机器上的工作时间不能超过机器的容量 for j in range(n_machines): constraints.append(sum(x[:, j] * processing_times[:, j]) <= makespan) # 定义目标函数 objective = Minimize(makespan) # 定义分布鲁棒优化问题 problem = Problem(objective, constraints) # 求解分布鲁棒优化问题 problem.solve() return x.value # 定义NSGA-II算法求解车间调度问题 def solve_workshop_scheduling(n_jobs, n_machines, processing_times): problem = WorkshopSchedulingProblem(n_jobs, n_machines, processing_times) algorithm = get_algorithm("nsga2") res = minimize(problem, algorithm, termination=('n_gen', 100), seed=1, verbose=False) return res.X # 输入数据 n_jobs = 10 n_machines = 3 processing_times = np.random.randint(1, 10, size=(n_jobs, n_machines)) # 使用分布鲁棒优化模型求解车间调度问题 robust_solution = robust_optimization(processing_times) print("分布鲁棒优化模型解:") print(robust_solution) # 使用NSGA-II算法求解车间调度问题 nsga_solution = solve_workshop_scheduling(n_jobs, n_machines, processing_times) print("NSGA-II算法解:") print(nsga_solution) ``` 这个示例代码中,我们首先定义了一个车间调度问题的类,继承自pymoo中的Problem类。然后使用cvxpy库来实现分布鲁棒优化模型。接下来,我们使用NSGA-II算法(通过pymoo库的get_algorithm函数获取)来求解车间调度问题。 你可以根据自己的实际问题进行适当的修改和扩展。确保安装所需的库(如cvxpy和pymoo),并根据需要调整算法的参数和终止条件。最后,运行代码以获得分布鲁棒优化模型和NSGA-II算法的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值