人工智能导论 第二章 搜索技术

本文介绍了搜索技术在人工智能中的应用,包括基本概念如搜索方向、盲目搜索与启发式搜索,以及状态和操作。详细探讨了状态空间的搜索策略,如广度优先和深度优先搜索,还阐述了启发式图搜索,如A*算法,并涉及对抗搜索中的MiniMax和Alpha-Beta剪枝。最后提到了蒙特卡洛树搜索在决策问题中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1 搜索的基本概念

搜索:一种求解问题的一般方法

问题求解的基本方法:搜索法、归约法、归结法、推理法及产生式

基本问题:

1、是否一定能找到一个解

2、找到的是否是最佳解

3、时间和空间复杂度

4、是否会终止运行or死循环

主要过程:

1、从初始或目的状态出发,并将其作为当前状态

2、扫描操作算子集,将适用当前状态的一些操作算子作用于当前状态而得到新的状态,并建立指向父节点的指针

3、检查所生成的新状态是否满足结束状态。若满足,反向得出解答路径;否则将新状态定义为当前状态返回2

概念术语

搜索方向

(1)数据驱动:初始状态出发正向搜索

(2)目的驱动:从目的状态出发逆向搜索

(3)双向搜索 找到汇合点

盲目搜索与启发式搜索

(1)盲目搜索:不针对特定问题任何有关信息,按照固定步骤搜索

(2)启发式搜索:考虑特定问题可应用的知识,动态确定算子,优先选择合适算子,减少步骤

状态

表示系统状态、事实等叙述性知识的一组变量或数组

操作

表示引起状态变化的过程型知识的一组关系或函数

2.2 状态空间的搜索策略

状态空间:利用状态变量和操作符号,标识系统或问题的有关知识的符号体系,三元组(S、F、G)

S:状态集合 F:操作算子的集合 G:目的状态集合

求解路径

从S0到G结点的路径,状态空间的一个解是一个有限的操作算子序列

 表示方法:图描述

八数码问题的图描述

TSP问题的图描述 

2.3 盲目搜索

回溯策略

从初始状态出发不停试探路径,直到到达目的或“不可解节点”。若遇到不可解节点就回溯到路径中最近的父节点上,查看该节点是否还有其他子节点未被扩展。

算法:

1、PS表:保存当前搜索路径上的状态,如果找到目的,PS就是解路径上的状态有序集

2、NPS表:新的路径状态表,包含等待搜索的状态,后裔状态还未被搜索到

3、NSS表:不可解状态集,列出找不到接替路径的状态。如果在搜索中扩展出他的元素,可立即排除

图搜索算法(DFS BFS 最好优先搜索)的回溯思想

(1)用NPS使算法可以回归到任意状态

(2)用NSS避免算法重新搜索无解路经

(3)PS表中记录当前搜索路径状态,满足目的时可以将其作为结果返回

(4)为避免死循

### 关于《人工智能导论》王万良版第六章习题答案 对于《人工智能导论》王万良版本中的第六章——智能计算及其应用,特别是关于遗传算法的内容,在该章节中探讨了遗传算法的基础理论和发展历程。然而,针对具体的习题解答并未直接提供详细的解法[^1]。 为了帮助理解这一部分内容,可以考虑以下几个方面: - **概念回顾**:确保对遗传算法的基本概念有清晰的理解,包括其起源、基本操作(选择、交叉、变异)、以及适用场景。 - **案例分析**:通过实际例子加深对遗传算法工作流程的认识。例如,可以通过编写简单的Python程序来模拟遗传算法的过程,从而更好地掌握这些知识点。 ```python import random def genetic_algorithm(population, fitness_function, mutation_rate=0.01, generations=100): best_solution = None for generation in range(generations): new_population = [] # Fitness evaluation and selection process population_with_fitness = [(individual, fitness_function(individual)) for individual in population] sorted_population = sorted(population_with_fitness, key=lambda x: x[1], reverse=True) if not best_solution or sorted_population[0][1] > fitness_function(best_solution): best_solution = sorted_population[0][0] selected_individuals = [pair[0] for pair in sorted_population[:len(sorted_population)//2]] while len(new_population) < len(population): parent1, parent2 = random.sample(selected_individuals, 2) child = crossover(parent1, parent2) if random.random() < mutation_rate: mutate(child) new_population.append(child) population = new_population return best_solution def crossover(parent1, parent2): ... def mutate(individual): ... # Example usage of the function with a simple binary string representation as individuals. population_size = 100 initial_population = [''.join(random.choice('01') for _ in range(8)) for _ in range(population_size)] fitness_func = lambda indv: sum(int(bit) for bit in indv) # A very simplistic fitness function. best_indv = genetic_algorithm(initial_population, fitness_func) print(f'Best solution found is {best_indv} with fitness score {fitness_func(best_indv)}.') ``` 此代码片段展示了如何创建一个基础的遗传算法框架,并应用于二进制字符串个体上求解最大适应度问题。这有助于读者更直观地了解遗传算法的工作机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值