我是一名试图解决有趣分析问题的数据工程师。我已经链接到一个带有示例数据的小型Excel工作簿。
问题陈述:
一家公司在1200个地点设有分支机构。他们希望网络连接到所有分支机构。他们要求两个独立服务提供商提供两种连接解决方案,以确保服
有20多家服务提供商,每家提供多达30种连接产品。并非所有服务提供商都存在于所有地点,某些地点仅由某些供应商的产品覆盖。产品类型从最佳到最差排列。
更高的容量更好,但总体预算是一个限制因素。
每个地点提供合适的供应商和产品是一个繁琐的过程,尤其是在包含其他限制因素的情况下。
搜索表明LTR可能是使用的算法类别,但请指出任何更好的解决方案或方法。
谢谢, 艾伦。
答案 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 problem,network simplex algorithm在很小的范围内很难被击败。
MCFSimplex是可用的probably the fastest开源网络单工实现,因此可能是您正在寻找的内容。它有a Python wrapper。