【发布时间】:2016-04-17 15:36:59
【问题描述】:
我有一个问题,我将其转换为 TSP 类型的问题,以便我可以在这里解释它,我正在寻找任何可能对我有帮助的现有算法。
- 有一份我需要去的地方列表,我需要去所有地方。
- 有些地方必须作为 n 的第一个 x 访问(即,它们需要是前 3 个或前 5 个访问过的地方)。 (数字是任意的)
- 还有一些其他地方必须作为 n 中的最后一个 y 访问(即,它们需要是最后 3 个或最后 5 个访问过的地方)。
- 这些地方是可以分类的(有些可能没有分类),对于那些在一个类别中的,他们需要尽可能远离彼此(即,如果2个地方被归类为绿色,那么我想在这些绿色分类的地方之间尽可能多地访问其他类别的地方)
这是一个示例列表:
A:绿色类别:最后 3 个
B:无类别:无排序
C:粉色类别:前 3 个
D:无类别:无排序
E:无类别:最后 3 个
F:类别绿色:无订购
G:粉色类别:前 3 个
我想的顺序是:
G(pink,first3) -> F(green,none) -> C(pink,first3) -> D(none,none) -> B(none,none) -> E(none,last3) - > A(green,last3)
解释: G首先出现,以使其尽可能远离C。 F紧随其后,使其尽可能远离A。 C 紧随其后,因为它需要在前 3 个中。C 和 G 可以互换 DB可以放在任何地方 E 紧随其后,因为它必须是最后 3 A 排在最后,因为它必须排在最后 3 位,并且将其放在最后,尽可能远离 F。
我的想法是评估每个边缘成本,然后动态计算边缘成本。因此,如果您尝试先访问 A,然后访问 F,则成本会很高,而不是先访问 A,然后访问其他地方,然后再访问 F(其中之间的位置数量将成为成本的一部分)。另外,我会介绍一个起点和终点,因此,如果我必须作为第一个 x 访问一些地方,如果起点在那个地方的 N 个地方内,我可以给它一个低成本。结尾也一样。
我想知道是否有一种图算法可以考虑这种动态权重/成本并确定从开始到结束的最短路径?
注意:在某些情况下,最好的情况可能无法获得,这没关系,只要我能证明成本很高,因为没有足够的类别分离(例如:所有地方都属于同一类别) .
蛮力算法 我最初的想法是:给定一个地点列表,提出地点排序的所有组合并计算每个组合之间的成本,然后选择最便宜的。 (但这意味着评估 n!对于 8 来说,我必须评估 362880 个订单!为什么是 8,因为这就是我认为要评估的平均位置数)
但是有没有一种算法可以让我在不测试所有排序的情况下确定它。
【问题讨论】:
-
您需要一个更清晰的定义。您要求最短路径,但随后要求子路径最长。这没有任何意义,除非你(用数学严谨的态度)说如何在两个目标之间进行权衡。