我正在做一个项目,我需要在主机(计算机)中分配一些任务(进程)。
我的问题类似于this页面中的云平衡教程。
我有以下几门课:Host(name, cpu=None, mem=None, taskCap=None, encrypt=None, latClass=None, loc=None)
cpu,mem,taskCap分别是CPU功率、内存容量和任务数的Host's容量。在
^{pr2}$
cpuReq,memReq分别是CPU和内存中的Task's需求。在
我还有两本字典。
一个是关于主机的延迟,另一个是关于任务对延迟的要求
例如,我们有4个主机(h1 .. h4)和六个任务(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和{}之间的延迟是2,h1和{}之间的延迟是3,依此类推。在
同样t_lat_dir = {3: [(t1, t2)], 4: [(t1, t3), (t1, t4), (t1, t5)], 5: [(t2, t3)]}
其中任务t1和t2需要映射到延迟小于或等于3的主机上。在
我还应该检查任务是否适合主机。
例如,t1和{}可以分别映射到h1和{},前提是h1和{}的{}、mem和{}大于{}和{}。在
我想创建两个图来解决这个问题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...},其中的解决方案是映射了最多个任务的映射。在