我如何保证细胞自动机生成的迷宫可以解决/有趣?

时间:2012-05-18 00:22:36

标签: algorithm maze cellular-automata

我正在编写一个迷宫生成算法,这篇维基百科文章引起了我的注意。我决定在java中实现它,这很简单。我遇到的问题是,当生成类似迷宫的图片时,迷宫通常是不可解决的,并且通常不是很有趣。我的意思是有趣的是,有大量无法到达的地方,往往有很多解决方案。

我实施了1234/3规则(尽管可以轻松更改,请参阅注释的说明),开头的分布大致为50/50。迷宫总是达到平衡,在t阶段之间没有变化。

我的问题是,有没有办法保证固定起点和终点的迷宫可解决性?另外,有没有办法让迷宫更有趣解决(更少/一个解决方案和几个/没有无法到达的地方)?如果细胞自动机无法做到这一点,请告诉我。谢谢。

3 个答案:

答案 0 :(得分:3)

我不认为通过简单的细胞自动机可以确保一个可解决的,有趣的迷宫,除非有一些特定的标准可以置于起始状态。细胞不了解整体形状的事实,因为每个细胞不能与整个细胞群协调。

如果您坚持使用它们,您可以在生成完成后进行修改和路径查找的某种组合,但其他方法(如维基百科文章或this question中显示的方法)更容易实现,不会导致占据整个细胞的墙壁(除非你想要那样)。

答案 1 :(得分:1)

问题的根源在于“迷宫质量”是一种全局衡量标准,但您的自动机细胞仅限于对系统的本地知识。

要解决此问题,您有三个选择:

  1. 从外部添加全局信息。使用自动机和随机初始数据生成迷宫,然后测量迷宫质量(例如使用洪水填充或bunch of other maze solving techniques)并重复直到获得您喜欢的结果。

  2. 使用更复杂的一组显式规则和状态。你可以计算出一组规则/单元格值,它们既可以编码墙的存在,也可以编码路径的长度/质量。例如,-1将是墙,正值将是上方和左侧的所有邻居的总和。然后正值粗略地编码左上角的路径距离。这还不够,但它显示了一般的想法......你需要在系统规则中“直接”编码关于迷宫的算法。

  3. 使用一个不那么复杂但仍然很完整的规则集,并在初始状态下编码迷宫生成规则。例如,您可以使用conway's life并构建一个初始状态,该状态是通过滑翔机等实现迷宫生成的“程序”。

  4. 如果它可以帮助您在上面和之间绘制一个平行线:

    1. ghost in the machine /外部用户
    2. FPGA
    3. 编程通用CPU

答案 2 :(得分:0)

在其上运行路径查找算法。 Dijkstra会为您提供计算所有解决方案的可靠方法。 A *会给你一个很好的解决方案。

迷宫的难度可以通过这些算法解决它的速度来衡量。

你可以添加一些死胡同来关闭一些解决方案。