我正在为游戏Defcon制作AI机器人。游戏中有不同人口的城市和范围有限的防御结构。我正在尝试制定一个用于放置防御塔的好算法。
因此,根据这三条规则,我们看到最好的位置是塔位于最大人口区域周围的环(尽管我不希望算法只是盲目地在最高区域周围放置一个环。人口,有时可能会有两组相距很远的城市,在这种情况下,算法应该制作2个圆圈,每个圆圈占我总塔数的一半。)
我想知道可以使用哪种算法来确定塔的位置?
答案 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
(k1
,k2
和k3
是您需要调整的任意常量
然后,只需随机抽取一堆不同的点p
,然后选择效用最高的点。
答案 3 :(得分:1)
我不知道游戏,但是根据你的描述,你似乎需要一个类似于解决(加权)k中心问题的算法。好吧,不幸的是,这是一个NP难题,所以在最好的情况下,你会得到一个由某个因素限制的近似上限。