在我的一个项目中 - 我有一个场景,我需要实现一个能够进行负载平衡的算法。现在,与CS理论中存在的一般负载平衡问题(NP难度)不同 - 其中任务是在N个服务器中分配M个负载(M>> N),使得任何一个服务器中的最大负载最小化,我正在处理的情况更为通用。在我的情况下,负载平衡问题在某种意义上更通用 - 它在形式上有更多的约束 - 这样的工作只能分配给这样一个这样的服务器(比方说工作M_ {i}有一些特殊的安全要求,因此只能在安全服务器N_ {j}上分配/执行。
现在我查看了Kleinberg / Tardos的书,我找到了关于更通用的负载平衡问题(带约束的负载平衡)的一节(11.7),我发现这个问题与我所处的情况完全匹配。通用负载平衡问题已经从IP转换为LP,利用了LP可以导致将作业分数分配给机器的事实,这些机器随后被舍入为流程添加额外的O(MN)时间。然后,该近似解决方案显示在可能的最小值的2倍之内。
有人能指出我已实现此算法的某些C / Java / Python / MATLAB代码吗?由于KL书几乎没有提供任何示例或样本伪/实际代码,因此有时难以完全内化算法。对于问题的线性规划部分 - 什么样的实现适合它 - Simplex / Interior Point?当这个LP部分的复杂性被添加到问题中时(对于分数重新赋值部分),它会产生多大的差异?不幸的是,KL书在这些方面并不是很透彻。
一些示例C / Java / Python / MATLAB代码(或代码指针)显示了这个完整算法的一些实际实现将非常有用。
编辑:原始论文是“David B. Shmoys,ÉvaTardos:广义指派问题的近似算法。数学计划.62:461-474(1993)”
答案 0 :(得分:0)
我这样做的一种方法是根据每台机器上的当前负载来加载平衡。因此,如果有三台机器A,B,C ...... A的负载为10,B的负载为5,C的负载为2,则下一个任务(假设负载为3)应该转到C(3 + 2 = 5<所有其他组合)。在相同的情况下,首先启动的任务通常首先完成(至少大部分时间)从每台机器中删除最旧的任务并重复上述过程......以递归方式执行此操作