0 Star 1 Fork 1

public-artifacts/ecmws-experiments

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ts_method.py 4.15 KB
一键复制 编辑 原始数据 按行查看 历史
victor puscarschi 提交于 2025-02-10 17:39 +08:00 . init
import random
import numpy as np
from methods.dp_method import compute_overavg_ranks, compute_slow_ranks, compute_fast_ranks
from methods.methods_proto import TaskSequencing
def compute_upward_rank_iterative(workflow):
tasks_without_successors = [task for task in workflow.tasks if not task.successors]
rank_up = {task: workflow.task_avg_worktime[task] for task in tasks_without_successors}
for task in workflow.sorted_tasks[::-1]:
if task in rank_up:
continue
max_rank = 0
for successor in task.successors:
trans_time = workflow.task_avg_transtime[task][successor]
rank = rank_up[successor] + trans_time
max_rank = max(max_rank, rank)
rank_up[task] = max_rank + workflow.task_avg_worktime[task]
return rank_up
def compute_downward_rank_iterative(workflow):
tasks_without_predecessors = [task for task in workflow.tasks if not task.predecessors]
rank_down = {task: 0 for task in tasks_without_predecessors}
for task in workflow.sorted_tasks:
if task in rank_down:
continue
max_rank = 0
for predecessor in task.predecessors:
trans_time = workflow.task_avg_transtime[predecessor][task]
work_time = workflow.task_avg_worktime[predecessor]
rank = rank_down[predecessor] + trans_time + work_time
max_rank = max(max_rank, rank)
rank_down[task] = max_rank
return rank_down
class UpwardRankTaskSequencing(TaskSequencing):
def run(self, workflow, system):
rank_up = compute_upward_rank_iterative(workflow)
return sorted(workflow.tasks, key=lambda x: rank_up[x], reverse=True)
class DownwardRankTaskSequencing(TaskSequencing):
def run(self, workflow, system):
rank_down = compute_downward_rank_iterative(workflow)
return sorted(workflow.tasks, key=lambda x: rank_down[x])
class DPRankTaskSequencing(TaskSequencing):
def run(self, workflow, system):
return sorted(workflow.tasks, key=lambda x: x['rank_dp'], reverse=True)
class MixedRandomTaskSequencing(TaskSequencing):
def __init__(self):
self.chosen = random.randint(0, 2)
self.method = [UpwardRankTaskSequencing, DownwardRankTaskSequencing, UpwardRankTaskSequencing][self.chosen]()
def run(self, workflow, system):
return workflow.sorted_tasks
class CompositeTaskSequencing(TaskSequencing):
def __init__(self, TS):
self.TS = TS
self.impl = [UpwardRankTaskSequencing, DownwardRankTaskSequencing, DPRankTaskSequencing][self.TS]()
def run(self, workflow, system):
# return workflow.sorted_tasks
# return self.impl.run(workflow, system)
return workflow.sorted_tasks
class FastRankBasedTaskSequencing(TaskSequencing):
def run(self, workflow, system):
if not hasattr(workflow.tasks[0], 'fast_rank'):
ranks = compute_fast_ranks(workflow)
return sorted(workflow.tasks, key=lambda x: ranks[x], reverse=True)
else:
return sorted(workflow.tasks, key=lambda x: x.fast_rank, reverse=True)
class SlowRankBasedTaskSequencing(TaskSequencing):
def run(self, workflow, system):
if not hasattr(workflow.tasks[0], 'slow_rank'):
ranks = compute_slow_ranks(workflow)
return sorted(workflow.tasks, key=lambda x: ranks[x], reverse=True)
else:
return sorted(workflow.tasks, key=lambda x: x.slow_rank, reverse=True)
class OveravgRankBasedTaskSequencing(TaskSequencing):
def run(self, workflow, system):
if not hasattr(workflow.tasks[0], 'overavg_rank'):
ranks = compute_overavg_ranks(workflow)
return sorted(workflow.tasks, key=lambda x: ranks[x], reverse=True)
else:
return sorted(workflow.tasks, key=lambda x: x.overavg_rank, reverse=True)
class FrequencyAwareTaskSequencing(TaskSequencing):
def __init__(self, TS):
self.TS = TS
self.impl = [FastRankBasedTaskSequencing, SlowRankBasedTaskSequencing, OveravgRankBasedTaskSequencing][
self.TS]()
def run(self, workflow, system):
# return self.impl.run(workflow, system)
return workflow.sorted_tasks
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/public-artifacts/ecmws-experiments.git
git@gitee.com:public-artifacts/ecmws-experiments.git
public-artifacts
ecmws-experiments
ecmws-experiments
main

搜索帮助