Python画调度甘特图

所采用案例为高亮老师书《柔性作业车间调度智能算法及其应用》第16页甘特图
在这里插入图片描述

import random
import matplotlib.pyplot as plt

plt.rcParams["lines.linewidth"] = 0.5
plt.rcParams["font.sans-serif"] = ["Times new Roman"]
plt.rcParams["font.size"] = 7.5
plt.rcParams["text.color"] = "black"
plt.rcParams["axes.unicode_minus"] = False

COLOUR_BITS = ['1', '2', '3', '4', '5', '6',
               '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']


def colourGen(workpiece: list) -> list:
    ''' 为每工件对应生成颜色
        @param     workpiece    工件号
        @return    colours      各工件对应的颜色列表
    '''
    colours = []
    workpieceNum = len(set(workpiece))
    for i in range(workpieceNum):
        colourBits = ['#']
        colourBits.extend(random.sample(COLOUR_BITS, 6))
        colours.append(''.join(colourBits))
    return colours


def gantt(macInfo: list, flow: list, macStartTime: list, workpiece: list, operation: list):
    ''' @param    macInfo         对应的机器号 M1=1, M1=2, ...
        @param    flow            各工序加工时间
        @param    macStartTime    各工序开始时间
        @param    workpiece       工件号 J1=1, J2=2, ...
        @param    operation       操作序号
    '''
    colours = colourGen(workpiece)

    for i, v in enumerate(macInfo):
        m = v - 1
        plt.barh(m, flow[i], 0.3, left=macStartTime[i],
                 color=colours[workpiece[i]-1])
        plt.text(macStartTime[i] + flow[i] / 8, m, 'J%s.%s' %
                 (workpiece[i], operation[i]), size=7.5)


if __name__ == "__main__":
    MS = [1, 1, 1, 2, 2, 2, 3, 3, 3]
    T = [3, 2, 4, 3, 3, 3, 3, 5, 3]
    macStartTime = [0, 3, 5, 0, 5, 8, 3, 8, 13]
    J = [2, 1, 3, 3, 1, 2, 2, 1, 3]
    oper = [1, 1, 2, 1, 2, 3, 2, 3, 3]
    # 画图
    gantt(MS, T, macStartTime, J, oper)
    plt.axvline(x=16.0, c='k', ls='--', lw=0.5)  # 参考线
    plt.yticks(range(len(set(MS))), ['$M_{1}$', '$M_{2}$', '$M_{3}$'])
    plt.show()

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值