import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from matplotlib import cm# 中文字体配置(必须放在所有绘图语句之前)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 时间矩阵数据
jobs = {'工件1': [31, 41, 25, 30],'工件2': [19, 55, 3, 34],'工件3': [23, 42, 27, 6],'工件4': [13, 22, 14, 13],'工件5': [33, 5, 57, 19]
}# 初始化变量
machines = ['机器1', '机器2', '机器3', '机器4']
order = list(jobs.keys())
current_time = {m: 0 for m in machines}# 使用专业色系(参考网页7)
colors = cm.get_cmap('viridis', len(jobs))(np.linspace(0, 1, len(jobs)))# 计算调度时间表
schedule = []
total_time = 0
for job in order:times = jobs[job]start_times = []end_times = []for i, (m, t) in enumerate(zip(machines, times)):start = max(current_time[m], end_times[-1] if i > 0 else 0)end = start + tstart_times.append(start)end_times.append(end)current_time[m] = endtotal_time = max(total_time, max(end_times))schedule.append({'job': job, 'start': start_times, 'end': end_times})# 创建动态甘特图
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_xlabel('时间')
ax.set_ylabel('机器')
ax.set_yticks(range(len(machines)))
ax.set_yticklabels(machines)
ax.set_title(f'流水车间调度甘特图 | 合计用时:{total_time} 单位')# 动画初始化函数
def init():ax.set_xlim(0, total_time)return []# 动画更新函数(优化颜色绑定)
def update(frame):ax.clear()ax.set_yticks(range(len(machines)))ax.set_yticklabels(machines)current_total = 0for i, s in enumerate(schedule[:frame+1]):for m_idx in range(len(machines)):start = s['start'][m_idx]end = s['end'][m_idx]duration = end - startax.broken_barh([(start, duration)], (m_idx-0.4, 0.8),facecolors=colors[i],edgecolor='black',linewidth=0.5)current_total = max(current_total, end)# 动态创建图例句柄(参考网页6)handles = [plt.Rectangle((0,0),1,1, color=colors[i], ec='black') for i in range(frame+1)]ax.legend(handles, order[:frame+1], loc='upper right',title='加工序列',facecolor='#F0F0F0',edgecolor='black')ax.set_title(f'流水车间调度进度({frame+1}/{len(order)})| 当前用时:{current_total} | 总用时:{total_time}')return []# 生成动画(调慢播放速度)
ani = animation.FuncAnimation(fig, update, frames=len(order),interval=1500,  # 每帧间隔1.5秒init_func=init, blit=True, repeat=False
)plt.show()

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

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

相关文章

PyTorch实现线性回归的基础写法与封装API写法

目录 1. 基础写法 1.1导包 2.2加载读取数据 2.3原始数据可视化(画图显示) 2.4线性回归的(基础)分解写法 2.5定义训练过程 2.PyTorch实现 线性回归的封装写法(实际项目中的常用写法) 2.1创建线性回归模型 2.2定义损失函数 2.3定义优化器 2.4定义训练过程 1…

python 常用的6个爬虫第三方库

Python中有非常多用于网络数据采集的库,功能非常强大,有的用于抓取网页,有的用于解析网页,这里介绍6个最常用的库。 1. BeautifulSoup BeautifulSoup是最常用的Python网页解析库之一,可将 HTML 和 XML 文档解析为树形…

基于BP神经网络的杂草智能识别系统(杂草识别、Python项目)

基于BP神经网络的杂草智能识别系统 项目介绍 本项目是一个基于PyQt5和BP神经网络的杂草智能识别系统。系统通过图像处理和神经网络技术, 能够识别8种不同的杂草类别。用户可以通过上传图片,系统会自动识别图片中的杂草类别,并显示识别结果和…

Python3笔记之号称替代pip的uv包管理器

uv是什么? uv,这是一个由 Astral 团队开发的极快速的Python包和项目管理工具,用Rust语言编写。它集成了多种功能,旨在替代pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv等多个工具,提供更高效、更全面的Py…

IT管理思路

甲方CIO和IT管理者-如何做好组织级IT能力提升_哔哩哔哩_bilibili

ChatGPT的GPT-4o创建图像Q版人物提示词实例展示

最近感觉GPT-4o发布的新功能真的强大,所以总结了一些提示词分享给大家,大家可以去试试,玩法多多,可以用GPT-4o生成图片,然后用可灵进行图生视频,就能去发布视频了!接下来和笔者一起来试试&#…

Transformer Decoder Block的几个优化方案

写在前面 在大型语言模型(LLM)的演进浪潮中,Transformer 架构凭借其强大的并行计算能力和对长距离依赖的出色捕捉,奠定了核心地位。然而,标准的 Transformer Decoder Block 遵循着一种相对固定的模式:先进行自注意力(Self-Attention)捕捉上下文信息,再通过前馈神经网…

五种IO模型与select和poll分别实现多路转接

五种IO模型与select和poll分别实现多路转接 何为IO 不论是在前面文件部分,还是后面的网络部分,IO都是非常常见的。但是当时只是简单对IO进行提及,并没有对IO的本质进行介绍。那么到底何为IO?IO全称为输入和输出,而任…

单例模式的写法(保证线程安全)

1. 引言 1.1 什么是单例模式? 单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。 核心思想:控制实例化过程,避免重复创建对象。 1.2 为什么…

C++ 环境设置

C++ 环境设置 引言 C++作为一种高性能的编程语言,广泛应用于系统软件、游戏开发、实时系统等领域。为了能够顺利进行C++编程,我们需要在计算机上配置合适的开发环境。本文将详细讲解如何在Windows、macOS和Linux系统中设置C++开发环境。 Windows系统下C++环境设置 1. 安装…

【Kafka基础】ZooKeeper在Kafka中的核心作用:分布式系统中枢神经系统

在分布式系统的世界里,协调和管理多个节点间的状态是一项复杂而关键的任务。Apache Kafka作为一款高性能的分布式消息系统,其设计哲学是"专为单一目的而优化"——即高效处理消息流。为了实现这一目标,Kafka选择将集群协调管理的重任…

<《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性

第8篇:大模型的知识获取方式及其局限性 摘要 大模型(如GPT、BERT、Qwen、DeepSeek等)凭借其卓越的自然语言处理能力,已经成为人工智能领域的明星。然而,这些模型“知道”什么?它们如何获取知识&#xff1f…

ESModule和CommonJS在Node中的区别

ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部报错commonjs console.log(require);console.log(module);console.log(exports);co…

Spring Boot 配置文件加载优先级全解析

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 配置文件加载优先级全解析 Spring Boot 的配置文件加载机制是开发者管理不同环境配置的核心功能之一。其通过外部化配置(Externaliz…

2025 年陕西消防设施操作员考试攻略:历史文化名城的消防传承与创新​

陕西拥有丰富的历史文化遗产,众多古建筑分布其中,同时也在不断推进现代化建设,消防工作面临传承与创新的双重任务,这在考试中也有所体现。​ 考点融合与特色:一方面,古建筑的消防保护是重点,包…

【Unity网络编程知识】C#的 Http相关类学习

1、搭建HTTP服务器 使用别人做好的HTTP服务器软件,一般作为资源服务器时使用该方式(学习阶段建议使用)自己编写HTTP服务器应用程序,一般作为Web服务器或者短连接游戏服务器时使用该方式(工作后由后端程序员来做&#…

Android Studio - 解决 Please Select Android SDK

一、出现的问题 点击 Run 后弹窗,图一位置出现图二提示。 二、解决办法 进入 Tools -> SDK Manager,在 Android SDK Location 点击 Edit,一直 Next 就解决了。

UE5学习笔记 FPS游戏制作44 统一UI大小 sizeBox

如果我们希望多个类似的UI大小一样,例如不同菜单的标题,可以使用sizeBox组件 我们在标题控件上,用sizeBox包裹所有子物体 然后指定他的最小宽高,或最大宽高 如果指定的是最小宽高,当子元素(如图片&#xf…

MCP协议介绍

MCP协议(Model Context Protocol,模型上下文协议)是由Anthropic公司推出的开放协议,旨在为AI大模型与外部数据源、工具之间建立标准化交互框架。其核心价值在于突破传统API限制,通过统一接口实现AI与多源数据、工具的双…

C#里使用WPF的MaterialDesignThemes

先要下载下面的包: <?xml version="1.0" encoding="utf-8"?> <packages><package id="MaterialDesignColors" version="5.2.1" targetFramework="net48" /><package id="MaterialDesignTheme…