从列表中选择N个位置以最大化所选位置的邻域的总利润

时间:2013-05-23 09:58:50

标签: algorithm

在1000个地点中,250个地点有资格设立商店。我想要选择这250个地区中的5个地方,这样它可以最大化来自所选地点的社区的利润总和,并且这些地点相距至少5英里。给出了人们从一个地方到另一个地方旅行的意愿(定义该地点的邻居)

我尝试过整数编程,但在定义目标函数时遇到了问题。任何可以解决这个问题的聚类/优化技术?

编辑:

假设:

  • 1000个位置和任意两个位置之间的大圆距离
  • 所有1000个地点的人们从一个地方到另一个地方旅行的意愿
  • 250个符合条件的地点

目标:

最大化5个集群的利润,其中每个集群包含一个选定的位置以及人们愿意前往所选位置的所有位置。

约束:

  • 所选位置总数必须为5,且必须来自250个符合条件的地点
  • 选定的地点必须至少相距5英里
  • 每个位置只能属于一个群集

2 个答案:

答案 0 :(得分:2)

受限制的完整枚举应该针对此问题大小执行:

  1. 枚举所有可行的位置组合,不违反“至少相隔5英里”的约束。一个简单的递归,很容易并行化。
  2. 对于#1中的每个组合,计算布局“覆盖”的位置总数,并选择最大值。对于这1000个节点中的每个节点,如果节点中的任何人将进入哪个插座,则查找哪个插座,如果有任何插座可达,则为+1再次轻松并行化。
  3. 可选。其中同样优秀的人更喜欢那些具有最佳“负载平衡”的人。
  4. 您正在处理的问题是: http://en.m.wikipedia.org/wiki/Quadratic_assignment_problem

    接近这些的经典启发式是分支和绑定,遗传,退火。完整的枚举将用于验证启发式是否能够在小问题规模上有效地接近全局最小值。

答案 1 :(得分:0)

如果我正确理解您的问题,您需要以下内容:

让变量Li代表被选中的位置i。 (i = 1..250)

Si = {Lj for all j such that distance(Li, Lj) <= 5 miles}

Ci为常量,表示Li

的邻域值

约束是:

Sum Si <= 1
Li = 1 or 0
Sum(Li for all i) == 5

目标函数是 最大化Sum(Li*Ci for all i)