C# 找到扫描仪的最短路径

C# 找到扫描仪的最短路径,c#,C#,我正在使用一台近场扫描仪,需要找到一种方法来获取扫描头的最短路径 假设我想同时使用13个点 然后,我从扫描仪中获取当前位置点0,并查找最近的点1。 现在,点1成为当前位置,我寻找距离点1最近的点-点2。 现在点2成为当前点,依此类推。。。 当然,这不是最短的路径 扫描仪必须能够一次处理25个或更多点,因此排列不是一个选项。 移动1cm需要0.45s,表面大部分为10x15cm 主要目标是赢得时间并加快扫描速度 这必须在C或Matlab中完成 这可能吗 除了暴力强制所有可能的组合之外,没有数学解决

我正在使用一台近场扫描仪,需要找到一种方法来获取扫描头的最短路径

假设我想同时使用13个点

然后,我从扫描仪中获取当前位置点0,并查找最近的点1。 现在,点1成为当前位置,我寻找距离点1最近的点-点2。 现在点2成为当前点,依此类推。。。 当然,这不是最短的路径

扫描仪必须能够一次处理25个或更多点,因此排列不是一个选项。 移动1cm需要0.45s,表面大部分为10x15cm

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

这必须在C或Matlab中完成


这可能吗

除了暴力强制所有可能的组合之外,没有数学解决方案。

你可以尝试不同的算法来找到一个好的解决方案——遗传算法等等,但是如果你找到了最好的解决方案,你永远也说不出来

例如,请参见

编辑 有时,你可以决定你是否有最好的解决方案,除非你尝试了所有的方法。但这是一些罕见的特殊情况。如果您的路径长度等于每个点的最短距离之和,则您已找到最佳路径。就像你所有的点都在一条线上,你走1-2-3-n。但通常你只能找到一些不是最好的解决方案,而不知道是否会有更好的解决方案

编辑2 作为一个想法:如果主要目标是不浪费任何时间,我会这样做:选择第一个点,你希望扫描仪移动到。开始移动扫描仪。当扫描仪移动不同的线程时,使用NN算法计算路径。现在在路径上运行蒙特卡罗算法,以找到更好的方法。当扫描仪到达第一个点时,停止MC algo扫描仪,需要向MOVECOMPLETION发送信号!并将路径中的第一个点作为新的扫描仪目标。重复前面的步骤,直到到达最后一点。
这样,您只需要计算扫描仪移动所需的时间。因为你总是使用NN路径作为基础,你永远不会变得更糟,但有时会更糟?更好。该算法可以很容易地并行执行,因此在多核机器上获得更好的结果。

如果输入大小足够小,可以使用蛮力解决方案,那么您就可以判断是否找到了最佳解决方案。@SebastianNegraszus Right。但是现在我们正处于OP已经排除的阶段:尝试所有的排列。暴力强迫所有可能的组合将花费25分的时间。我开始认为我的最近邻NN算法或所谓的贪婪算法会给我最好的结果?大多数算法需要花费很多时间或者需要一个起点和终点,而我只有一个起点。同样,我们的主要目标是赢得时间,加快扫描速度。如果总测量时间比使用NN算法要长,那么找到绝对最短路径是没有用的。@TommyDorné:我已经更新了我的答案。我会试试看;那是个好主意!我试试看。但是我必须用定时器来代替,因为没有办法得到MoveCompletetion信号。。。这是一台经过改造的旧数控机床。谢谢你的帮助!