繪制動態甘特圖(以流水車間調度為例)

?

?

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…