找到扫描仪的最短路径

时间:2012-11-26 10:17:37

标签: c#

我正在开发一个近场扫描仪,需要找到一种方法来获得扫描头的最短路径。

假设我想一次使用13个点。

  • 然后我从扫描仪中取出当前位置(point0)并寻找最近的点(Point1)。
  • 现在Point1成为当前位置,我寻找最接近point1的点 - (point2)。
  • 现在point2成为当前点,依此类推......

当然,这不是最短路径。

扫描仪必须能够同时处理25个点或更多点,因此不能选择排列。 行程1厘米需要0.45秒,表面大多为10x15厘米。

主要目标是赢得时间并加快扫描速度。

这必须在C#或Matlab中完成。

这可能吗?

1 个答案:

答案 0 :(得分:1)

除了强制所有可能的组合之外,没有数学“解决方案” http://en.wikipedia.org/wiki/Travelling_salesman_problem

您可以尝试不同的算法来找到“好的”解决方案(遗传算法等),但如果您找到了最佳解决方案,您将永远无法判断。

在SO上,请参阅What is an NP-complete in computer science?例如

修改 有时您可以确定您是否拥有最佳解决方案(尝试所有解决方案后除外)。但这些是一些罕见的特殊情况。如果路径的“长度”等于每个点的最短距离之和,则找到最佳值。就像你站在一条线上的所有点,你去1-2-3-n。但通常你只能在不知道是否会有更好的解决方案的情况下找到不是最佳解决方案的东西。

<强> EDIT2 作为一个想法:如果主要目标不是随时“浪费”,我会这样做:选择第一个点,您希望扫描仪移动到。开始移动扫描仪。扫描仪移动(不同的线程)时,使用NN算法计算路径。现在运行蒙特卡洛算法找到更好的东西。当扫描仪到达第一个点时,停止MC算法(扫描仪需要发出MoveCompletetion信号!)并将路径中的第一个点作为新的扫描仪目标。重复前面的步骤,直到到达最后一点 这样,您只需要花时间计算扫描仪需要移动的时间。因为你总是使用NN路径作为基础,所以你永远不会变得更糟,但有时(经常?)会变得更好。该算法可以很容易地并行完成,因此可以在多核机器上获得更好的结果。