作业车间调度优化算法

作业车间调度优化算法

  • 题目来源
  • 代码实现
  • 输出结果

题目来源

题目来源于葛英飞《智能制造技术基础》书中175页的题目,基余分配率的作业车间调度优化算法。书中这部分有程序流程图,但是没有代码,课后闲暇之余通过Python对其进行了简单的实现,部分代码比较粗糙,仅仅实现了功能,未对其结构进行优化,供郑州科技学院智能制造专业各位同学参考。

代码实现

import numpy as npdef shengyuhanshuzhi_cal(part_name):#剩余函数值计算函数part_name_sy=[]for i in range(len(part_name)):part_name_sy.append(1-sum(part_name[0:i+1])/sum(part_name))return part_name_sy
def gongxu_count_max(gongxu):#计算最大工序数目gongxu_count=[]for i in range(len(gongxu)):gongxu_count.append(len(gongxu[i]))return max(gongxu_count)+1
def shengyuhanshuzhi_table(gongxu_count_max,gongxu_sy):#工序剩余函数值转化为按工序顺序构建all_sy = []for i in range(gongxu_count_max):sy = []for j in range(len(gongxu_sy)):if i<len(gongxu_sy[j]):sy.append(gongxu_sy[j][i])else:sy.append(-1)all_sy.append(sy)return all_sypart_zhou=[4,7,3,3]
part_taotong=[4,4,2,2]
part_yagai=[3,3,5,4]
part_chilun=[2,5,2,6,3,2,1]
part_xiangti=[2,5,6,5]#零件各工序加工时间
time_table=[part_zhou,part_taotong,part_yagai,part_chilun,part_xiangti]part_zhou_ad=[4,11,14,17]
part_taotong_ad=[4,8,10,12]
part_yagai_ad=[3,6,11,15]
part_chilun_ad=[2,7,9,15,18,20,21]
part_xiangti_ad=[2,7,13,18]#各零件累计加工时间
time_ad_table=[part_zhou_ad,part_taotong_ad,part_yagai_ad,part_chilun_ad,part_xiangti_ad]part_zhou_mm=[0,1,2,3]
part_taotong_mm=[0,1,5,3]
part_yagai_mm=[0,1,3,4]
part_chilun_mm=[2,1,2,1,6,7,8]
part_xiangti_mm=[12,9,10,11]#各个工序对应的设备
mm_table=[part_zhou_mm,part_taotong_mm,part_yagai_mm,part_chilun_mm,part_xiangti_mm]part_zhou_sy=[]
part_taotong_sy=[]
part_yagai_sy=[]
part_chilun_sy=[]
part_xiangti_sy=[]#剩余函数值part_zhou_sy=shengyuhanshuzhi_cal(part_zhou)
part_taotong_sy=shengyuhanshuzhi_cal(part_taotong)
part_yagai_sy=shengyuhanshuzhi_cal(part_yagai)
part_chilun_sy=shengyuhanshuzhi_cal(part_chilun)
part_xiangti_sy=shengyuhanshuzhi_cal(part_xiangti)#计算剩余函数值gongxu_sy=[part_zhou_sy,part_taotong_sy,part_yagai_sy,part_chilun_sy,part_xiangti_sy]
gongxu_count_max=gongxu_count_max(gongxu_sy)
#print(gongxu_count_max)#计算工序最大数量ST_list=[]
T_list=[]
ED_list=[]
GONGXU_list=[]for i in range(13):ST_list.append([])T_list.append([])ED_list.append([0])GONGXU_list.append([])T_PART=[]
for i in range(5):T_PART.append([0])all_sy=shengyuhanshuzhi_table(gongxu_count_max,gongxu_sy)#
#print(all_sy)
for i in range(gongxu_count_max):#print(i)#print(ED_list, "\n", GONGXU_list, "\n")#print(T_PART)#print(i)#print(all_sy[i])#print(np.asfarray(all_sy[i]))#print(np.asfarray(all_sy[i]) * 0 + -1)#print((np.asfarray(all_sy[i]) != (np.asfarray(all_sy[i]) * 0 + -1)).any())while((np.asfarray(all_sy[i]) != (np.asfarray(all_sy[i])*0+-1)).any()):#第一工序安排完之前不结束#判断是否有价值函数重复工序n = 0#print(n)for k in range(len(all_sy[i])):# print(max(all_sy[i]), all_sy[i][k])if all_sy[i][k] == max(all_sy[i]) and all_sy[i][k] != -1:n = n + 1#print(n)#无重复:if n==1:for j in range(len(all_sy[i])):if all_sy[i][j]==max(all_sy[i]) and all_sy[i][j]!=-1:#print(all_sy[i][j])all_sy[i][j]=-1#print(all_sy[i])#print(ST_list[mm_table[j][i]]==[] and i==0)#print(mm_table[j][i])if ST_list[mm_table[j][i]]==[] and i==0:#print(mm_table[j][i])#print(ST_list[mm_table[j][i]])ST_list[mm_table[j][i]].append(0)#print(ST_list)#print(mm_table[j][i])T_list[mm_table[j][i]].append(time_table[j][i])ED_list[mm_table[j][i]].append(ST_list[mm_table[j][i]][-1]+time_table[j][i])T_PART[j][0] = T_PART[j][0] + time_table[j][i]GONGXU_list[mm_table[j][i]].append(str(j+1)+","+str(i+1))elif ED_list[mm_table[j][i]][-1] > T_PART[j][0]:#如果设备加工时间大于零件前面工序时间的和,那么开始时间为设备这道工序结束的时间#print(mm_table[j][i])ST_list[mm_table[j][i]].append(ED_list[mm_table[j][i]][-1])#print(time_table[j][i])T_list[mm_table[j][i]].append(time_table[j][i])T_PART[j][0] = ED_list[mm_table[j][i]][-1] + time_table[j][i]ED_list[mm_table[j][i]].append(ST_list[mm_table[j][i]][-1] + time_table[j][i])GONGXU_list[mm_table[j][i]].append(str(j+1) + "," + str(i+1))else :#如果设备加工时间小于零件前面工序时间的和,那么开始时间为零件前道工序结束时间#print(mm_table[j][i])#print(T_PART)ST_list[mm_table[j][i]].append(T_PART[j][0])T_list[mm_table[j][i]].append(time_table[j][i])T_PART[j][0] = T_PART[j][0] + time_table[j][i]ED_list[mm_table[j][i]].append(ST_list[mm_table[j][i]][-1] + time_table[j][i])GONGXU_list[mm_table[j][i]].append(str(j+1) + "," + str(i+1))# 有重复:if n>1:# 找到剩余函数值相同的零件part = []for k in range(len(all_sy[i])):if all_sy[i][k] == max(all_sy[i]) and all_sy[i][k] != -1:part.append(k)# 对剩余函数值相同的零件总加工时长最大是多少:part_time = []for k in range(len(part)):part_time.append(sum(time_table[part[k]]))part_time_max = max((part_time))#print(part_time_max)#print(i,j)#print(all_sy[i][j])#print(max(all_sy[i]))#print(all_sy[i])for j in range(len(all_sy[i])):if all_sy[i][j] == max(all_sy[i]) and all_sy[i][j] != -1 and sum(time_table[j]) == part_time_max:all_sy[i][j] = -1#print(all_sy[i])if ST_list[mm_table[j][i]] == [] and i == 0:ST_list[mm_table[j][i]].append(0)T_list[mm_table[j][i]].append(time_table[j][i])ED_list[mm_table[j][i]].append(ST_list[mm_table[j][i]][-1] + time_table[j][i])T_PART[j][0] = T_PART[j][0] + time_table[j][i]GONGXU_list[mm_table[j][i]].append(str(j+1) + "," + str(i+1))elif ED_list[mm_table[j][i]][-1] > T_PART[j][0]:# print(mm_table[j][i])ST_list[mm_table[j][i]].append(ED_list[mm_table[j][i]][-1])#print(time_table[j][i])T_list[mm_table[j][i]].append(time_table[j][i])T_PART[j][0] = ED_list[mm_table[j][i]][-1] + time_table[j][i]ED_list[mm_table[j][i]].append(ST_list[mm_table[j][i]][-1] + time_table[j][i])GONGXU_list[mm_table[j][i]].append(str(j+1) + "," + str(i+1))else:# print(mm_table[j][i])ST_list[mm_table[j][i]].append(T_PART[j][0])T_list[mm_table[j][i]].append(time_table[j][i])T_PART[j][0] = T_PART[j][0] + time_table[j][i]ED_list[mm_table[j][i]].append(ST_list[mm_table[j][i]][-1] + time_table[j][i])GONGXU_list[mm_table[j][i]].append(str(j + 1) + "," + str(i + 1))print("各个设备各工序开始时间:",ST_list)print("各个设备各工序结束时间:",ED_list)
print("各个设备各工序工作序列:",GONGXU_list)

输出结果

在这里插入图片描述
这里用列表表示每道工序的开始时间,结束时间,以及对应的工序,后续可用甘特图实现加以完善。
甘特图代码

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号colors=['b','g','r','y','c','m','k']
color_map=[]
for i in range(len(GONGXU_list)):color_sub=[]for j in range(len(GONGXU_list[i])):color_sub.append(colors[int(GONGXU_list[i][j][0])])color_map.append(color_sub)plt.figure(figsize=(15,10),dpi=80)
for i in range(len(ST_list)):for j in range(len(ST_list[i])):plt.barh(-i-1,T_list[i][j],left=ST_list[i][j],color=color_map[i][j])plt.text(ST_list[i][j]+T_list[i][j]*0.5,-i-1,GONGXU_list[i][j],ha="center",va="center",size=15)
plt.yticks([-1,-2,-3,-5,-6,-7,-8,-9,-10,-11,-12,-13],[1,2,3,5,6,7,8,9,10,11,12,13])labels =[''] *5
for i in range(5):labels[i] = "工件%d" % (i + 1)
# 图例绘制
patches = [mpatches.Patch(color=colors[i], label="{:s}".format(labels[i])) for i in range(5)]
plt.legend(handles=patches, loc=4)
# XY轴标签
plt.xlabel("加工时间/s")
plt.ylabel("机器编号")plt.show()

甘特图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453936.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西南交通大学计算机软件专业上岸难度分析

C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南交通大学计算机科学与技术2024届考研难度整体呈现"稳中有升"的态势。学硕实际录取33人&#xff0c;复试分数线362分&#xff0c;复试录取率71.74%&#xff1b;专硕&#xff08;计算机技术&#xff09;实际…

“2+1拼团:电商新风尚,驱动增长革新“

在当前经济环境下&#xff0c;商品供应过剩与同质化问题日益凸显&#xff0c;传统电商模式正面临严峻考验&#xff0c;难以有效应对消费者不断升级的需求。为此&#xff0c;一种新颖的21拼团购物模式应运而生&#xff0c;借助其别具一格的运营理念和吸引人的激励机制&#xff0…

企业文件怎么管控?这几个软件你一定要知道!

企业文件管控是确保数据安全、提高工作效率和满足合规要求的关键措施。它有助于保护敏感信息&#xff0c;防止数据泄露&#xff0c;同时提高文件的查找效率&#xff0c;减少重复工作&#xff0c;促进团队协作&#xff0c;支持决策制定&#xff0c;并维护企业的知识产权 。通过实…

[枚举坤坤]二进制枚举基础

我们都知道数据是以二进制形式存储在计算机中的。当我们使用十进制数进行编程时&#xff08;如a10&#xff09;实际上计算机要先进行一步转码&#xff0c;将其化为二进制的形式进行计算。如果在编程的过程中我们可以直接越过转码这一步去操纵二进制形式进行运算&#xff0c;程序…

政安晨【零基础玩转各类开源AI项目】基于本地Ubuntu (Linux ) 系统应用Gradio-Lite:无服务器 Gradio 完全在浏览器中运行

目录 简介 什么是@gradio/lite? 入门 1.导入 JS 和 CSS 2. 创建标签 3. 在标签内编写你的 Gradio 应用程序 更多示例:添加其他文件和要求 多个文件 其他要求 SharedWorker 模式 代码和演示playground 1.无服务器部署 2.低延迟 3. 隐私和安全 限制 尝试一下!…

深度学习面试笔试之循环神经网络(RNN)、门控循环单元(GRU)、长短期记忆(LSTM)

深度学习面试笔试之循环神经网络RNN、门控循环单元GRU、长短期记忆LSTM 循环神经网络(RNN)1. 什么是RNN1.1 RNN的应用1.2 为什么有了CNN&#xff0c;还要RNN?1.3 RNN的网络结构1.4 双向RNN1.5 BPTT算法 2. 其它类型的RNN3. CNN与RNN的区别4. 为什么RNN 训练的时候Loss波动很大…

CLion和Qt 联合开发环境配置教程(Windows和Linux版)

需要安装的工具CLion 和Qt CLion下载链接 :https://www.jetbrains.com.cn/clion/ 这个软件属于直接默认安装就行&#xff0c;很简单&#xff0c;不多做介绍了 Qt:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ window 直接点exe Linux 先c…

Python | Leetcode Python题解之第491题非递减子序列

题目&#xff1a; 题解&#xff1a; class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:def dfs(i, tmp):if i len(nums):if len(tmp) > 2:res.append(tmp[:]) # 拷贝&#xff0c;tmp[:]而非tmpreturn# 选 nums[i]if not tmp or nu…

我们可以用微服务创建状态机吗?

大家好&#xff0c;我是锋哥。今天分享关于【我们可以用微服务创建状态机吗&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 我们可以用微服务创建状态机吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 是的&#xff0c;微服务架构可…

Java | Leetcode Java题解之第496题下一个更大元素I

题目&#xff1a; 题解&#xff1a; class Solution {public int[] nextGreaterElement(int[] nums1, int[] nums2) {Map<Integer, Integer> map new HashMap<Integer, Integer>();Deque<Integer> stack new ArrayDeque<Integer>();for (int i num…

19.面试算法-树的深度优先遍历(一)

1. 深入理解前中后序遍历 深度优先遍历有前中后三种情况&#xff0c;大部分人看过之后就能写出来&#xff0c;很遗憾大部分只是背下来的&#xff0c;稍微变换一下就废了。 我们再从二叉树的角度看递归&#xff0c;每次遇到递归&#xff0c;都按照前面说的四步来写&#xff0c…

STM32_实验3_控制RGB灯

HAL_Delay 是 STM32 HAL 库中的一个函数&#xff0c;用于在程序中产生一个指定时间的延迟。这个函数是基于系统滴答定时器&#xff08;SysTick&#xff09;来实现的&#xff0c;因此可以实现毫秒级的延迟。 void HAL_Delay(uint32_t Delay); 配置引脚&#xff1a; 点击 1 到 IO…

wordpress 子比主题美化 四宫格 多宫格 布局插件

wordpress 主题美化 四宫格 多宫格 布局插件&#xff08;只在子比主题上测试过&#xff0c;其它主题没测试&#xff09; A5资源网四宫格布局插件是一个功能丰富的WordPress插件,专为创建自适应的四宫格布局而设计。这个插件具有以下主要特点: 灵活的布局: 支持1到8个宫格的自定…

Apache Paimon Catalog

Paimon Catalog可以持久化元数据,当前支持两种类型的metastore: 文件系统(默认):将元数据和表文件存储在文件系统中。hive:在 hive metastore中存储元数据。用户可以直接从 Hive 访问表。2.2.1 文件系统 CREATE CATALOG fs_catalog WITH ( type = paimon, warehouse = h…

Yolo目标检测:实时性与准确性的完美结合

在目标检测领域&#xff0c;Yolo&#xff08;You Only Look Once&#xff09;算法无疑是一颗璀璨的明星。自2016年由Joseph Redmon等人提出以来&#xff0c;Yolo凭借其出色的实时性和准确性&#xff0c;迅速在多个应用场景中崭露头角。本文将详细介绍Yolo目标检测的基本原理、优…

资讯 | 财富通科技政务协同办公管理软件通过麒麟软件适配认证

2024年9月25日&#xff0c;财富通科技研发的政务协同办公管理软件成功通过中国国产操作系统麒麟软件的适配认证。本次认证是继公司区块链产品“基于区块链的企业及人员资质数字证书服务平台”认证以后得第二次认证。这一成就标志着财富通科技在推动国产软件生态建设方面迈出了坚…

虚拟现实与Facebook的结合:未来社交的全新体验

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正在逐步改变人们的社交方式。Facebook&#xff0c;作为全球最大的社交媒体平台之一&#xff0c;积极探索如何将虚拟现实融入其社交生态系统&#xff0c;创造全新的用户体验。这一结合不仅影响了用户之间…

双十一买什么东西的人比较多?盘点2024双十一爆款好物分享

随着双十一的脚步渐近&#xff0c;各大电商平台已经开始了激烈的促销大战。作为一年中最盛大的购物节&#xff0c;双十一不仅吸引了无数消费者的热情参与&#xff0c;也成为了检验品牌和产品质量的最佳时刻。那么2024年双11买什么东西比较好呢&#xff1f;今天就给大家梳理一份…

2024最新IOS应用商店下载页源码 支持一键跳转设置双端app

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 支持apk&#xff0c;ipa&#xff0c;ios描述文件上传分发下载网站自适应PC手机自适应&#xff08;适配市面上主流手机&#xff0c;包括安卓和苹果&#xff09;支持引导用户正确使用浏…

Go:error处理机制

文章目录 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功&#xff1a;返回某个值以及 true 表示成功&#xff1b;返回零值&#xff08;或 nil&#xff09;和 false 表示失败 而实际上来说&#xff0c;是需要对于第二个参数进行判断的…