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

这篇具有很好参考价值的文章主要介绍了基于改进的离散PSO算法的FJSP的研究(Python代码实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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


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

📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Python代码实现


💥1 概述

文献来源:

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

摘要:柔性作业车间调度问题(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))
基于改进的离散PSO算法的FJSP的研究(Python代码实现)

部分代码:

# 生成初始种群

# 种群大小,可以根据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.文章来源地址https://www.toymoban.com/news/detail-489139.html

🌈4 Python代码实现

到了这里,关于基于改进的离散PSO算法的FJSP的研究(Python代码实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包