哪种算法可以为1200个站点找到最佳的两个网络连接选项?

时间:2018-06-07 08:30:43

标签: algorithm analytics

我是一名试图解决有趣分析问题的数据工程师。我已经链接到一个带有示例数据的小型Excel工作簿。

问题陈述:

一家公司在1200个地点设有分支机构。他们希望网络连接到所有分支机构。他们要求两个独立服务提供商提供两种连接解决方​​案,以确保服

有20多家服务提供商,每家提供多达30种连接产品。并非所有服务提供商都存在于所有地点,某些地点仅由某些供应商的产品覆盖。产品类型从最佳到最差排列。

更高的容量更好,但总体预算是一个限制因素。

每个地点提供合适的供应商和产品是一个繁琐的过程,尤其是在包含其他限制因素的情况下。

搜索表明LTR可能是使用的算法类别,但请指出任何更好的解决方案或方法。

Link to Workbook on Dropbox

谢谢, 艾伦。

3 个答案:

答案 0 :(得分:0)

您的问题很小,只要成本函数不太复杂,您就可以强制它。

您有1200个地点,每个地点有20个提供商,每个提供商有30个产品。您希望从每个位置选择2个产品,来自独立提供商:(20 * 30 + 19 * 30)+ 1200 = 1.4M解决方案进行分析。

您可以运行简单的回溯来找到最小化总成本的解决方案,并且由于问题不是太大,因此运行起来只需几秒钟。基本伪代码可以是:

 bruteForce(partialAnswer, currentLocation, constraints, bestAnswer):
     for (each possible pairOfOfferings from different provicers at
               currentLocation):
         add pairOffering to partialAnswer
         if (pairOfOffering ok according to constraints):
             if (currentLocation is last location left):
                if (partialAnswer beats bestAnswer according to cost function):
                    update bestAnswer
             othwerwise:
                call bruteForce(
                         partialAnswer, nextLocation, constraints, bestAnswer)
         remove pairOffering from partialAnswer

修剪搜索空间可以显着提高搜索速度,但除非你有更多的位置,或者你真的需要亚秒响应时间,否则可能不值得。

答案 1 :(得分:0)

这个问题似乎很适合整数编程。您可以像PuLP一样向库中描述变量,约束和目标函数,让库完成查找最优解的肮脏工作。

答案 2 :(得分:0)

这听起来像minimum-cost flow problemnetwork simplex algorithm在很小的范围内很难被击败。

MCFSimplex是可用的probably the fastest开源网络单工实现,因此可能是您正在寻找的内容。它有a Python wrapper