鱼C论坛

 找回密码
 立即注册
查看: 2397|回复: 1

[技术交流] 博弈树的搜索算法(二)

[复制链接]
发表于 2022-4-24 09:59:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Stubborn 于 2022-4-24 10:10 编辑

AlphaBeta剪枝算法




AlphaBeta剪枝算法是对MaxMin算法方法的优化,它们产生的结果是完全相同的,它们的思想也是一样的,但是AlphaBeta剪枝算法多了一个核心思想:如果你已经有一个不太坏的选择了,那么当你要作别的选择,并知道它不会更好时,你没有必要确切地知道它有多坏。只要你能证明它不比最好的选择更好,你就可以完全抛弃它。


如果你不能理解上面的话,那么尝试理解下面的小游戏:

你的死敌面前有两个口袋,他和你打赌赌输了,因此他必须从中给你一样东西,而挑选规则却非常奇怪:

  • 两个口袋里都有几件物品,你能取其中的一件
  • 你来挑这件物品所在的口袋,而他来挑这个口袋里的物品。
  • 你一次只能找一只口袋,在找口袋时一次只能从里面摸出一样东西。


很明显,你选中一个口袋,你的死敌势必会从口袋挑最差的给你。当你挑选完成其中一个口袋,你发现,这个口袋价值最差的物品是20元现金,那么你现在已经有了一个不太坏的选择。当你再去翻找另外一个口袋,突然发现这个口袋里面有一条臭鱼,你觉得这个臭鱼比20元现金价值要差,那么你还会浪费时间继续翻找这个口袋里面的剩下物品吗?

Python代码
def AlphaBetaAlgorithm(int: depth, flag,  MaxValue, MinValue):
    #  定义递归出口,到达既定深度,或者是游戏结束状态,返回当前游戏状态的评分
    if (depth || GameOver):
        return EvaluationFunction(Gs)

    # 测试所有合法的着点
    for Move in GeneratorMoves:
        # 执行着点
        MakeNextMove()
        # 交换身份,继续,
        score = AlphaBetaAlgorithm(depth-1, falg, alpha, beta)
        # 撤销着点
        UnMakeNextMove()
        # 如果当前是Max走步落子
        if flag is Max:
            MaxValue = max(score, MaxValue)
            # 在口袋挑物品,发现臭鱼,这个口袋不再搜索。
            if MaxValue >= MinValue:
                return MinValue
        else:
            MinValue = min(socre, MinValue)

    if flag is Max:
        return MaxValue
    else:
        return MinValue

评分

参与人数 1鱼币 +5 收起 理由
python爱好者. + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-2 10:09:32 | 显示全部楼层
无条件支持楼主ing......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 10:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表