在游戏中放置防御结构

时间:2010-02-23 11:39:25

标签: language-agnostic artificial-intelligence algorithm

我正在为游戏Defcon制作AI机器人。游戏中有不同人口的城市和范围有限的防御结构。我正在尝试制定一个用于放置防御塔的好算法。

  • 人口较多的城市更重要的是保卫
  • 失去防御塔是一个打击,所以塔应该合理地放在一起
  • 塔楼和城市只能放在陆地上

因此,根据这三条规则,我们看到最好的位置是塔位于最大人口区域周围的环(尽管我不希望算法只是盲目地在最高区域周围放置一个环。人口,有时可能会有两组相距很远的城市,在这种情况下,算法应该制作2个圆圈,每个圆圈占我总塔数的一半。)

我想知道可以使用哪种算法来确定塔的位置?

4 个答案:

答案 0 :(得分:2)

我会定义一个函数来确定放置在该位置的塔的值。然后在该功能中搜索最大值并在那里放置一个塔。

该功能的草图可能如下所示:

if water return 0

popsum = sum for all city over (population/distance) // it's better to have towers close by

towersum = - sum for all existing towers (1/distance) // you want you towers spread somewhat evenly

return popsum + towersum*f // f adjusts the relative importance of spreading towers equally and protecting the population centers with many towers 

应该给出合理的算法。为了改进,您可以将1 /距离函数更改为不同的值,以获得更快或更慢的下降。

答案 1 :(得分:2)

我首先要实现一个适应度函数,该函数计算给定地图上一组塔提供的预期保护。

你计算了“受保护”区域内的人口数量,其中两个塔楼所覆盖的区域的评级略高于仅由一个塔楼覆盖的区域(确切的比例因子很大程度上取决于游戏机制,“ )。

然后你可以使用genetic algorithm来试验不同的展示位置,然后让它运行几次(徘徊?)迭代。

如果你的适应度函数非常适合放置的真实质量,并且你的遗传算法的实现是正确的,那么你应该得到一个合理的结果。

一旦你完成了所有这些,你就可以开始制定攻击计划,试图优化任何一组防御塔位置的伤亡人数。一旦你拥有了这个,就可以将这两个群体相互对立,并以这种方式达到更好的防御计划(这是artificial life的基本思想之一)。

答案 2 :(得分:1)

只需定义一个效用函数,它将潜在的构建位置作为输入,并返回该位置的“评级”。我想它看起来像是:

utility(position p) = k1 * population_of_city_at_p +
                      k2 * new_area_covered_if_placed_at_p +
                      k3 * number_of_nearby_defences

k1k2k3是您需要调整的任意常量

然后,只需随机抽取一堆不同的点p,然后选择效用最高的点。

答案 3 :(得分:1)

我不知道游戏,但是根据你的描述,你似乎需要一个类似于解决(加权)k中心问题的算法。好吧,不幸的是,这是一个NP难题,所以在最好的情况下,你会得到一个由某个因素限制的近似上限。

看看这里:http://algo2.iti.kit.edu/vanstee/courses/kcenter.pdf