基本上做的就是游戏的评价最好的办法是:
- 玩游戏 - 试试,看看你尝试什么情况下避免的,哪些是好的。尝试将这些情况制定为一般评估。
- 研究 - 有人可能已经研究过这个或类似的问题,如果有的话 - 也许有一些文章或其他材料暗示启发式功能。
我会做如下:
- 从最近的敌人创建一组启发式功能,游戏(距离每个描述一个方面,火线上的敌人,我的健康吧,...)。我会尽可能地玩这个游戏来扩展这个列表,当然也可以在网上寻找其他人可能为这个/类似游戏找到的想法。
- 从步骤之一,我们实际上得到了一组函数:
h_1(board),h_2(board),...,h_n(board)
- 但我们仍然不知道什么是我们的启发式功能
- 我会尽量找一些参数
a_1,a_2,...,a_n
,创造我的启发函数:
h(board) = a_1 * h_1(board) + a_2 * h_2(board) + ... + a_n * h_n(board
现在的问题是 - 如何获得这些参数。请注意,现在我们有一个优化问题。
这个特定问题的一个解决方案是蒙特卡罗学习。
蒙特卡洛学习:
蒙特卡洛学习的想法是创建一个代理列表(AIS),每个都有一些随机值初始化为a_1,...,a_n
- 并让他们之间的比赛。
比赛结束后,根据代表最好的代理商,为每位代理商更改a_1,...,a_n
的值,然后重新运行锦标赛。 (其中一种方法与Genetic Algorithms中的“代”步骤类似 - 交叉和突变,但也有其他方法)。
最后 - 蒙特卡洛学习过程应该会给你很好的价值a_1,...,a_n
- 这将给你一个很好的董事会启发式功能。
所以,问题是,你如何编写评估函数?有很多这样的例子,但他们显然专门针对他们的领域。国际象棋棋盘评估功能在这里无助于你。告诉我们你的想法。 –
是的,国际象棋评估功能没有帮助。我想过这样的事情。我必须优先考虑球员的需求。最大优先级是玩家不应该被杀死,所以如果其他玩家向我射击,我应该立即从子弹的轨道上跳出来。接下来收集硬币。像智者一样,我可以优先考虑需求并为每个人分配一个固定值。评估如此发生,它会返回每个需求的乘积与相应的常数值的和。最大优先需求将获得更高的价值常数。 – Sudheera
听起来像一个体面的开始。似乎你的优先事项应该根据你的健康情况而有所不同。如果你身体健康,追求健康包装应该是非常低的优先。但是,如果你在死亡的门口,那么追求健康包比硬币更有价值。 –