人工智能-搜索问题

Posted by Shenpotato on October 28, 2019

利用人工智能解决的一个重要问题就是搜索问题,此文陈述了如何将搜索问题进行合理化定义分析和搜索策略。

一、搜索问题

1、常见的搜索问题案例

(1)传道士和恶魔问题

(2)8问题

2、问题定义

通常而言,一个搜索问题要包含以下条件:

  • 初始状态
  • 一系列的行为,将状态转换为下一个状态
  • 目标状态
  • 行为损失函数

换而言之,搜索问题实际上就是行为引导的状态转换的问题,我们需要寻找的是状态转换的路径/整个状态转换的过程中的最小花费。

二、搜索策略

1、深度优先

2、广度优先

3、启发式搜索

A* search

https://blog.csdn.net/tjssehaige/article/details/8515755

极大极小搜索是一种基于当前状态推测出对于我方最有利,对对方最不利的行动。

(1)算法思想

首先假设存在博弈双方,自身为max,对方为min。在一个决策树中对节点进行评估。

  • 展开一个决策树,奇数层为max层,偶数层为min层。
  • 对每一个终端(叶子)节点计算效用值
  • 选取一个还未进行评估并且其子节点全被评估过的节点。如果没有这样的节点,评估结束。
  • 如果选择的节点在min层,则选取其子节点的最小值作为自己的值;如果选择的节点在max层,则选取其子节点的最大值作为自己的值。返回第三步。

以上图为例:

  • I = 0,J =7
  • F = 5,G = 8
  • B = 3, C = 4

所以最终A能得到最好的结果是4。

(2)改良

在决策树的深度很深的时候,决策的时间通常会特别的长。针对这个问题,需要对两个方面进行优化:

  • 部分树搜索:对不需要搜索的部分进行剪枝
  • 评估函数用启发评估函数代替效用函数
A、启发式评估函数

函数需要满足:

  • 快速的函数计算时间

  • 计算效果与效用函数一致

  • 函数真正反映获胜的可能

在大多数情况下,使用线性模型来表示启发式评估函数:

​ f(x) = w1x1+w2x2+… + wnxn

其中x是决策的特征,w是该特征的权重。这些可以通过对先验知识进行学习获得

B、alpha-beta剪枝算法:

alpha-beta是一种剪枝生成partial search tree的算法,通过不计算某些子枝来增快计算速度。根据计算的顺序不同,分为left-to-right-alpha-beta和right-to-left-alpha-beta。

https://www.7forz.com/3211/

以从左向右为例:

  • 赋予顶层节点初始alpha = - ∞ , beta = + ∞