【问题标题】:A traveling salesman like problem旅行推销员之类的问题
【发布时间】:2010-10-23 12:28:43
【问题描述】:

给定二维欧几里得平面中的一组点:P={V1,V2,..,Vn} ,我们假设有K个不同类型的点:T1,T2,..,TK,每个点Vi 恰好属于 K 种类型之一。

KTSP巡演定义:
给定同一二维欧几里得平面中的任意位置点 V0(V0 没有类型),路径 V0->V'1->V'2->V'3->....->V'K->V0 被称为 KTSP 游览当且仅当 V' i 属于 i 类型。

KTSP 游览只是在同一给定任意点开始和结束的普通游览,但受到另外两个限制: (1) 它通过每一种类型的点,并且只通过一次。 (2)路径经过的点的类型有顺序。即先从V0点开始,然后先通过type T1 point,再type type T2 point,再type type T3 point,以此类推,直到通过type TK 点,然后返回 V0

这是我的问题:
当给定点位置 V0 时,找到最短的 KTSP 游览。

例如下图中,每种颜色代表一种类型的点,有3种不同类型的点,我们假设蓝色点是类型1,红色类型2,黑色类型3,
黄色的小三角形是给定的位置 V0,那么对应于这个特定 V0 的最短 TSKP 行程用四个蓝色箭头表示。

在我看来这是经典 TSP 问题的变体,但我想不出算法,需要帮助!

【问题讨论】:

    标签: algorithm optimization math graph


    【解决方案1】:

    不是tsp,而是最短路径。

    考虑k层点:

    • 在 k 层上,你只有所有的颜色点 k
    • 在一层的每个点和下一层的每个点之间都有一条有向边
    • 在 V0 和第 1 层的所有点之间添加一条边
    • 创建 V0、V0' 的副本并在第 k 层的每个点和 V0' 之间添加一条边

    现在你想要的是 V0 和 V0' 之间的最短路径,它将通过第 1、2...k 层,最后是 V0',给你“最短的 TSKP 之旅”。

    【讨论】:

    • @Loïc Février:数万
    • 每层有多少个?实际上,您可以逐层计算距离,因此复杂度将为 O(k*M^2),其中 M 是每层中的元素数。
    • 一层千层,我明白你的想法,以动态编程方式?
    • 没错,但你需要将复杂度与最短路径算法进行比较。
    【解决方案2】:

    我建议回溯(如果点数不是很大)。

    这是最简单的算法

    【讨论】:

    • 不幸的是这个数字非常庞大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 2011-09-08
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2015-08-14
    • 2017-11-11
    相关资源
    最近更新 更多