使用Python进行约束的任务分配

时间:2014-05-11 16:50:15

标签: python constraints allocation

我正在开发一个项目,我需要在主机(计算机)中分配一些任务(进程)。 我的问题类似于this页面中的云平衡教程。 我有以下课程:

Host(name, cpu=None, mem=None, taskCap=None, encrypt=None, latClass=None, loc=None)

cpumemtaskCap分别是CPU功率,内存功率和任务数量的Host's容量。

Task(name, cpuReq=None, memReq=None, execTime=None, utility=None, encrypted=None)

cpuReqmemReq分别是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告诉我们,在主机h1h2之间,延迟为2,h1h4之间的延迟为3,依此类推。

类似地,

t_lat_dir = {3: [(t1, t2)], 4: [(t1, t3), (t1, t4), (t1, t5)], 5: [(t2, t3)]}

其中任务t1t2需要映射到延迟小于或等于3的主机上。

我还应该检查主机中的任务“是否合适”。 例如,t1t2只能分别映射到h1h2cpumemtaskCap } h1h2的要求超过t1t2的要求。

我正在考虑创建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...},其中解决方案是映射了最多任务的映射。

0 个答案:

没有答案