从列表中选择N个位置以最大化总和,具有最小距离约束

时间:2013-05-22 15:39:25

标签: algorithm

我想从250个地点中选择5个地点,以最大化预期利润,使每个地点之间的最小距离为5英里。给出了与每个位置相关的预期利润和它们之间的距离。

我试图找出这是否是一个标准问题。应用过滤器来获得解决方案似乎是计算密集型的。我一直在探索模拟退火等方法,以达到足够好的解决方案。

1 个答案:

答案 0 :(得分:3)

由于您使用的是大圆距离,因此有几种可能性可以提供一些质量保证:欧几里得图的近似方案和整数规划。前者在理论上更具可扩展性,但后者给出了精确的最优值,并且假设求解器可用,则更容易实现。 (当然,你总是可以做一些特别的事。)因为你的位置很少,所以我会描述这个。

我将通过将您的问题制定为一个来简要解释整数程序。

maximize profit1 * x1 + profit2 * x2 + ... + profit250 * x250
subject to
x1 + x2 + ... + x250 = 5  (select exactly 5 localities)
for every pair of localities {i, j} less than 5 miles from each other,
    xi + xj <= 1
x1, x2, ..., x250 in {0, 1}

变量xi的含义是,如果选择了地区i,则为1;如果未选择地点i,则为0。

您需要编写一个小子程序,以便按照首选格式将此程序传递给您喜欢的解算器。要查找求解器,请搜索“MIP求解器”;有免费和商业产品,绑定到各种语言。尝试得到一个支持clique cut(我知道商业CPLEX和免费的GLPK)。如果没有,那没关系;你可以自己实现Bron-Kerbosch来生成表格的约束

xa + xb + ... + xz <= 1

其中a, b, ..., z是彼此相差5英里的地方。