算法设计过程中,使用甘特图判断加入不同算子后所得到的调度计划满足是否满足模型中的逻辑关系是一个效率高且直观的方法,下面是一个已知活动开始结束时间绘制甘特图的方法
def drawGantt(taskNum, start, finish,name = 1):
# 中文及负号处理
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
config = {
"font.family": 'serif',
"font.size": 18,
"mathtext.fontset": 'stix',
"font.serif": ['SimSun'],
}
plt.rcParams.update(config)
labels = ['task {}'.format(i + 1) for i in range(taskNum)]
duration = [finish[i] - start[i] for i in range(taskNum)]
y = np.arange(taskNum) # 倒转y轴
xtick = np.arange(start[0], finish[-1] + 2)
# print(xtick)
# x_sp = np.cumsum(x_sp)
# 日期x坐标设置
# figure
fig = plt.figure(num=name,figsize=(20, 8))
ax = fig.add_subplot()
plt.grid(axis='x', linestyle='-.')
# plot
for i in range(len(labels)):
ax.barh(y, duration, 1, left=start, tick_label=labels, color='#496C88', alpha=1, linewidth=0.4, edgecolor='w')
for loc in range(len(labels)):
if labels[loc] != 'task 12' and labels[loc] != 'task 1':
plt.text(start[loc] + duration[loc] / 2, y[loc], labels[loc], fontsize=15,
verticalalignment="center", horizontalalignment="center")
# setting
ax.set_xticks(xtick,rotation=90)
ax.set_xlabel("时间")
ax.set_ylabel('活动')
ax.set_xlim(start[0], finish[-1] + 1)
ax.set_xticklabels(labels=xtick, rotation=90,fontsize = 10)
# plt.show()
# plt.close(fig)
输入:taskNum活动数量,整数,start活动开始时间,finish活动结束时间,均为列表,name是figure的名称,建议传参,方便分辨并且避免多个图画到一个figure上。
绘制出的结果如下:
活动1和12为虚活动所以看不到,可以根据自己的实际情况加上图名、参考线、图例等要素。
以上