数学建模中用到的启发式算法
启发式算法优化模型参数

启发式算法优化模型参数1. 引言在机器学习和数据科学领域,模型参数的优化是一个至关重要的任务。
模型的性能很大程度上取决于参数的选择和调整。
启发式算法是一类基于经验和启发式规则的优化算法,可以用于寻找模型参数的最优解。
本文将介绍启发式算法在优化模型参数方面的应用,并探讨一些常用的启发式算法。
2. 启发式算法概述启发式算法是一种通过模仿自然界中生物进化和群体行为等过程来解决优化问题的算法。
与传统的数学优化方法不同,启发式算法通常不依赖于问题的具体数学模型,而是通过搜索解空间中的候选解来寻找最优解。
启发式算法具有以下特点:•非确定性:启发式算法通常是基于随机搜索的,因此在每次运行时可能得到不同的结果。
•全局搜索能力:启发式算法能够在解空间中进行全局搜索,避免陷入局部最优解。
•可并行性:启发式算法通常可以并行化处理,从而加快搜索过程。
启发式算法包括遗传算法、蚁群算法、粒子群优化算法等。
这些算法可以广泛应用于函数优化、组合优化、参数优化等问题。
3. 启发式算法优化模型参数在机器学习领域,模型参数的优化是一个重要且具有挑战性的任务。
传统的优化方法如梯度下降等在某些情况下可能会陷入局部最优解,而启发式算法可以通过全局搜索来避免这个问题。
启发式算法可以用于优化各种类型的模型参数,包括神经网络、支持向量机、决策树等。
下面将介绍几种常用的启发式算法在模型参数优化中的应用。
3.1 遗传算法遗传算法是一种模拟生物进化过程的启发式算法。
它通过模拟自然界中的遗传、交叉和变异等过程来搜索解空间中的最优解。
在模型参数优化中,遗传算法可以用于搜索最优的参数组合。
遗传算法的基本步骤如下:1.初始化种群:随机生成一组初始解作为种群。
2.评估适应度:计算每个个体的适应度,即模型在当前参数组合下的性能。
3.选择操作:根据适应度选择一部分个体作为父代。
4.交叉操作:对父代个体进行交叉操作,生成新的个体。
5.变异操作:对新个体进行变异操作,引入新的解。
蒙特卡洛启发式算法

蒙特卡洛启发式算法简介蒙特卡洛启发式算法(Monte Carlo Heuristic Algorithm)是一种基于随机模拟的优化算法,用于解决各种复杂问题。
它通过进行大量的随机采样和模拟,以得到问题的近似解。
蒙特卡洛启发式算法在许多领域都有广泛的应用,如计算机科学、统计学、物理学等。
原理蒙特卡洛启发式算法的原理是基于概率统计和随机采样。
它通过生成大量的随机样本,并对这些样本进行模拟运行,以得到问题的近似解。
这些样本通常是根据某种概率分布生成的,并且可以根据具体问题进行调整。
蒙特卡洛启发式算法通常包含以下步骤:1.建立模型:首先需要将问题转化为一个数学模型。
这个模型可以是一个数学函数、一个概率分布或者一个状态转移矩阵。
2.生成样本:根据建立的模型,生成大量的随机样本。
这些样本可以是从某个概率分布中抽取得到的,也可以是根据某种规则生成的。
3.模拟运行:对于每个生成的样本,进行模拟运行。
根据具体问题,可以进行一系列的计算、判断和决策,以得到问题的近似解。
4.统计结果:统计模拟运行得到的结果。
可以计算平均值、方差、置信区间等统计指标,以评估问题的解。
5.优化调整:根据统计结果,对模型进行优化调整。
可以调整概率分布的参数、改变模型结构或者调整采样策略等。
6.迭代循环:重复以上步骤,直到达到预定的停止条件。
通常情况下,蒙特卡洛启发式算法需要进行多次迭代才能得到较好的解。
应用领域蒙特卡洛启发式算法具有广泛的应用领域,以下是一些常见领域的应用示例:1. 计算机科学蒙特卡洛启发式算法在计算机科学领域有着广泛的应用。
例如,在人工智能中,可以使用蒙特卡洛树搜索(Monte Carlo Tree Search)来改进搜索算法,在图像处理中,可以使用蒙特卡洛积分(Monte Carlo Integration)来估计图像的属性。
2. 统计学蒙特卡洛启发式算法在统计学中具有重要的地位。
例如,在统计推断中,可以使用蒙特卡洛马尔可夫链(Markov Chain Monte Carlo)方法来进行参数估计和模型选择。
启发式算法优化模型参数

启发式算法优化模型参数启发式算法是一种通过利用启发性信息来指导过程以优化问题解的方法。
在机器学习中,优化模型参数是一个重要的任务。
启发式算法可以用来优化模型参数,以获得更好的性能和更高的准确度。
本文将介绍三种常用的启发式算法:遗传算法、模拟退火算法和蚁群算法,并讨论如何使用它们来优化模型参数。
遗传算法是一种模拟自然选择和遗传机制的启发式算法。
它通过模拟进化的过程来最优解。
遗传算法的基本思想是通过交叉和变异操作产生新的解,并通过适应度函数评估每个解的优劣程度。
适应度较高的解被选择为父代,并被用于生成下一代。
这个过程不断重复,直到找到了满足停止条件的最优解。
在模型参数优化中,可以用遗传算法来找到最优的参数组合。
首先,需要定义适应度函数来评估每个参数组合的性能。
适应度函数可以是模型在训练集上的准确度、F值或其他性能指标。
然后,随机生成一组初始解作为种群,并计算每个解的适应度。
接下来,通过选择、交叉和变异等操作来生成新的解,并计算它们的适应度。
重复执行这个过程直到满足停止条件,即找到了适应度足够高的最优解。
模拟退火算法是一种通过模拟固体在退火过程中的行为来优化问题解的启发式算法。
模拟退火算法的基本思想是从一个高温状态开始,逐渐降低温度,以使系统达到较低能量状态。
在过程中,接受一些较差的解,以避免陷入局部最优解。
这样可以更好地探索空间,并增加发现全局最优解的概率。
在模型参数优化中,可以将模型的性能看作能量,参数设置看作系统状态。
通过设置合适的能量函数和温度规划策略,可以使用模拟退火算法来最优的参数组合。
初始解可以通过随机生成或使用一组基于经验的初始解。
然后,通过接受一些较差的解和温度控制来更广阔的空间。
最终,通过降低温度来达到较低能量状态,即找到最优的参数组合。
蚁群算法是一种模拟蚂蚁在寻找食物过程中的行为来优化问题解的启发式算法。
蚁群算法的基本思想是通过模拟蚂蚁找到最短路径的行为来最优解。
在过程中,蚂蚁们会选择最短路径上的相邻节点,并释放信息素。
启发式算法优化模型参数

启发式算法优化模型参数在机器学习和模型优化领域,启发式算法被广泛应用于模型参数的自动调优过程中,以提高模型性能和泛化能力。
下面我们将介绍几种常用的启发式算法,并探讨其在模型参数优化中的应用。
1. 遗传算法(Genetic Algorithm)遗传算法是一种模拟自然选择和遗传机制的优化算法,其核心思想是通过模拟生物进化的过程,不断迭代和变异种群中的个体,以最优解。
在模型参数优化中,遗传算法可以通过编码、交叉和变异等操作,调整参数空间中的个体,找到最优的参数组合。
2. 粒子群算法(Particle Swarm Optimization)粒子群算法是一种模拟鸟群或鱼群行为的优化算法,其基本原理是将待优化问题视为一个群体,通过不断调整个体的位置和速度,最终使整个群体收敛到最优解。
在模型参数优化中,粒子群算法可以全局参数空间,并在局部优化参数值,以找到最优的模型参数。
3. 模拟退火算法(Simulated Annealing)模拟退火算法是一种模拟金属淬火过程的优化算法,其思想是通过温度逐渐降低的方式,逐步将系统状态从高能到低能的状态,从而找到最优解。
在模型参数优化中,模拟退火算法可以在全局和局部之间平衡,避免陷入局部最优解,找到更优的参数组合。
4. 蚁群算法(Ant Colony Optimization)蚁群算法是一种模拟蚂蚁食物路径的优化算法,其核心思想是通过蚁群中个体之间的信息交流,最终找到最优路径。
在模型参数优化中,蚁群算法可以通过模拟蚁群过程,不断调整参数值,找到最优的模型参数组合。
以上介绍的启发式算法在模型参数优化中都有着广泛的应用,通过不同的策略和算法框架,可以在不同的问题中找到最优的参数组合。
在实际应用中,研究人员可以根据具体问题特点和需求,选择合适的启发式算法,优化模型参数,提升模型性能和泛化能力。
总的来说,启发式算法是一种有效的模型参数优化方法,可以通过全局和局部的方式,不断调整参数值,最终找到最优的模型参数组合。
数学建模算法大全现代优化算法简介

第二十三章 现代优化算法简介§1 现代优化算法简介现代优化算法是80年代初兴起的启发式算法。
这些算法包括禁忌搜索(tabu search ),模拟退火(simulated annealing ),遗传算法(genetic algorithms ),人工神经网络(neural networks )。
它们主要用于解决大量的实际应用问题。
目前,这些算法在理论和实际应用方面得到了较大的发展。
无论这些算法是怎样产生的,它们有一个共同的目标-求NP-hard 组合优化问题的全局最优解。
虽然有这些目标,但NP-hard 理论限制它们只能以启发式的算法去求解实际问题。
启发式算法包含的算法很多,例如解决复杂优化问题的蚁群算法(Ant Colony Algorithms )。
有些启发式算法是根据实际问题而产生的,如解空间分解、解空间的限制等;另一类算法是集成算法,这些算法是诸多启发式算法的合成。
现代优化算法解决组合优化问题,如TSP (Traveling Salesman Problem )问题,QAP (Quadratic Assignment Problem )问题,JSP (Job-shop Scheduling Problem )问题等效果很好。
本章我们只介绍模拟退火算法,初步介绍一下蚁群算法,其它优化算法可以参看相关的参考资料。
§2 模拟退火算法2.1 算法简介模拟退火算法得益于材料的统计力学的研究成果。
统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。
在高温条件下,粒子的能量较高,可以自由运动和重新排列。
在低温条件下,粒子能量较低。
如果从高温开始,非常缓慢地降温(这个过程被称为退火),粒子就可以在每个温度下达到热平衡。
当系统完全被冷却时,最终形成处于低能状态的晶体。
如果用粒子的能量定义材料的状态,Metropolis 算法用一个简单的数学模型描述了退火过程。
假设材料在状态i 之下的能量为)(i E ,那么材料在温度T 时从状态i 进入状态j 就遵循如下规律:(1)如果)()(i E j E ≤,接受该状态被转换。
常见的随机算法、近似算法和启发式算法的案例

常见的随机算法、近似算法和启发式算法的案例常见的随机算法、近似算法和启发式算法的案例有:
随机算法:
1. 随机洗牌算法:用于打乱一组数据的顺序,常用于实现随机排列或游戏中的洗牌操作。
2. 蒙特卡洛算法:通过随机采样的方法,来估计一个问题的解或某个数值的概率分布,例如蒙特卡洛模拟的方法用于计算圆周率π的值。
近似算法:
1. 近似最近邻算法:快速搜索给定查询点最近邻的点,而不需要对所有数据点进行完全搜索,例如kd树算法。
2. 近似最小覆盖问题的算法:在给定一组区域的情况下,选择尽可能少的区域来覆盖所有点,例如贪心算法。
启发式算法:
1. 蚁群算法:模拟蚂蚁在寻找食物时的行为,通过信息素的释放和感知,来寻找全局最优解,常用于求解旅行商问题。
2. 遗传算法:基于生物进化理论,通过模拟自然选择、基因交叉、变异等操作,来搜索优化问题的解空间,例如用于解决旅行商问题或优化函数的最优解。
数学建模智能算法【精品文档】(完整版)
Part 3——群智能算法群智能算法,也称为启发式算法,起于上个世纪80年代初。
启发式算法近年来在实际应用方面得到了较大的发展,尤其是在大数据下,人们在不断探索研究以获得更有效的应用场景。
这些算法包括:遗传算法、蚁群算法、粒子群算法、模拟退火算法、人工鱼群算法、人工蜂群算法、微分进化算法和免疫算法等,这些算法在理论上也较为完善。
该部分主要介绍几种常用的群智能算法。
第一章遗传算法遗传算法(Genetic Algorithm,GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland 教授于1975年首先提出的。
遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位。
遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程.它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体.这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代.后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程.群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解.值得注意的一点是,现在的遗传算法是受生物进化论学说的启发提出的,这种学说对我们用计算机解决复杂问题很有用,而它本身是否完全正确并不重要(目前生物界对此学说尚有争议).1.1遗传算法中的生物遗传学概念由于遗传算法是由进化论和遗传学机理而产生的直接搜索优化方法;故而在这个算法中要用到各种进化和遗传学的概念.首先给出遗传学概念、遗传算法概念和相应的数学概念三者之间的对应关系.这些概念如下:表1-1. 遗传算法相关概念序号遗传学概念遗传算法概念数学概念1 个体要处理的基本对象、结构也就是可行解2 群体个体的集合被选定的一组可行解3 染色体个体的表现形式可行解的编码4 基因染色体中的元素编码中的元素5 基因位某一基因在染色体中的位置元素在编码中的位置6 适应值个体对于环境的适应程度,或在环境压力下的生存能力可行解所对应的适应函数值7 种群被选定的一组染色体或个体根据入选概率定出的一组可行解8 选择从群体中选择优胜的个体,淘汰劣质个体的操作保留或复制适应值大的可行解,去掉小的可行解9 交叉一组染色体上对应基因段的交换根据交叉原则产生的一组新解10 交叉概率染色体对应基因段交换的概率(可能性大小)闭区间[0,1]上的一个值,一般为0.65~0.9011 变异染色体水平上基因变化编码的某些元素被改变12 变异概率染色体上基因变化的概率(可能性大小)开区间(0,1)内的一个值, 一般为0.001~0.0113进化、适者生存个体进行优胜劣汰的进化,一代又一代地优化目标函数取到最大值,最优的可行解1.2 遗传算法的步骤遗传算法计算优化的操作过程就如同生物学上生物遗传进化的过程,主要有三个基本操作(或称为算子):选择(Selection)、交叉(Crossover)、变异(Mutation).遗传算法基本步骤主要是:先把问题的解表示成“染色体”,在算法中也就是以二进制编码的串,在执行遗传算法之前,给出一群“染色体”,也就是假设的可行解.然后,把这些假设的可行解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉、变异过程产生更适应环境的新一代“染色体”群.经过这样的一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解.下面给出遗传算法的具体步骤,流程图参见图1-1:第一步:选择编码策略,把参数集合(可行解集合)转换染色体结构空间;第二步:定义适应函数,便于计算适应值;第三步:确定遗传策略,包括选择群体大小,选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数;第四步:随机产生初始化群体;第五步:计算群体中的个体或染色体解码后的适应值;第六步:按照遗传策略,运用选择、交叉和变异算子作用于群体,形成下一代群体;第七步:判断群体性能是否满足某一指标、或者是否已完成预定的迭代次数,不满足则返回第五步、或者修改遗传策略再返回第六步。
数学建模csa方法
数学建模csa方法
CSA(Cuckoo Search Algorithm)是一种基于自然界中杜鹃鸟
寄生行为的启发式优化算法,常被应用于数学建模中。
CSA方法通
过模拟杜鹃鸟寄生其他鸟巢的行为,来寻找最优解。
这种算法的基
本思想是利用杜鹃鸟寄生的策略来搜索最优解,其中包括杜鹃鸟寄
生行为和巢的发现。
CSA方法可以用于解决许多数学建模中的优化
问题,如函数优化、参数优化、组合优化等。
CSA方法的优点之一是其简单性,易于实现和理解。
另一个优
点是它对于多种类型的问题都具有很好的适应性,包括连续型和离
散型的优化问题。
此外,CSA方法还具有较好的全局搜索能力和高
收敛速度,能够快速找到接近最优解的解决方案。
然而,CSA方法也存在一些局限性。
例如,它对于高维问题的
优化能力相对较弱,容易陷入局部最优解。
此外,CSA方法的参数
选择对算法的性能影响较大,需要进行仔细的调参才能获得较好的
优化效果。
在数学建模中,研究者们可以根据具体的问题特点和优化需求,选择CSA方法作为优化工具,结合实际问题的特点进行参数调节和
算法改进,以获得更好的优化效果。
同时,也可以将CSA方法与其
他优化算法相结合,形成混合优化算法,以克服各自算法的局限性,更好地解决复杂的数学建模问题。
总之,CSA方法作为一种启发式
优化算法,在数学建模中有着广泛的应用前景,可以为解决实际问
题提供有效的优化方案。
建模方法、启发式算法
预测方法
拟合——回归分析
灰色预测
BP 神经网络
马氏链模型
最优化
线性规划
整数规划
混合整数规划 背包问题
无约束优化
非线性规划
序列无约束最小化法SUMT ——罚函数法
动态规划
构造评价函数
启发式算法
现代优化算法
例6.2 旅行商问题:一个商人欲到n 个城市推销商品, 每两个城市i 和j 之间的距离为ij d , 如何选择一条道路使得商人每个城市走一遍后回到起点且所走路径最短.
决策变量0=ij x 和1=ij x 分别表示行走的路线不包含和包含从城市i 到城市j 路径, 则数学模型为
j
i n j i x n s n s s x n j x
n
i x t s x d ij s j i ij
n i ij n
j ij ij
j
i ij ≠⋅⋅⋅=∈⋅⋅⋅⊂-≤≤-≤⋅⋅⋅==⋅⋅⋅==∑∑∑∑∈==≠,,,2,1,),1,0{},,2,1{,2||2,1||,,2,1,1,,2,1,1..min ,1
1。
启发式算法解
启发式算法是一种基于启发式的优化算法,旨在通过使用一些简单的启发式规则来加速问题的求解过程,而不是通过使用精确的数学方法。
启发式算法通常用于解决复杂的问题,例如旅行商问题(TSP)、背包问题(KP)、图着色问题(GCP)等。
以下是一些常见的启发式算法:
1. 遗传算法(GA):遗传算法是一种模拟生物进化过程的启发式算法,通过选择、交叉和变异等操作来生成新的解,并逐步逼近最优解。
2. 模拟退火算法(SA):模拟退火算法通过模拟金属退火过程来求解优化问题,将每个解视为一个状态,并计算其能量。
算法不断尝试从当前状态转移到相邻状态,并根据能量变化来决定是否接受该状态。
3. 蚁群优化算法(ACO):蚁群优化算法是一种模拟蚂蚁觅食过程的启发式算法,通过模拟蚂蚁的信息素传递过程来求解优化问题。
4. 粒子群优化算法(PSO):粒子群优化算法是一种模拟鸟群、鱼群等生物群体行为过程的启发式算法,通过模拟群体中个体的行为来求解优化问题。
5. 人工神经网络(ANN):人工神经网络是一种模拟人脑神经元网络结构的计算模型,通过训练学习规则来逼近问题的最优解。
以上是一些常见的启发式算法,它们在各自的领域中有着广泛的应用。
需要注意的是,启发式算法虽然可以加速问题的求解过程,但并不能保证得到最优解,因此在使用时应根据具体问题进行选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
启发式搜索"启发"( heuristic)是关于发现和发明规则及方法的研究。
在状态空间搜索中, 启发式被定义成一系列规则, 它从状态空间中选择最有希望到达问题解的路径。
人工智能问题求解者在两种基本情况下运用启发式策略:1.一个问题由于在问题陈述和数据获取方面固有的模糊性可能使它没有一个确定的解。
医疗诊断即是一例。
所给出的一系列症状可能有多个原因; 医生运用启发搜索来选择最有可能的论断并依此产生治疗的计划。
视觉问题又是一例。
看到的景物经常是模糊的, 各个物体在其连接、范围和方向上可以有多个解释。
光所造成的幻觉加大了这些模糊性, 视觉系统可运用启发式策略选择一给定景象的最有可能解释。
2.一个问题可能有确定解, 但是求解过程中的计算机代价令人难以接受。
在很多问题(如国际象棋)中, 状态空间的增长特别快, 可能的状态数随着搜索的深度呈指数级增长、分解。
在这种情况下, 穷尽式搜索策略, 诸如深度优先或广度优先搜索,在一个给定的较实际的时空内很可能得不到最终的解。
启发式策略通过指导搜索向最有希望的方向前进降低了复杂性。
通过仔细考虑, 删除某些状态及其延伸, 启发式算法可以消除组合爆炸, 并得到令人能接受的解。
然而, 和发明创造的所有规则一样, 启发式策略也是极易出错的。
在解决问题过程中启发仅仅是下一步将要采取措施的一个猜想。
它常常根据经验和直觉来判断。
由于启发式搜索只有有限的信息,诸如当前Open表中状态的描述,要想预测进一步搜索过程中状态空间的具体的行为很难办到。
一个启发式搜索可能得到一个次最佳解, 也可能一无所获。
这是启发式搜索固有的局限性。
这种局限性不可能由所谓更好的启发式策略或更有效的搜索算法来消除。
启发式策略及算法设计一直是人工智能的核心问题。
博奕和定理证明是两个最古老的应用: 二者都需要启发式知识来剪枝以减少状态空间。
显然, 检查数学领域中每一步推理或棋盘上每一步可能的移动是不可行的。
启发式搜索常常仅是实践中的解答。
近来, 专家系统的研究把启发式策略作为问题求解的一个重要部分。
当一个专家解决问题时, 他检查所获取的信息并作出决定。
实际上, 专家用来解决问题的"拇指法则"很大程度上是启发式的。
这些启发性知识被专家系统的设计者提取出来并形成规则。
通常启发式算法由两部分组成: 启发方法和使用该方法搜索状态空间的算法。
本章先介绍最好优先搜索的算法, 再讨论启发式算法的设计和评估。
在一字棋游戏中(图4.5), 穷尽搜索的组合数很大。
第一步移动共有九种移法 , 每一种又有八种对应走法……依次类推, 这个问题在穷尽搜索策略下需考虑9!个状态。
根据对称性可以减少搜索空间的数目。
棋盘上很多构造是等价的。
譬如, 第一步实际上只有三种移法, 角、边的中央以及网络正中。
在状态空间的第二层上, 由对称性可进一步减少到12×7!种。
在图5.1 中可见到该状态空间比最初的状态空间要小, 但它在扩展过程中还要继续分解。
然而, 一个简单的启发式策略几乎可以整个地消除复杂的搜索过程。
首先, 将棋子移到棋盘上×有最多的赢线的点。
最初的三种状态显示在图5.2中。
若两种状态有相等的赢的机率, 取其中的第一个。
这样的话,可设计一种算法(完全实现启发式搜索), 它选择并移到具有最高启发值的状态。
在这种情况下, ×占椐网络的中间点, 其它的各种状态都不再考虑, 它们的延伸状态同时也给消除了。
如图5.3 所示三分之二的状态空间就这样给剪枝了。
第一步走完后, 对方只能有两种走法(见图5.3)。
无论选择哪种走法,我方均可以通过启发式搜索选择下一步可能的走法。
在搜索过程中, 每一步只需估价一下单个节点的子结点; 不需要强力搜索。
图5.3 显示了游戏前三步简化了的搜索过程。
每种状态都标记了它的启发值。
要精确地计算待检查的状态的数目比较难, 但可以大致计算它的上限。
一盘棋最多走九步, 每步的下一步平均有四、五种走法。
这样大约就是4.5×9, 近40种状态, 比9!改善了很多。
5.1 启发信息和估计函数人工智能的核心课题是问题求解。
所谓"问题求解"就是在广义图中寻找一条从初始状态出发, 到达目标状态的解树。
例如旅行问题是解决从出发点到达目的地的路线和工具问题; 机器人装配机器, 就是给出把一堆零件变成一台机器的一系列操作; 定理证明就是寻找一条从前提条件到达结论的通路等等。
在实际解决一个具体问题时, 人们常常把一个具有复杂联系的实际问题抽象化,保留某些主要因素, 忽略掉大量次要因素, 从而将这个实际问题转化成具有明确结构的有限状态空间问题, 这个空间中的状态和变化规律都是已知的有限集合, 因此可以找到一个求解该问题的算法。
然而, 在智能活动中使用最多的不是具有完备性的算法, 而是不一定完备的启发式方法。
其原因有二:首先, 大多数情况下, 智能系统不知道与实际问题有关的全部信息, 因而无法知道该问题的全部状态空间, 不可能用一套算法来求解其中的所有问题, 这样就只能依靠部分状态空间和一些特殊的经验性规则来求解其中的部分问题。
其次, 有些问题在理论上存在求解算法, 但是在工程实践中, 这些算法不是效率太低, 就是根本无法实现, 为了提高解题的效率, 不得不放弃使用这些算法, 而求助于一些经验性的启发式规则。
例如在博弈问题中, 计算机为了保证最后胜利, 可以将所有可能的走法都试一遍, 然后选择最佳走步。
这样的算法是可以找到的, 但计算所需的时空代价十分惊人。
就可能有的棋局数讲, 一字棋是9!=3.6×105, 西洋跳棋是1078, 国际象棋是10120, 围棋是10761。
假设每步可能选择一种棋局, 用极限并行速度(10-104年/步)计算, 国际象棋的算法也得1016年即1亿亿年才可以算完, 而我们已知的宇宙史才 100亿年!由此看来, 启发式的问题求解, 不仅在实践上是需要的, 而且在理论上也是必不可少的。
对问题空间进行搜索时, 提高搜索效率需要有和被解问题的解有关的大量控制性知识作为搜索的辅助性策略。
有两种极端的情况: 一种是没有任何这种控制性知识作为搜索的依据, 因而搜索的每一步完全是随意的, 如随机搜索; 另一种是有充分控制性知识作为依据, 因而搜索的每步选择都是正确的, 这种搜索叫最佳搜索。
一般情况是介于二者之间, 这些控制性信息反映在估价函数之中。
估价函数的任务就是估计待搜索结点的重要程度, 给它们排定次序。
估价函数f(x)可以是任意一种函数, 如有的定义它是结点x处于最佳路径上的概率, 或是x结点和目标结点之间的距离, 或是x格局的得分等等。
一般来说, 估价一个结点的价值, 必须综合考虑两方面的因素: 已经付出的代价和将要付出的代价。
在此, 我们把估价函数f(n)定义为从初始结点经过n 结点到达目标结点的最小代价路径的代价估计值, 它的一般形式是: f(n)=g(n)+h(n) 其中g(n)是从初始结点到n的实际代价, h(n)是从n到目标结点的最佳路径的估计代价, 主要是h(n)体现了搜索的启发信息。
因为实际代价g(n)可以根据生成的搜索树实际计算出来, 而估计代价h(n)却依赖于某种经验估计, 它来源于我们对问题的解的某些特性的认识, 这些特性可以帮助我们更快地找到问题的解。
一般地, 在f(n)中, g(n)的比重越大, 越倾向于广度优先搜索方式; h(n)的比重越大, 越倾向于深度优先搜索方式。
g(n)的作用一般是不可忽略的, 因为它代表了从初始结点经过n 到达目标结点的总代价估值中实际已付出的那一部分。
保持g(n)项就保持了搜索的广度优先趋势, 这有利于搜索的完备性, 但影响搜索的效率。
在特殊情况下, 如果只希望找到达到目标结点的路径而不关心已付出的代价, 则g(n)的作用可以忽略。
另外, h(n)> >g(n)时, 也可以忽略g(n), 这时有f(n)=h(n), 这有利于搜索的效率, 但影响搜索的完备性。
给定一个问题后, 根据问题的特性和解的特性, 可以有多种方法定义估价函数, 用不同的估价函数指导搜索, 其效果可以相差很远。
因此,必须尽可能选择最能体现问题特性的, 最佳的估价函数。
5.2 启发式搜索算法5.2.1 局部择优搜索法(瞎子爬山法)实现启发式搜索最简单的方法是瞎子爬山法(hill climbing)。
瞎子爬山法在搜索过程中扩展当前结点并估价它的子结点。
最优的子结点被选择并进一步扩展; 该子结点的兄弟结点和父结点都不再保留。
当搜索达到一种状态, 该状态比它的所有子结点都要好, 则搜索停止。
瞎子爬山法可以这样理解──一个盲人急切地想登上山顶, 他总是沿着最陡的山路向上爬, 直到再不能找到新的路径。
瞎子爬山法有这样一个缺陷: 一个错误的启发知识可能导致搜索无法沿着正确的路径前进, 从而增加了搜索的深度, 甚至是无穷尽地搜索。
由于瞎子爬山法不保存所走过的结点信息, 故瞎子爬山算法无法修正错误的路径。
瞎子爬山法还可能在一个局部的最佳点上停止。
当搜索到一个结点, 它的估计代价比任一个子结点都要小, 则算法结束。
如果此时并不是目标状态, 而只是一个局部最优结点, 则该算法就不能得到目标解。
因此, 在一个限定的环境下, 瞎子爬山法可能会极大地提高搜索效率, 但是对于整个搜索空间, 就有可能无法得到最佳解。
重排九宫游戏就是一个突出的例子。
为了将一个特定的格局移到它的目标位置上, 常常需要移动已经在其目标位置上的将牌。
这对于完成拼图是必要的, 但它显然暂时恶化了拼板上的状态。
由于"更好"并不是"最好", 瞎子爬山法无法区别局部和全局最优解。
处理这个问题时有许多种方法, 譬如随时地修正估价函数来突破局部最优的限制。
但是总的来说, 没有一种方法能保证瞎子爬山法的最佳效率。
下面介绍一个瞎子爬山法的例子──跳棋程序。
在人工智能中, Samuel的跳棋程序最早应用该方法。
在跳棋程序中, 不仅运用了启发式搜索, 还实现了简单的学习功能。
跳棋程序中根据几个不同启发值的总和来估算棋局的状态: ∑aixii其中xi是棋局的一系列特征, 如残局优势、残局棋子力量分布, 中心点位置的控制等。
这些xi的系数由它在整个估值中所处的重要性来确定。
也就是说, 如果残局优势比控制中心点重要, 则残局优势的系数要大。
该程序将搜索空间扩展到一定局数并根据多项式估值函数估算该局中所有状态值。
根据5.4.2节介绍的极大极小法, 程序可倒推出图中所有状态的估值。
游戏者根据结点的最佳状态走棋; 对手走棋后, 根据新的棋局状态, 整个过程将再来一遍。
若多项式估值函数导向一系列不能取胜的移动, 程序将调整其系数以提高能力。