Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索尖峰时刻游戏?_C#_Algorithm_A Star - Fatal编程技术网

C# 搜索尖峰时刻游戏?

C# 搜索尖峰时刻游戏?,c#,algorithm,a-star,C#,Algorithm,A Star,为了完成学校的作业,我必须为尖峰时刻的游戏做一个解决方案。。如果你不熟悉高峰时间。。检查此链接: 对于这个解算器,我必须使用A*搜索算法,我在互联网上看了一下,我想我完全理解了算法的工作原理。。只是我真的不知道如何在解算器中实现它。。也不知道我该如何为汽车建造电网。。有人能给我一些建议/帮助吗? 这不是一个完整的解决方案。为了表示汽车网格,我只使用一个矩形单元格数组,其中每个单元格都标有一个整数——0表示“空”,每个汽车都有一个特定的数字,因此网格中的不同汽车将显示为具有相同数字的连续单元格 此

为了完成学校的作业,我必须为尖峰时刻的游戏做一个解决方案。。如果你不熟悉高峰时间。。检查此链接:

对于这个解算器,我必须使用A*搜索算法,我在互联网上看了一下,我想我完全理解了算法的工作原理。。只是我真的不知道如何在解算器中实现它。。也不知道我该如何为汽车建造电网。。有人能给我一些建议/帮助吗?
这不是一个完整的解决方案。

为了表示汽车网格,我只使用一个矩形单元格数组,其中每个单元格都标有一个整数——0表示“空”,每个汽车都有一个特定的数字,因此网格中的不同汽车将显示为具有相同数字的连续单元格

此时,您应该能够编写一个函数来返回给定网格中所有可能的“移动”,其中“移动”是从一个网格状态到另一个网格状态的转换——您可能不需要对移动进行更好的编码

要实现*,您需要一个简单的启发式方法来计算一个动作看起来有多好,这样您就知道首先要尝试哪些动作。我最初建议,将目标车移到目标车附近或使目标车前部空间更近的任何移动都可能是更好的候选移动。就像Will A在评论中所说的,除非你要解决一个1000x1000的高峰时段板,否则这可能不是什么大问题


这就是我能想到的所有棘手的部分。

为了表示汽车网格,我只使用一个矩形单元格数组,其中每个单元格都用一个整数标记——0表示“空”,每个汽车都有一个特定的数字,因此网格中的不同汽车将显示为具有相同数字的连续单元格

此时,您应该能够编写一个函数来返回给定网格中所有可能的“移动”,其中“移动”是从一个网格状态到另一个网格状态的转换——您可能不需要对移动进行更好的编码

要实现*,您需要一个简单的启发式方法来计算一个动作看起来有多好,这样您就知道首先要尝试哪些动作。我最初建议,将目标车移到目标车附近或使目标车前部空间更近的任何移动都可能是更好的候选移动。就像Will A在评论中所说的,除非你要解决一个1000x1000的高峰时段板,否则这可能不是什么大问题


这就是我能想到的所有棘手的部分。

正如mquander或Will已经指出的,A*算法可能有点过于适合您的问题

我现在给你一些提示,你可以用什么算法来解决这个问题。 我不想解释这些算法是如何工作的,因为你可以在互联网上找到很多好的描述。不过,如果你有问题,请尽管问我

你可以使用一些属于“无信息搜索”的算法。例如,有广度优先搜索、深度优先搜索、统一成本搜索、深度有限搜索或迭代深化搜索。如果您使用广度优先搜索或统一成本搜索,那么您可能必须处理可用内存空间问题,因为这些算法具有指数空间复杂性(并且您必须将整个搜索空间保留在内存中)。因此,使用深度优先搜索(空间复杂度O(b*m))对内存更友好,因为如果树的左侧不包含解决方案,则可以省略您首先访问的树的左侧部分。深度限制搜索和迭代深化搜索几乎相同,而在迭代深化搜索中,您可以迭代地增加树的搜索级别

如果比较时间复杂度(b=树的分支因子,m=树的最大深度,l=深度级别限制,d=解决方案的深度):

广度优先:b^(d+1)

统一费用:b^

深度拳:b^m

深度限制:b^l如果(l>d)

迭代深化:b^d

正如您所看到的,迭代深化或广度优先搜索的性能相当好。深度限制搜索的问题是,如果您的解决方案位于比您的搜索级别更深的位置,那么您将无法找到解决方案

然后就是所谓的“知情搜索”,如最佳优先搜索、贪婪搜索、a*、爬山或模拟退火。简而言之,对于最佳第一搜索,您使用每个节点的评估函数作为“可取性”的估计。贪婪搜索的目标是扩展节点,使您更接近目标。爬山和模拟退火非常相似。斯图尔特·拉塞尔解释爬山如下(我非常喜欢…):爬山算法就像是在浓雾中带着健忘症攀登珠穆朗玛峰”。它只是一个不断向增值方向移动的循环。因此,您只需“行走”到增加评估函数的方向

我会使用一种统一的搜索算法,因为它们很容易实现(您只需要对树进行编程并正确遍历即可)。如果您有一个好的评估函数,知情搜索通常会执行得更好。。。
希望这对您有所帮助…

正如mquander或Will已经指出的,A*算法可能有点过于适合您的问题

我现在给你一些提示,你可以用什么算法来解决这个问题。 我不想解释这些算法是如何工作的,因为你可以在互联网上找到很多很好的描述。但是,如果你有问题,请毫不犹豫地问我

您可以使用一些属于“非信息搜索”类型的算法。例如广度优先搜索、深度优先搜索、均匀代价搜索、深度限制搜索或迭代深化搜索。如果使用广度优先搜索或均匀代价搜索,则可能需要处理自t