最优解算法的讨论

不懂优化的人希望能有通用的方法来解决他手头的问题。但不幸的事没有这样的方法存在。高速的方法都须要某些条件,比方常见的有强凸。线性,可分解啥的。眼下研究的比較成熟的就是强凸光源可分解

非凸没有特别有效的方法来解。假设是强凸的,何必用那么复杂的方法求最优解?正是由于不是强凸的,才用到优化方法。就算是凸的。也分好几种不同的情况。仅仅用一阶梯度,达到牛顿梯度法的收敛速度。在convex问题中,还有non-smooth的函数,也是不好解的。

算法论中的动态规划。贪心算法等等是主要的理论。实际中採用的往往须要和计算方法相结合。以下几种是能够通过工具直接实现的最优解算法.

爬山算法:爬山算法是一种简单的贪心搜索算法。是对深度优先搜索的一种改进。利用反馈信息帮助生成解的决策,属于人工智能算法的一种。

採用启示式方法,局部择优,每次从当前解的临近解空间中选择一个最优解,替换为当前解。直到达到一个局部最优解。

缺点:由于不是全面搜索,所以结果可能不是最佳。

  

爬山算法一般存在下面问题:  

1)、局部最大:某个节点比周围不论什么一个邻居都高。可是它却不是整个问题的最高点。

  

2)、高地:也称为平顶。搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率减少。

  

3)、山脊:搜索可能会在山脊的两面来回震荡,前进步伐非常小。

算法过程:从当前的节点開始。和周围的邻居节点的值进行比較。 假设当前节点是最大的,那么返回当前节点,作为最大值(既山峰最高点)。反之就用最高的邻居节点来,替换当前节点,从而实现向山峰的高处攀爬的目的。

如此循环直到达到最高点。

长处:避免遍历,通过启示选择部分节点,从而达到提高效率的目的。

 

爬山算法实现非常easy,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。如图1所看到的:如果C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,由于在A点不管向那个方向小幅度移动都不能得到更优的解。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9uZ3NoZW5sbWo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

模拟退火算法:

模拟退火事实上也是一种贪心算法。可是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解。因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后。会以一定的概率接受到E的移动。或许经过几次这种不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。

模拟退火算法描写叙述:

若J( Y(i+1) )>= J(Y(i) )  (即移动后得到更优解)。则总是接受该移动

若J( Y(i+1) )< J(Y(i) )  (即移动后的解比当前解要差),则以一定的概率接受移动,并且这个概率随着时间推移逐渐减少(逐渐减少才干趋向稳定)

这里的“一定的概率”的计算參考了金属冶炼的退火过程。这也是模拟退火算法名称的由来。

  依据热力学的原理。在温度为T时,出现能量差为dE的降温的概率为P(dE),表示为:

    P(dE) =exp( dE/(kT) )

  当中k是一个常数,exp表示自然指数,且dE<0。

这条公式说白了就是:温度越高,出现一次能量差为dE的降温的概率就越大。温度越低。则出现降温的概率就越小。又因为dE总是小于0(否则就不叫退火了),因此dE/kT < 0 ,所以P(dE)的函数取值范围是(0,1) 。

  随着温度T的减少,P(dE)会逐渐减少。

  我们将一次向较差解的移动看做一次温度跳变过程,我们以概率P(dE)来接受这种移动。

  关于爬山算法与模拟退火。有一个有趣的比喻:

  爬山算法:兔子朝着比方今高的地方跳去。它找到了不远处的最高山峰。可是这座山不一定是珠穆朗玛峰。

这就是爬山算法,它不能保证局部最优值就是全局最优值。

  模拟退火:兔子喝醉了。

它随机地跳了非常长时间。这期间。它可能走向高处。也可能踏入平地。可是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。

遗传算法 ( GA , Genetic Algorithm )

也称进化算法。遗传算法是受达尔文的进化论的启示,借鉴生物进化过程而提出的一种启示式搜索算法。

因此在介绍遗传算法前有必要简单的介绍生物进化知识。

算法思想

 借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程。通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解。添加适应度函数值高的解。这样进化N代后就非常有可能会进化出适应度函数值非常高的个体。

 举个样例。使用遗传算法解决“0-1背包问题”的思路:0-1背包的解能够编码为一串0-1字符串(0:不取,1:取);首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后。随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,并且较优的解被选中的概率要比較高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。

 编码:须要将问题的解编码成字符串的形式才干使用遗传算法。最简单的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式。比如。问题的解是整数,那么能够将其编码成二进制位数组的形式。将0-1字符串作为0-1背包问题的解就属于二进制编码。

  遗传算法有3个最主要的操作:选择,交叉。变异。(三个操作的详细方法參见相关论文)

基本遗传算法优化

  以下的方法可优化遗传算法的性能。

 精英主义(Elitist Strategy)选择:是基本遗传算法的一种优化。

为了防止进化过程中产生的最优解被交叉和变异所破坏,能够将每一代中的最优解原封不动的拷贝到下一代中。

 插入操作:可在3个基本操作的基础上添加一个插入操作。插入操作将染色体中的某个随机的片段移位到还有一个随机的位置。

蚁群算法:

蚁群算法(ant colony optimization, ACO),又称蚂蚁算法。一种用来在图中寻找优化路径的机率型算法。Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有很多优良的性质.针对PID控制器參数优化设计问题,将蚁群算法设计的结果与遗传算法设计的结果进行了比較,数值仿真结果表明,蚁群算法具有一种新的模拟进化优化方法的有效性和应用价值。

人工萤火虫算法:

Nesterov method:

时间: 2024-10-13 10:31:26

最优解算法的讨论的相关文章

关于APIT定位算法的讨论

关于APIT定位算法的讨论 [摘要]   无线传感器网络节点定位机制的研究中,基于距离无关的定位技术得到快速发展,其中基于重叠区域的APIT定位技术在实际环境中的定位精度高,被广泛研究和应用. [关键词] 无线传感器网络:定位算法:APIT: [正文] 在传感网络中的许多应用中,用户一般都会关心一个重要问题,即特定时间发生的具体位置或区域.例如,目标跟踪,入侵检测,环境监控等,若不知道传感器自身的位置,感知的数据是没有意义的.因此,传感器网络及诶单必须知道自身所在的位置,才能够有效地说明被检测物

最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind

最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小支撑树(minimum spanning tree)算法.给定一个无向图G,并且它的每条边均权值,则MST是一个包括G的所有顶点及边的子集的图,这个子集保证图是连通的,并且子集中所有边的权值之和为所有子集中最小的. 本节中介绍三种算法求解图的最小生成树:Prim算法.Kruskal算法和Boruvk

算法设计与分析 - 李春葆 - 第二版 - pdf-&gt;word v3

1 1.1 第1章─概论 2 3 1.1.1 练习题 4 1. 下列关于算法的说法中正确的有( ). 5 Ⅰ.求解某一类问题的算法是唯一的 6 Ⅱ.算法必须在有限步操作之后停止 7 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 8 Ⅳ.算法执行后一定产生确定的结果 9 A. 1个 B.2个 C.3个 D.4个 10 2. T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是( ). 11 A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2 12 C.T(n)

A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)

在Unity3d中,我们一般常用的寻路算法: 1.A*算法插件 与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解.A*是静态网格中求解最短路最有效的方法.也是耗时的算法,不宜寻路频繁的场合.一般来说适合需求精确的场合. 与启发式的搜索一样,能够根据改变网格密度.网格耗散来进行调整精确度. 使用较好的地方: a.策略游戏的策略搜索 b.方块格子游戏中的格子寻路 2.U3D自带的导航网格系统 U3D内置了NavMesh导航网格系统,一般来说导航网格算法大多是"拐角点算法"

【转】Paxos算法3-实现探讨

——转自:{老码农的专栏} 前两篇Paxos算法的讨论,让我们对paxos算法的理论形成过程有了大概的了解,但距离其成为一个可执行的算法程序还有很长的路要走,原因是很多的细节和错误未被考虑.Google Chubby的作者说,paxos算法实现起来远没有看起来简单,原因是paxos的容错仅限于server crash这一种情况,但在实际工程实现时要考虑磁盘损坏.文件损坏.Leader身份丢失等诸多的错误. 1. Paxos各角色的职能 在paxos算法中存在Client.Proposer.Pro

分布式一致性算法:Raft 算法

Raft 算法是可以用来替代 Paxos 算法的分布式一致性算法,而且 raft 算法比 Paxos 算法更易懂且更容易实现.本文对 raft 论文进行翻译,希望能有助于读者更方便地理解 raft 的思想.如果对 Paxos 算法感兴趣,可以看我的另一篇文章:分布式系列文章--Paxos算法原理与推导 摘要Raft 是用来管理复制日志(replicated log)的一致性协议.它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同.这使得 Raft 比 Pax

Paxos算法(转)

Paxos算法的难理解与算法的知名度一样令人敬仰,从我个人的经历而言,难理解的原因并不是该算法高深到大家智商不够,而在于Lamport在表达该算法时过于晦涩且缺乏一个完整的应用场景.如果大师能换种思路表达该算法,大家可能会更容易接受: 首先提出算法适用的场景,给出一个多数读者能理解的案例 其次描述Paxos算法如何解决这个问题 再次给出算法的起源(就是那些希腊城邦的比喻和算法过程) Lamport首先提出算法的起源,在没有任何辅助场景下,已经让很多人陷于泥潭,在满脑子疑问的前提下,根本无法继续接

[大话数据结构]算法

算法相关: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作. 我们不可能把所有的算法都实现,也更不可能用所有的输入逐一的验证算法,所以算法的正确性在大部分情况下都不能用程序来证明,而是用数学方法证明. 好的算法,应该具有正确性.可读性.健壮性.高效率和低存储量的特征,但是对于算法有意义的研究就是算法的效率性了. 算法效率的度量方法: 事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序进行运行时间的比较,

超酷算法:喷泉码

今天的主题是喷泉码,或者称为“无率码”.喷泉码是将一些数据,例如文件,转化为一个有效的任意数量的编码包的方法,这样只要你接收到稍大于信源数据包数量的编码包的子集,就可以恢复信源数据.换句话说,你创建了一个编码数据的“喷泉”,只要接收端接收到足够的“水滴”,就可以恢复文件,而不管它们接到哪一个遗漏了哪一个. 让喷泉码如此知名的原因是,它允许你在有损连接(比如说因特网)的情况下传输文件,而且传输过程不依赖于你是否知道丢包率,也不需要接收端反馈哪些数据包丢失了.可以看到在很多场景,从通过广播媒介传送一