在我的一个项目中,我需要实现一种能够进行负载平衡的算法。与计算机科学理论中存在的一般负载平衡问题(NP难)不同,该问题的任务是将M个负载分配到N个服务器上(M >> N),以使任何一个服务器中的最大负载最小化。我处理的情况更加通用。在我的情况下,负载平衡问题更加通用,因为它具有更多的约束条件,例如:某个作业只能分配给某个服务器(例如,作业Mi具有某些特殊安全要求,因此只能在安全服务器Nj上分配/执行)。
现在我查看了Kleinberg/Tardos的书籍,并找到了一个章节(11.7),讨论了更通用的负载平衡问题(带约束的负载平衡),我发现这个问题与我所处的情况完全匹配。通用负载平衡问题已经从IP转换为LP,利用LP可以导致作业分配给机器的分数,后来将其四舍五入并添加额外的O(MN)时间。已经证明,这种近似解决方案与最小可能解之间的差异不超过2倍。
是否有人可以指向一些实现了这个算法的C / Java / Python / MATLAB代码?由于KL书几乎没有任何示例或样本伪码/实际代码,因此有时很难完全理解算法。对于问题的线性规划部分 - 什么样的实现适合它 - 单纯形法/内点法?当这个LP部分的复杂度添加到问题中(用于分数重新分配部分)时,会产生多大的差异?不幸的是,KL书在这些方面并不非常详尽。
一些示例C / Java / Python / MATLAB代码(或指向代码的指针),展示了这个完整算法的某些实际实现,将会非常有帮助。
编辑:原始论文为“David B. Shmoys,Éva Tardos:广义分配问题的近似算法。数学程序。62:461-474(1993年)”
现在我查看了Kleinberg/Tardos的书籍,并找到了一个章节(11.7),讨论了更通用的负载平衡问题(带约束的负载平衡),我发现这个问题与我所处的情况完全匹配。通用负载平衡问题已经从IP转换为LP,利用LP可以导致作业分配给机器的分数,后来将其四舍五入并添加额外的O(MN)时间。已经证明,这种近似解决方案与最小可能解之间的差异不超过2倍。
是否有人可以指向一些实现了这个算法的C / Java / Python / MATLAB代码?由于KL书几乎没有任何示例或样本伪码/实际代码,因此有时很难完全理解算法。对于问题的线性规划部分 - 什么样的实现适合它 - 单纯形法/内点法?当这个LP部分的复杂度添加到问题中(用于分数重新分配部分)时,会产生多大的差异?不幸的是,KL书在这些方面并不非常详尽。
一些示例C / Java / Python / MATLAB代码(或指向代码的指针),展示了这个完整算法的某些实际实现,将会非常有帮助。
编辑:原始论文为“David B. Shmoys,Éva Tardos:广义分配问题的近似算法。数学程序。62:461-474(1993年)”