如何为棋盘游戏(wizwoz)创建评估函数结果

游戏名为wizwoz:

两个玩家,红色(简称为r)和金色(简称为g)最初选择两个数值n和k。创建一个n × n的棋盘,并在棋盘上随机放置k个“r”和k个“g”。从玩家r开始,每个玩家在他的字母(玩家r用“r”,玩家g用“g”)放置在一个空的方格中。棋盘填满后,每个玩家的得分等于棋盘上用该玩家颜色填充的最大连通区域的尺寸(其中,连通区域是指区域内任意两个方格之间存在仅由上下左右移动组成的路径)。得分最高的玩家获胜,并获得其得分与另一玩家得分之间的差额。下面展示了两个完成的游戏示例,每个玩家最大的连通区域被标出。请注意,在第二个示例中,两个各有2个r的部分是不连通的。

enter image description here

我在编写alpha-beta剪枝算法时,卡在了评估函数上。

有什么帮助吗?最好是伪代码。


回答:

从一个非常简单的评估函数开始。例如,只使用当前最大组件的尺寸。等你让AI运作起来后,再考虑调整评估启发式方法。

这里是伪代码示例(未经测试)

components = {k:set([k]) for k in board}def contract(k1, k2):    if color(k1) != color(k2):        return    new = components[k1]    if k2 not in new:        new.union_update(components[k2])        for x in components[k2]:            components[x] = newfor x,y:    contract(board[x,y], board[x,y+1])    contract(board[x,y], board[x+1,y])return max(map(len, components))

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中创建了一个多类分类项目。该项目可以对…

发表回复

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