当前位置:   article > 正文

python编程人工智能小例子,python人工智能有趣例子_python编程ai

python编程ai

大家好,小编为大家解答python编程人工智能小例子的问题。很多人还不知道python人工智能有趣例子,现在让我们一起来看看吧!

人工智能实验博弈树搜索
博弈树搜索
目录
人工智能实验博弈树搜索 1
博弈树搜索 1

  1. 算法原理 1
    1.1 博弈树 1
    1.2 Alpha-beta剪枝 2
    1.2.1 Max节点的剪枝 2
    12.2 Min节点的剪枝 2
  2. 流程图和伪代码 3
    2.1 Minimax搜索的实现 3
    2.2 分数标准(评价函数的设计) 5
    2.2.1 第一标准:下一步获胜 5
    2.2.2 第二标准:防止敌方下一步获胜 6
    2.2.3 第三标准:下一步造出必胜棋 6
    2.2.4 第四标准:破坏对方造必胜棋的条件 6
    2.2.5 第五标准:连棋和堵棋 6
    2.2.6 第六标准:其他 7
  3. 代码展示 7
  4. 实验结果及分析 14
    1.1 博弈树
    博弈树针对的是二人零和博弈的问题,二人轮流行动,行动时令自己的优势最大。二人零和博弈有如下特点:
    确定性:二人的行动有多种选择,但最终的行动是确定的
    信息完备性:博弈双方知道当前局势(即空间状态)的全部信息
    零和性:一方的损失等于另一方的收益,二者得分相加恒为零
    由以上特点,我们可以构造博弈树python自动化运维系统。因为信息完备性和确定性,可以用博弈树的每个节点表示一个确定的状态,在动作后得到的新状态作为子节点。对于每个状态都有同一个评价函数来评估双方的得分。因为零和性,一方通过决策使得自身的评价函数尽可能的大,另一方让队手的评价函数尽可能的小。因为二者是轮流行动的,在树的每一层让一方的评价函数取最大和最小交替进行。
    由上述的特性,博弈树的搜索过程又被称为minimax搜索。博弈双方行动逐层交替,将评价函数值看做一方的分数,在那一方行动时要让分数尽可能的大,这样的节点被称为Max节点;在另一方行动时要让分数尽可能的小,这样的节点被称为Min节点。
    要让一方的下一步采取最优的策略,需要进行树的搜索。在实际问题中,树往往非常大,因此只考虑一定的深度,而不是整个遍历。进行深入搜索时,轮流考虑Max节点和Min节点,每次都采取最优策略,最终得到本步的最优策略。
    1.2 Alpha-beta剪枝
    通过Alpha-beta剪枝可以对minimax搜索进行剪枝。在博弈树的每个节点保存两个值: α \alpha α表示在该节点能达到的分数的下界,初始化为 − ∞ -\infin −∞, β \beta β表示该节点能达到的分数的上界,初始化为 ∞ \infin ∞。
    Min节点和Max节点的生成和剪枝可以用同一个函数通过递归实现。
  1. input:type, state, depth, last_a, last_b
  2. /* 输入:节点类型、 当前状态、深度(越大则越浅)、父节点的α和β值 */
  3. output: act, a, b
  4. /* 输出:当前节点取到极值的动作、当前节点的α和β值 */
  5. def NodeSummon(type, state, depth, last_a, last_b):
  6. /* 生成叶子节点则直接打分 */
  7. if depth == 0 then return Null, getScore(state),getScore(state)
  8. /* 依据节点类型初始化α和β值 */
  9. a = -infin
  10. b = infin
  11. if type == Max then b = last_b
  12. else a = last_a
  13. /* 遍历每个可行的动作 */
  14. for eachAct that possible
  15. newState = changeState(state, eachAct) /* 依据动作改变当前状态 */
  16. _, next_a, next_b = NodeSummon(type, chesses, depth-1, a, b) /* 递归生成子节点 */
  17. /* 依据节点类型更新α或β值,保存取极值的状态 */
  18. if type == Max && a<next_a then
  19. act = eachAct
  20. a = next_a
  21. if type == Min && b>next_b then
  22. act = eachAct
  23. b = next_b
  24. /* 剪枝判断 */
  25. if a>b then return act, a, b
  26. end
  27. return act, a, b

需要注意的是,根节点没有父节点,故父节点的α和β值分别设置为负无穷和正无穷。叶子节点不需要向下拓展,而是直接进行打分。打分同时作为该叶子节点的 α \alpha α和 β \beta β值即可将叶子节点也视作中间节点,方便统一处理。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章知识点与官方知识档案匹配,可进一步学习相关知识
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/474087
推荐阅读
相关标签
  

闽ICP备14008679号