智能优化算法总结-数字孪生下的车间调度-APS预告

在这里插入图片描述
获取更多资讯,赶快关注上面的公众号吧!

总结智能优化算法

  之前仅做了一个非常简单的阶段性的总结,这里又全面地进行了一次summary,帮助希望利用智能优化算法用于解决实际优化问题的童鞋。下图中是本公众号内准备推送的各种智能优化方法,其中标红的为比较新颖的算法,暂时还未学习介绍,以后会慢慢更新的。其实细心的读者已经可以现有的算法中看出,它们往往具有一定的相似性,这是因为要想算法进行有效地优化,无非就是两个主要操作:探索(exploration)和利用(exploitation)。
在这里插入图片描述

图1 受自然启发的元启发式算法

部分粉丝问题答疑

车间调度数据集

  在做调度算法时,往往需要和其他算法进行比较,那么这种比较就需要借助于一些固定的案例,好在在调度领域已经给出了这样的benchmarks。下面是具体的链接:

  OR-Library:这里面了包含了各种组合优化问题,调度问题也涉及到单机、并行机、流水车间、作业车间、放开车间等问题类型,是各种文章经常引用作为比较的。
在这里插入图片描述

图2 OR-Library

  Flexible Job Shop Problem:则主要是针对柔性作业车间调度问题(FJSP)的,提供了各种案例以及每个案例对应当前最优解。
在这里插入图片描述

图3 FJSP

  The Scheduling Zoo:这是个非常有趣的“公园”,在这里可以自己选择不同的机器环境、约束条件和目标函数,是一个交互式的调度案例平台。点击搜索后,会列出相关的文献。
在这里插入图片描述

图4 调度问题定义

在这里插入图片描述

图5 搜索结果

强化学习求解调度问题时agent很难学习到东西,问题在哪?

  个人觉得这个问题可能与奖励的设置有很大关系,当奖励设置的不对时,代理学习的总奖励之和就不等效于优化的目标,所以看起来来并不是希望的趋势。

数字孪生和车间调度

  数字孪生是近几年非常火的一个概念,这其实也给调度问题的研究提供了方向,在之前的一篇文章中,我也从几个方面提到了FJSP的研究点,其中也提到了数字孪生和RFID,这里详细地说明一下数字孪生下的调度问题。

  首先我们要很明确地知道数字孪生的概念是什么,不同的研究机构有不同的表述。最初提出数字孪生概念的是美国密歇根大学的Michael Grieves教授(2003),他将其表达为物理产品等价的虚拟数字化表达的信息镜像模型,并定义为包含物理空间、虚拟空间和连接两个空间的接口三个关键部分。但是由于受当时信息技术和认知水平的限制,并没有引起足够重视。直到2012年,美国NASA发布的技术路线图描述了数字孪生的概念:充分利用物理模型、传感器和历史数据来反映产品生命周期的一种集成多学科、多尺度仿真过程的物理产品镜像。

  通过以上概念,其实可以总结出数字孪生具有以下特征:

  • 通过对物理对象各种类型的感知数据进行集成,从而对物理对象进行真实可靠地映射(实—>虚);
  • 存在于物理实体的全生命周期,与物理实体对象共同进化,同时不断积累来自物理实体的有关知识(非静态,可进化);
  • 在描述物理实体对象的同时能够基于信息模型对物理实体对象进行优化(虚—>实)。

  因此数字孪生是一种虚实结合,实现物理世界和信息世界之间交互融合的有效方法。北航的陶飞等人从车间的角度提出了数字孪生车间的概念,并对其四个关键组成部分,物理车间、虚拟车间、车间服务系统以及车间孪生数据进行了讨论。受此启发,我认为在数字孪生尤其是在该数字孪生车间概念下,调度问题迎来了新的模式和机遇。

  首先,从实到虚就是将物理模型建模为信息模型,如果将这个过程比喻画人物肖像的话,那么传统的仿真仅仅是参照模特画出了人物的外表,也就是一张皮而已,只是刻画了肉眼所见到的人物平面外形,而数字孪生技术可不会满足于此。数字孪生强调的是全要素的人物刻画,不仅是人物的前面,还要能观察到人物的背面,但是人眼看不到怎么呢,可以在人物背后放置一面镜子或摄像机(这些都是数据采集设备),那么现在通过镜子反射的图像或摄像机拍到的图像(不同的数据来源),就可以更加全面地观察到人物更多的信息。同样,我们除了用眼睛看以外,还可以用耳朵(传感器)听一听心跳(状态数据),鼻子(传感器)闻一闻体味(状态数据),手(传感器)摸一摸皮肤光滑度(状态数据),这些也都能对这个人物进行描述。所以全息要素建模就是要保证所画出的人像是对真实人物的全面可靠反映。不仅是外形的反映,还要求对人物的行为进行描述,如肢体动作、心理活动,画像也应该随着真实人物的活动而进行活动,因此数字孪生不仅是状态也是行为的建模。那在调度车间环境下,应该利用数字孪生技术对车间内的全生产要素进行监控和建模,如物料、库存、机床、运输车、工人、托盘、刀夹量等,除了基本的三维建模以外,还要建立车间动态变化的规则,如作业按照什么分布进行工厂,机床按照什么规律进行维护或发生故障等,这是上面提到的行为建模,但是需要通过什么手段才能准确地建立虚拟模型呢?当然要有自动化的数据采集设备啊,如RFID、条码枪、机床CNC、PLC、各种传感器、摄像头,通过这些设备采集不同对象的信息,来反映它们的状态。

  其次,我们拿到了这些数据后,如何进行分析和整理,因为这些信息可能是冗余的、漏读的、误读的,所以需要通过多源异构数据处理技术,综合判断出车间的真实事件是什么,这样才能通过真实事件驱动车间模型一同进化和演变,实际上这里对应上面的第二条特征。

  再次,我们有了信息模型之后,可以在信息模型上施加优化控制,模型通过仿真之后评价这些控制的优劣,取其精华去其糟粕,就不必盲目在车间现场进行试错性地管控,大大提高效率,这就是信息模型驱动物理模型,对应上面第三条特征。

  通过以上分析,在车间调度中,我们首先要做的就是车间全生产要素的全息建模(我们的APS其实就是这么设计的),这里面数据采集是一个很火热的话题,如何通过RFID驱动动态调度,目前我还没看到真正好的论文,基本都是噱头为主,没有真正落地的。RFID驱动调度之前,其实还应该通过复杂事件处理技术对多源融合数据进行清洗、过滤、提取等操作,确定真实的动态事件,如工件抵达、工件完工、检验不合格、原材料短缺、机床故障等,然后再去驱动调度。前面已经提到,与传统仿真一个重要的区别就是信息要驱动物理,所以当有了调度方案之后,怎么去影响现场的执行,这也是需要好好研究的。在数字孪生驱动下,调度系统也同样面临的新的挑战,那就是实时地动态反馈需要实时做出响应,否则计划永远赶不上变化,同时这种响应又不能是低质量的,这就要求调度系统又快又好。传统的启发式算法仅能保证快,但是质量参差不齐;元启发式算法(遗传、粒子群)质量ok,但是一旦问题发生变化,就需要重新迭代优化,在实时反应式调度模式(通常需要秒级)下劣势明显。因此亟需一种泛化性更强的算法,它就是目前作者正在研究的深度强化学习算法,有望成为实现这一目标强有力的工具。

  总结一下,在数字孪生背景下,底层的数据采集实际上就像人体的感知器官,感知不同的信息并通过神经(网络)传递到大脑,并在大脑中想象出一幅画面(虚拟空间),再由负责大脑决策部分(调度器)通过智能算法(深度强化学习)做出智能决策(指令),驱动肌肉在现实空间(物理空间)中做出动作,实现虚实结合。

高级计划与排程APS预告

  最近十几年,企业大都在为信息化建设而努力,制造执行系统MES首当其冲,不过企业经过一段时间的摸爬滚打,发现MES好像并不能给企业带来实质性的收益,这是为什么呢?因此MES是信息管理系统,只不过是把原来车间里靠人脑记的,靠纸写的,都放在了电脑而已,领导不用再去现场溜达就可以在电脑上看到想要的信息,MES就是方便了一些而已,但就这个目标而言,MES也是很有必要的,那么如何才能帮助企业真正的提高效率、增加产值呢?这就要求高级计划与排程(Advanced planning and scheduling,APS) 出场了!APS可以实现短期、中期、长期的作业计划,并且往往是有限能力的,因此可以充分考虑车间负荷和能力,相比较于MES的粗能力分析更加准确,并且APS可以结合优化算法,实现能力的高效利用,缩短生产周期。

  所以从后面开始,我们将推出一系列关于APS的文章,向大家介绍什么是APS、APS的组成、APS的实施、APS的开发等方面的内容,这里仅和大家做一个预告,并着手设计一个更加合理、通用、美观、高性能的调度平台。

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
下面是一个示例代码,结合分布鲁棒优化模型和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算法的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

松间沙路hba

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

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

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

打赏作者

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

抵扣说明:

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

余额充值