编程语言
首页 > 编程语言> > 使用Python计算甘特图所需要总时长,并绘制甘特图

使用Python计算甘特图所需要总时长,并绘制甘特图

作者:互联网

甘特图计算实例

1.实例情况分析

图中五种颜色分别代表了一个工件,纵坐标1-6表示在编号为1-6上各动子的加工情况,横坐标表示加工时间;

2. 模型求解

3. 程序实现

def gantt_compute_nonimage(n,m,wt,color_list):
    '''
    n:工件数
    m:工位数
    wt:工作矩阵
    color_list:代表动子的颜色矩阵
'''
    t = np.zeros(n)
    for i in range(m):
        for j in range(n):
            if j == 0:
                t[j] = t[j] + wt[j][i]
            else:
                t[j] = max(t[j],t[j-1]) + wt[j][i] #这里与数学描述不同是因为采用直接赋值覆盖
    return(t[-1])
def gantt_compute(n,m,wt,color_list):
    '''
    n:动子数
    m:工位数
    wt:工作矩阵
    color_list:代表各工件的颜色矩阵
'''
    t = np.zeros(n)
    for i in range(m):
        for j in range(n):
            if j == 0:
                t[j] = t[j] + wt[j][i]
                plt.barh(y=i+1,width=wt[j][i],left=t[j]-wt[j][i],height=1,color=color_list[j])
            else:
                t[j] = max(t[j],t[j-1]) + wt[j][i]
                plt.barh(y=i+1,width=wt[j][i],left=t[j]-wt[j][i],height=1,color=color_list[j])
            if(wt[j][i] != 0):
                pass
                #plt.text(t[j]-wt[j][i]/2,i+1,"wt_%d%d=%.2f"%(i+1,j+1,wt[j][i]),horizontalalignment="center",verticalalignment="center")
                
    for i in range(n):
        plt.barh(y=0,width=t[-1]/n,left=t[-1]/n*i,height=0.5,color=color_list[i])
        plt.text((i+0.5)*t[-1]/n,0,'n=%d'%(i+1),horizontalalignment="center",verticalalignment="center")
    
    plt.plot([t[-1],t[-1]],[-0.5,m+1],color=(0,0,0))
    x_tickss = [i for i in range(0,int(t[-1]),int((t[-1]/4)//10)*10)]

    if(t[-1]-x_tickss[-1]<(int((t[-1]/4)//10)*10)/4):
        x_tickss.pop()
    x_tickss.append(t[-1])
    plt.title('n=%d,m=%d,need_time=%.3f'%(n,m,t[-1]))
    plt.xticks(x_tickss)
    
    
    #plt.savefig('./image/n%d_m%d_'%(n,m)+time.strftime("%Y%m%d%H%M%S", time.localtime()))
    #plt.clf()
    #print(t)
    return(t[-1])

标签:工位,加工,Python,总时长,list,甘特图,color,wt,工件
来源: https://blog.csdn.net/lqwh4666/article/details/113576130