我正在开发一个项目,我需要在主机(计算机)中分配一些任务(进程)。 我的问题类似于this页面中的云平衡教程。 我有以下课程:
Host(name, cpu=None, mem=None, taskCap=None, encrypt=None, latClass=None, loc=None)
cpu
,mem
,taskCap
分别是CPU功率,内存功率和任务数量的Host's
容量。
Task(name, cpuReq=None, memReq=None, execTime=None, utility=None, encrypted=None)
cpuReq
,memReq
分别是CPU和内存中的Task's
要求。
我也有2本词典。 一个是关于主机的延迟,另一个是关于任务对延迟的要求
例如,我们有4个主机(h1 .. h4)
和6个任务(t1 .. t6)
h_lat_dir = {2: [(h1, h2), (h4, h4)], 3: [(h1, h1), (h1, h4)], 6: [(h2, h2)], 5: [(h1, h3), (h2, h3), (h3, h3)]}
h_lat_dir
告诉我们,在主机h1
和h2
之间,延迟为2,h1
和h4
之间的延迟为3,依此类推。
类似地,
t_lat_dir = {3: [(t1, t2)], 4: [(t1, t3), (t1, t4), (t1, t5)], 5: [(t2, t3)]}
其中任务t1
和t2
需要映射到延迟小于或等于3的主机上。
我还应该检查主机中的任务“是否合适”。
例如,t1
和t2
只能分别映射到h1
和h2
,cpu
,mem
和taskCap
} h1
和h2
的要求超过t1
和t2
的要求。
我正在考虑创建2个图来解决这个问题
hostgraph = {'h2': {'h2': 6, 'h3': 5}, 'h3': {'h3': 5}, 'h1': {'h2': 2, 'h3': 5, 'h1': 3}}
[('b', 4), ('c', 3), ('a', 1)]
和
taskgraph = {'t2': {'t3': 5}, 't1': {'t4': 4, 't5': 4, 't2': 3, 't3': 4}}
在每个图中,键表示顶点,值是带键的字典 顶点连接到它们并估计延迟。
我解决问题的方法是接受每项任务(从具有最多“连接”的任务开始)并在主机图上进行深度优先搜索,检查约束。
我想我应该从像这样的词典开始
Mappings = {t1:False, t2:False....}
如果我找到任务的主机将其值更改为主机。
=> Mappings = {t1:h1, t2:h2...}
解决方案应该映射大多数任务(如果某些任务未映射,则可以。)
所以,我的问题:
1.您认为我的问题有更好或现有的解决方案/方法吗?
2.您如何建议跟踪最佳解决方案?
我正在考虑一个字典{#oftasksmapped: Mappings0, #oftasksmapped: Mappings2...}
,其中解决方案是映射了最多任务的映射。