基于改进的离散PSO算法的FJSP的研究(Python代码实现)

简介: 基于改进的离散PSO算法的FJSP的研究(Python代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥



🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。



⛳ 座右铭:行百里者,半于九十。


📋 📋 📋 本文目录如下: 🎁 🎁 🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Python代码实现


💥1 概述

文献来源:


757eac99f2b6d260d52d365febaac910.png


摘要:柔性作业车间调度问题(Flexible Job-shop Scheduling Problem,FJSP)是经典作业车间调度问题的一个扩展,前者更接近于实际生产。以最小化最大完工时间为目标,提出了一种改进的离散粒子群优化算法。传统粒子群优化算法一般适用于优化连续模型问题,FJSP作为复杂度比较高的组合优化问题,是一种典型的离散模型。提出的算法采用机器负荷平衡机制初始化粒子种群,在粒子的更新过程中引入了3个操作算子来更新粒子的工序排序部分和机器分配部分,这3个算子分别为基于工序排序或机器分配的变异、与个体最优位置之间进行工序先后顺序保留的交叉(POX)操作、与全局最优位置进行随机点保存的交叉(RPX)操作。先后执行以上3个算子以完成粒子的一次更新。这种操作能够使种群较快地收敛于最优解。对标准测试案例进行实验的结果表明,所提算法对解决FJSP具有有效性,并且能够快速地搜索到近似最优解;与其他同类算法相比,所提算法在求解效果和收敛速度上均具有优越性。


关键词:


作业车间调度;离散优化问题;柔性;粒子群优化;


📚2 运行结果

#总共15个Brandimarte文件 for i in range(15): #每个数据用例都测试10次,取最好的一次结果,如果为了效率可以每个数据都测试1次 results = [solve_FJSP(i,j) for j in range(10)] Pg_list = [result[0] for result in results ] fitness_list = [result[1] for result in results ] job_op_num = results[0][2] p_table = results[0][3] best_fitness_index = np.argmax(np.array(fitness_list)) best_fitness = fitness_list[best_fitness_index] best_Pg = Pg_list[best_fitness_index] #画图,写入.txt文档 path= './BestFitness/BrandimarteMk'+str(i+1)+'/' Decode.decode(best_Pg,job_op_num,p_table,'save',path) print(best_Pg,best_fitness) with open(path+'best_schedule.txt', 'w') as f: f.write(str(best_Pg)+'\n'+str(best_fitness))


80ff3cc65c568bb1a8ad1d64ab7ef547.png


部分代码:

# 生成初始种群
# 种群大小,可以根据m和n的值来调整大小,如C*m*n c为一个常系数
# Popsize = 5*p_table.shape[1]*len(job_op_num)
Popsize = 200
encode = Encode(Popsize, p_table, job_op_num)
# 全局选择的染色体
global_chrs = encode.global_selection()
# #局部选择的染色体
local_chrs = encode.local_selection()
# #随机选择的染色体
random_chrs = encode.random_selection()
# 合并三者,得到初始的种群
chrs = np.vstack((global_chrs, local_chrs, random_chrs))
# 以下是关于操作染色体的代码
# 初始的超参数赋值
o_mega = 0.15
c1 = 0.5
c2 = 0.7
pf_max = 0.8
pf_min = 0.2
# 迭代次数,也可以根据m和n的值来调整大小,
# Iter = 5*p_table.shape[1]*len(job_op_num)
Iter = 200
# 得到初始的个体最优位置
P = copy.deepcopy(chrs)
# 得到初始的全局最优位置
# Decode.decode(chr,job_op_num,p_table,'decode'),其中的‘decode’表示不画图,只是计算适应度
fitness_list = [Decode.decode(chr, job_op_num, p_table, 'decode',None) for chr in P]
Pg = P[np.argmin(fitness_list)]
for iter in range(Iter):
# 计算pf
pf = pf_max - (pf_max - pf_min) / Iter * iter
# 更新种群中所有的染色体
copy_chrs = copy.deepcopy(chrs)
chrs = [pso.f_operator(job_op_num, p_table, chr, P[index], Pg, pf, o_mega, c1, c2) for index, chr in
enumerate(copy_chrs)]
# 更新个体最优位置
P = np.array([chr1 if Decode.decode(chr1, job_op_num, p_table, 'decode',None) <= Decode.decode(chr2, job_op_num,
p_table, 'decode',None)
else chr2 for chr1, chr2 in zip(P, chrs)])
# 更新全局最优位置
fitness_list = [Decode.decode(chr, job_op_num, p_table, 'decode',None) for chr in P]
Pg = P[np.argmin(fitness_list)]
# for chr in chrs:
# print(Decode.decode(chr, job_op_num, p_table, 'decode',None))
# print("第" + str(iter + 1) + '次循环的最优fitness:', Decode.decode(Pg, job_op_num, p_table, 'decode',None))
print("第"+str(file_num+1)+'个数据集,第'+str(run_times+1)+'次运行'+'迭代:'+str(iter+1)+'/'+str(Iter))
fitness = Decode.decode(Pg, job_op_num, p_table, 'decode',None)


🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]丁舒阳,黎冰,侍洪波.基于改进的离散PSO算法的FJSP的研究[J].计算机科学,2018,45(04):233-239+256.


🌈4 Python代码实现

相关文章
|
12天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
15天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
11天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
19 1
|
16天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
12天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
12天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
43 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
12天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
42 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
12天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
52 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
14天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
31 2
|
16天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
32 2
下一篇
无影云桌面