标签: evaluation-function

如何为游戏创建良好的评估功能?

我有时会编写程序来玩棋盘游戏.基本策略是标准的alpha-beta修剪或类似的搜索,有时通过终结游戏或开放的常用方法来增强.我主要使用国际象棋变体,所以当需要选择我的评估功能时,我会使用基本的国际象棋评估功能.

但是,现在我正在编写一个程序来玩一个全新的棋盘游戏.我如何选择一个好的甚至是体面的评估函数?

主要的挑战是相同的棋子总是在棋盘上,因此通常的材料功能不会根据位置而改变,并且游戏的播放次数不到一千次左右,所以人类不一定玩得太多还没有给出见解.(PS.我考虑过MoGo方法,但随机游戏不太可能终止.)

游戏细节:游戏在10×10的棋盘上进行,每侧固定6个棋盘.这些作品具有一定的运动规则,并以某种方式相互作用,但没有任何一块被捕获.游戏的目标是在棋盘上的某些特殊方块中放置足够的棋子.计算机程序的目标是提供与当前人类玩家竞争或更好的玩家.

artificial-intelligence machine-learning game-theory evaluation-function alpha-beta-pruning

19
推荐指数
2
解决办法
2万
查看次数

R插入模型评估与备用性能指标

我正在使用R的插入包进行网格搜索和模型评估.我有一个自定义评估指标,它是绝对误差的加权平均值.权重在观察级别分配.

X <- c(1,1,2,0,1) #feature 1
w <- c(1,2,2,1,1) #weights
Y <- 1:5 #target, continuous

#assume I run a model using X as features and Y as target and get a vector of predictions

mymetric <- function(predictions, target, weights){

v <- sum(abs(target-predictions)*weights)/sum(weights) 
return(v)
}
Run Code Online (Sandbox Code Playgroud)

这里给出了一个示例,说明如何使用summaryFunction为插入符号train()定义自定义评估指标.报价:

trainControl函数有一个名为summaryFunction的参数,它指定用于计算性能的函数.该函数应具有以下参数:

data是数据框或矩阵的参考,其中包含名为obs和pred的列,用于观察和预测的结果值(回归的数字数据或分类的字符值).目前,类概率不会传递给函数.数据中的值是单个调整参数组合的保持预测(及其相关参考值).如果trainControl对象的classProbs参数设置为TRUE,则将出现包含类概率的数据中的其他列.这些列的名称与类级别相同.lev是一个字符串,其结果因子级别取自训练数据.对于回归,将NULL值传递给函数.model是正在使用的模型的字符串(即传递给train的method参数的值).

我无法弄清楚如何将观察权重传递给summaryFunction.

r evaluation-function r-caret

7
推荐指数
1
解决办法
2329
查看次数

更好的游戏启发功能(AI Minimax)

有一个我用java编程的游戏.游戏很简单(参见下图).有4只鸟和1只幼虫.这是一个2人游戏(AI vs Human).

在此输入图像描述

  • 幼虫可以沿对角线向前和对角向后移动
  • 鸟只能向前倾斜
  • 幼虫如果可以到达第1行(围栏)则获胜
  • 如果鸟类没有动作,幼虫也会获胜
  • 鸟不能"吃掉"幼虫.
  • 如果幼虫没有向左移动(根本无法移动),鸟类会获胜

在此输入图像描述

当比赛开始时,幼虫开始,然后一只鸟可以移动(任何一只),然后是幼虫等......


我已经实现了MiniMax(Alpha Beta Pruning),我使用了以下的evaluate()函数(启发式函数).

让我们给板上的每个方块提供以下数字.

在此输入图像描述

因此,我们的评估功能将是

h(n)=幼虫的位置值 - 鸟的位置值1 - 鸟的位置值2 - 鸟的位置值3 - 鸟的位置值4

幼虫将尝试最大化启发式值,而鸟类将尝试最小化它

例:

在此输入图像描述

但是,这是一个简单而天真的启发式方法.它不会以聪明的方式行事.我是AI的初学者,我想知道如何改进这个启发式功能?

什么是好的/知情的启发式?

artificial-intelligence heuristics evaluation-function minimax alpha-beta-pruning

5
推荐指数
0
解决办法
2891
查看次数

我应该如何为 Connect 4 设计一个好的评估函数?

我有一个“Connect 4”游戏的 Java 实现(具有可变数量的列和行)。

此实现使用(根据用户的选择)Mini-max 的 Mini-max 算法和 Alpha-beta 剪枝,最大搜索深度为maxDepth

我现在的问题是为板的状态设计一个好的评估函数(这是在 maxDepth 处返回的值)。

该值介于-100(最差选择,对应于失败的情况)100(最佳选择,对应于获胜情况)之间,其中0应该是“平局”情况

其实我已经实现了两个函数(因为代码很长,我报告了伪代码)

1)

  • 没有赢/没有输

--> 如果表已满 ==> 绘制 (0)

--> 如果表未满 ==> 不确定的情况 (50)

--> 如果我赢了:100

--> 如果对手获胜:-100

2)

Of me:
- InARow[0] = maximum number of pieces in a HORIZONTAL in a row
- InARow[1] = maximum number of pieces in a VERTICAL in a row
- InARow[2] = maximum …
Run Code Online (Sandbox Code Playgroud)

java heuristics evaluation-function

5
推荐指数
2
解决办法
2万
查看次数

基于 F1 的自定义求值函数,用于 xgboost - Python API

我编写了以下自定义评估函数与 xgboost 一起使用,以优化 F1。不幸的是,它在使用 xgboost 运行时会返回异常。

评价函数如下:

def F1_eval(preds, labels):

    t = np.arange(0, 1, 0.005)
    f = np.repeat(0, 200)
    Results = np.vstack([t, f]).T

    P = sum(labels == 1)

    for i in range(200):
        m = (preds >= Results[i, 0])
        TP = sum(labels[m] == 1)
        FP = sum(labels[m] == 0)

        if (FP + TP) > 0:
            Precision = TP/(FP + TP)

        Recall = TP/P

        if (Precision + Recall >0) :
            F1 = 2 * Precision * Recall / (Precision + Recall)                
        else: …
Run Code Online (Sandbox Code Playgroud)

evaluation-function xgboost python-3.6

4
推荐指数
1
解决办法
1万
查看次数