无需 NetworkX 和 Matplotlib,纯 Python 代码绘制时标网络图
如果您不想使用 'networkx' 和 'matplotlib' 库来绘制时标网络图,您可以使用纯Python代码来生成一个简单的文本形式的网络图。
以下是修改后的代码示例:
# 创建工作过程字典,键为工作过程,值为前置工作过程列表
workflows = {
'b': ['a'],
'c': ['b'],
'd': ['c'],
'e': ['d'],
'f': ['e'],
'g': ['f'],
'h': ['g'],
'i': ['h'],
'j': ['i']
}
# 定义计算最早开始时间和最晚开始时间的函数
def calculate_earliest_start_time(workflows):
result = {}
for process, predecessors in workflows.items():
if len(predecessors) == 0:
result[process] = 0
else:
result[process] = max(result[predecessor] for predecessor in predecessors)
return result
def calculate_latest_start_time(workflows, earliest_start_time):
result = {}
workflow_keys = list(workflows.keys())
for process in reversed(workflow_keys):
if process == workflow_keys[-1]:
result[process] = earliest_start_time[process]
else:
successors = [key for key, value in workflows.items() if process in value]
result[process] = min(result[successor] for successor in successors)
return result
# 计算最早开始时间和最晚开始时间
earliest_start_time = calculate_earliest_start_time(workflows)
latest_start_time = calculate_latest_start_time(workflows, earliest_start_time)
# 打印节点的最早开始时间和最晚开始时间
print('节点的最早开始时间(ES):', earliest_start_time)
print('节点的最晚开始时间(LS):', latest_start_time)
# 计算最早完成时间和最晚完成时间
earliest_finish_time = {process: earliest_start_time[process] + 1 for process in workflows.keys()}
latest_finish_time = {process: latest_start_time[process] + 1 for process in workflows.keys()}
# 打印节点的最早完成时间和最晚完成时间
print('节点的最早完成时间(EF):', earliest_finish_time)
print('节点的最晚完成时间(LF):', latest_finish_time)
# 计算总时差
slack = {process: latest_start_time[process] - earliest_start_time[process] for process in workflows.keys()}
# 打印节点的总时差
print('节点的总时差(SLACK):', slack)
以上代码没有使用 'networkx' 和 'matplotlib' 库,而是使用字典和列表来表示工作过程之间的关系,并通过自定义函数计算了最早开始时间(ES)、最晚开始时间(LS)、最早完成时间(EF)、最晚完成时间(LF)和总时差(SLACK)等。
请注意,由于不使用图形库,代码无法绘制时标网络图,而是直接输出了节点的时间参数。如果需要可视化网络图,您可能需要使用 'networkx' 和 'matplotlib' 或其他适合的图形库来实现。
希望以上修改的代码能够满足您的需求!
原文地址: https://www.cveoy.top/t/topic/plp 著作权归作者所有。请勿转载和采集!