专门路径寻路的方法?

我正在用我(非常少的)空闲时间开发一个roguelike游戏。每个关卡基本上都是由一些矩形房间通过路径连接在一起的。我希望房间之间的路径看起来自然且蜿蜒。例如,我不认为以下路径看起来自然:

       B       
       X       
       X       
       X       
      XX       
     XX        
    XX         
  AXX          

我真正想要的是这样的:

       B       
       X       
       XXXX    
          X    
          X    
          X    
          X    
  AXXXXXXXX    

这些路径必须满足以下几个属性:

  1. 我必须能够指定一个区域,它们在这个区域内受到限制。
  2. 我必须能够参数化它们的蜿蜒程度和长度。
  3. 这些线条不应该看起来像它们从一条路径开始并在另一条路径结束。例如,上面的第一个例子看起来好像是从 A 开始并在 B 结束,因为它基本上反复改变方向直到与 B 对齐,然后就直接过去了。

我本来希望使用 A* 算法,但老实说,我不知道我的启发式函数应该是什么。我也考虑过使用遗传算法,但我不知道这种方法最终会有多实用。

我的问题是,有什么好的方法可以得到我想要的结果?请不要仅仅指定一种方法,如“A*”或“Dijkstra 算法”,因为我还需要关于一个好的启发式函数的帮助。


回答:

在你弄清楚如何生成路径之前,你必须找到一种更精确的方式来表达你想要什么。一种方法是给每个路径分配一个分数,然后搜索高分路径。以下是一些需要考虑的问题:

  1. 你更喜欢长的直线段还是短的?你将如何量化这种偏好?(为了让搜索算法收敛,如果你的评分函数是非线性的,将会更容易。)

  2. 如果你不想直接到达目的地,你可能想奖励那些偏离主线的步骤。例如,在从 A 到 B 的路径上,考虑每个点,然后走三步并计算点之间的方向。现在取该方向与从 A 到 B 的直线方向的余弦值。取其负数。在线上的步骤对你来说算作 -1,垂直的步骤是中性的,而偏离线的步骤对你来说算作 +1。

以下是一些好的后续步骤:

  • 想出更多评分的想法。
  • 手工绘制十几个路径,并根据你喜欢的程度对它们进行排序。
  • 对于每个路径,手工创建几个小的变体。
  • 在所有路径上运行你的评分函数。不断调整,直到你得到一个评分函数,它喜欢喜欢的东西。

然后你就可以开始考虑搜索算法了。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注