zoukankan      html  css  js  c++  java
  • 网游练习总结(3)

    废话不多说了,看基本算法:

    关于博弈:

    对于博弈,谢识予在《经济博弈论》中给出过一个非技术性的定义:博弈即一些个人、队组或其他组织,在面对一定的环境条件,在一定规则下,一次或多次,同时或先后,从各自允许选择的行动或策略中进行选择并加以实施,各自取得相应结果的过程。一个简单的定义就是在优先在预测胜率前做出的决策就是博弈。

    博弈的要素:1.博弈方,2.决策,3.收益,4.博弈的次数与先后次序,5.博弈与信息。

    博弈的分类:

    (从博弈人数)[单人博弈][两人博弈(零和博弈)(非零和博弈)][多人博弈(结盟)(不结盟)];

    (从博弈次数)[一次博弈(静态博弈)][多次博弈(动态博弈)(重复博弈)];

    (从信息分类)[完全信息博弈(静态博弈)(动态博弈)][不完全信息博弈(静态博弈)(动态博弈)];

    零和博弈:

    零和博弈指参与博弈的各方在严格竞争下一方的收益必然意味着另一方的损失,博弈各方的收益和损失相加总和永远等于零。

    有鞍点的零和博弈:

    在矩阵中,一个数在所在的行是最大值,在所在的列中是最小值,或者在所在的列是最大值,在所在的行使最小值,则这个数就被称为鞍点。在零和博弈中,这个数就是一方的最大收益同时又是另一方的最小收益。零和博弈有鞍点的情形并不是很常见,大部分零和博弈是没有鞍点的。

    博弈的解:

    博弈的解就是双方在使自己收益最大化的情况下不得不接受的一对均衡策略。有鞍点的零和博弈的解就是一个策略对,是由博弈局势所决定的,在对方的限制条件下,双方最后不得不接受的结局所对应的一对策略。

    有鞍点的零和博弈求解方法:

    在博弈矩阵中每一行选出最小的数,在这些最小数中再选出最大的数;列中选出最大的数,在这些最大数中再选出最小的数,如果行与列选出的数值相等,则这个数就是博弈的值,而对应的行与列的策略就是这个问题的解。

    零和博弈的Von.Neumann与Mogenstern最大最小或最小最大策略解的一般描述:

    博弈方为甲方I与乙方II,甲方的策略为I1到In,乙方的策略为II1到IIm,收益矩阵:

    设甲在最大最小策略下所能得到的最小值为:

    乙在最小最大策略下准许甲能得到的最大值为:

    则可以证明:

    则称其为最大最小或最小最大准则下博弈的值,记为v,此时的策略对为最大最小策略或最小最大策略的解。

    其实,有鞍点的博弈不是经常会有的。但是对于象棋接下来的算法有一点辅助性理解就行了。

    接下来直接看中国象棋常用算法Alpha-Beta剪枝算法:

    Alpha-Beta算法是对minimax算法的一种优化,它在搜索过程中,在当前已经有最优结果以后是否决定继续深度搜索下去。Alpha-Beta算法只能使用递归来实现,在递归运算时,分别传入Alpha和Beta值,alpha为搜索到的最好值,任何比alpha小的值直接被剪切掉;Beta是对于对手来说是最坏的值,因此,这个值也是对手所能接受的最坏值得底线,根据策略来说,如果在搜索过程中返回的是一个比Beta更好的值,对于我们走棋方来说就没有这个机会了,我们应该直接返回最坏的值,但出于对方的局势,他也总会找到一个比Beta更好的值。

     

    中国象棋的算法生成:由于中国象棋每个局面的平均走法为2060,相对而言相当复杂,平均每个局面为40个走法;

    中国象棋价值评估:中国象棋不可能从一个局面直接进行搜索并计算出输赢,只能进行有限的搜索进行局面的优劣。

    (1)棋子价值:一方棋子总价值等于该方所有棋子乘以相应棋子的价值的总和。简而言之,也就是说此局面该方有棋子的基本情况;

    (2)位置价值:由于不同棋子在不同位置各自发挥的作用不同,因此,每个棋子在每个局面相对应的位置都会有不同的价值值;

    (3)关系价值:棋子之间的关系,也是评估双方优劣的重要因素;

    在博弈树中,比如黑方胜棋局面是一个极大值,那么红方为极小值,和棋则为0. 那么,黑方就会让局面的分值一直拉大,而红方只能将局面分值减小。因此,黑方会选择分值更大的节点,而红方就会选择能够接受范围内的最小的分值节点。

  • 相关阅读:
    PHP开发经常遇到的几个错误
    PHP的Trait
    PHP反射API
    php split 和 explode 的区别
    php判断检测一个数组里有没有重复的值
    PHP serialize 和 JSON 解析与区别
    php 单文件上传
    php 数组 类对象 值传递 引用传递 区别
    六. 网络编程(解决黏包TCP)
    五. 网络编程(UDP 不黏包)
  • 原文地址:https://www.cnblogs.com/feiruo/p/5256158.html
Copyright © 2011-2022 走看看