遗传算法的作用?
与传统的优化相比,在求取符合运行要求的全局最优解时,遗传算法作为一种搜索的方法,已经成为成熟的具有良好收敛性、极高鲁棒性和广泛适用性的优化方法,很好的解决了电力系统的多变量、非线性、不连续、多约束的优化控制问题。
什么叫遗传算法?
遗传算法是借鉴生物的自然选择和遗传进化机制而开发出的一种全局优化自适应概率搜索算法。
它采用群体搜索技术,通过对当前群体使用选择、交叉、变异等一系列遗传操作,从而产生新一代的群体,并逐步使群体进化到包含或接近最优解的状态。
遗传算法是新发展起来的一门学科,各种理论、方法尚未成熟,有待于进一步地发展和完善举个例子,假如有一个动物群体,如果你能让他们当中越强壮的越能优先交配和产籽,那么千万年后,这个动物群体肯定会变得更加强壮,这是很容易理解的。
同样,对于许多算法问题,特别是NP问题,比如说最短路径,如果有400个城市,让你找出最短的旅游路线,采用穷举比较,复杂度为O(n!),这时,你可以先随机产生100种路径,然后让他们之中路程越短的那些越能优先互相交换信息(比如每条里面随机取出10个位置互相交换一下),那么循环几千次后,算出来的路径就跟最短路径非常接近了(即求出一个近似最优解)。
(,但它却为我们解决许多复杂问题提供了希望。
什么叫遗传算法,遗传算法有什么用?希望通俗一点儿
首先有个很神奇的现象:人类以及动物的进化都是朝着好的方向发展,虽然有的往坏的方向发展了,但是总体肯定是往好的方向发展。
这看似不奇怪,但是我们知道,人类的基因组合是随机的,没有上帝约束。
这种随机过程的结果却是一致的!!!!!我们的遗传算法就是从这里得到启发!比如我要求y=x1+x2的最大值,两个变量,我不用传统的数学方法,就用幼儿园的方法,把所有可能取值带进去算,然后找出最大的就行了!但是,有时候取值是连续的,没关系!使其离散化,就像把模拟信号化成数字信号一样!还有个问题,如果取值太多咋办?这就是遗传算法的精髓!
首先,我不用取所有可能取值,我只取几十个或者几百个(自己定),然后进行处理,怎样处理呢?让我们回到刚开始的人类进化问题,虽然没有上帝的帮忙,但是我们知道,自然界遵循优胜劣汰的发贼,遵循交叉变异的法则,虽然不能数字化,但是这是个趋势!我们就是把这种法则数学化!所取的几十个值我要剩下哪些?要抛弃哪些?要处理哪些?这都要我们自己选择,肯定是选择最合适的取值留下,经过一系列的处理,就生成了新的群体,然后再处理,自己约定处理到第几次就可以了,取出现过的最大值
不用担心取到的是不是最大值,因为数学上已经有了证明,这种方法是收敛的,概率是1,所以尽管放心的做,具体的做法要参考相关书籍,不难的。
遗传算法的最大用处就是解决数学理论不能解决的问题!比如路径规划,调度问题……
怎么学习遗传算法呢?本人不是计算机专业,想用遗传算法做优化。但是毫无头绪。
这个算法入门非常简单,推荐书《游戏编程中的人工智能技术》,网上有pdf版,这部书第二章以浅显的办法专门说明了遗传算法的原理和实现方法
我只能跟你说,这个是人工智能算法中的一种,必须了解了才能够使用(不必深入了解,数学原理也可以忽略),如果你不想了解的话,推荐你找个了解并会用遗传算法的人来帮你,你提出需求,他来帮你完成
这个算法运行成功是概率性的,可能需要运行多次才能达到想要的结果,对于一个复杂的问题,有许多东西需要考虑,对算法的了解程度和对问题的理解程度要高,不然效果会大打折扣
遗传算法的优缺点?
遗传算法的优缺点
遗传算法属于进化算法( Evolutionary Algorithms) 的一种,它通过模仿自然界的选择与遗传的机理来寻找最优解. 遗传算法有三个基本算子:选择、交叉和变异。
数值方法求解这一问题的主要手段是迭代运算。
一般的迭代方法容易陷入局部极小的陷阱而出现"死循环"现象,使迭代无法进行。
遗传算法很好地克服了这个缺点,是一种全局优化算法。
生物在漫长的进化过程中,从低等生物一直发展到高等生物,可以说是一个绝妙的优化过程。
这是自然环境选择的结果。
人们研究生物进化现象,总结出进化过程包括复制、杂交、变异、竞争和选择。
一些学者从生物遗传、进化的过程得到启发,提出了遗传算法(GA)。
算法中称遗传的生物体为个体(individual),个体对环境的适应程度用适应值(fitness)表示。
适应值取决于个体的染色体(chromosome),在算法中染色体常用一串数字表示,数字串中的一位对应一个基因(gene)。
一定数量的个体组成一个群体(population)。
对所有个体进行选择、交叉和变异等操作,生成新的群体,称为新一代(new generation)。
遗传算法计算程序的流程可以表示如下:
第一步 准备工作
(1)选择合适的编码方案,将变量(特征)转换为染色体(数字串,串长为m)。
通常用二进制编码。
(2)选择合适的参数,包括群体大小(个体数M)、交叉概率PC和变异概率Pm。
(3)确定适应值函数f(x)。
f(x)应为正值。
第二步 形成一个初始群体(含M个个体)。
在边坡滑裂面搜索问题中,取已分析的可能滑裂面组作为初始群体。
第三步 对每一染色体(串)计算其适应值fi,同时计算群体的总适应值 。
第四步 选择
计算每一串的选择概率Pi=fi/F及累计概率。
选择一般通过模拟旋转滚花轮(roulette,其上按Pi大小分成大小不等的扇形区)的算法进行。
旋转M次即可选出M个串来。
在计算机上实现的步骤是:产生[0,1]间随机数r,若r
可见适应值大的入选概率大。
第五步 交叉
(1)对每串产生[0,1]间随机数,若r>pc,则该串参加交叉操作,如此选出参加交叉的一组后,随机配对。
(2) 对每一对,产生[1,m]间的随机数以确定交叉的位置。
第六步 变异
如变异概率为Pm,则可能变异的位数的期望值为Pm ×m×M,每一位以等概率变异。
具体为对每一串中的每一位产生[0,1]间的随机数r,若r
如新个体数达到M个,则已形成一个新群体,转向第三步;否则转向第四步继续遗传操作。
直到找到使适应值最大的个体或达到最大进化代数为止。
由于选择概率是由适应值决定的,即适应值大的染色体入选概率也较大,使选择起到"择优汰劣"的作用。
交叉使染色体交换信息,结合选择规则,使优秀信息得以保存,不良信息被遗弃。
变异是基因中得某一位发生突变,以达到产生确实有实质性差异的新品种。
遗传算法虽是一种随机算法,但它是有导向的,它所使用的"按概率随机选择"方法是在有方向的搜索方法中的一种工具。
正是这种独特的搜索方法,使遗传算法自然地避开了其它最优化算法常遇到的局部最小陷阱。
遗传算法与传统的优化方法(枚举,启发式等)相比较,以生物进化为原型,具有很好的收敛性,在计算精度要求时,计算时间少,鲁棒性高等都是它的优点。
遗传算法的优点:
1. 与问题领域无关切快速随机的搜索能力。
2. 搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较,robust.
3. 搜索使用评价函数启发,过程简单
4. 使用概率机制进行迭代,具有随机性。
5. 具有可扩展性,容易与其他算法结合。
遗传算法的缺点:
1、遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码,
2、另外三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验.
3、没有能够及时利用网络的反馈信息,故算法的搜索速度比较慢,要得要较精确的解需要较多的训练时间。
4、算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进。
5、算法的并行机制的潜在能力没有得到充分的利用,这也是当前遗传算法的一个研究热点方向。
在现在的工作中,遗传算法(1972年提出)已经不能很好的解决大规模计算量问题,它很容易陷入“早熟”。
常用混合遗传算法,合作型协同进化算法等来替代,这些算法都是GA的衍生算法。
遗传算法具有良好的全局搜索能力,可以快速地将解空间中的全体解搜索出,而不会陷入局部最优解的快速下降陷阱;并且利用它的内在并行性,可以方便地进行分布式计算,加快求解速度。
但是遗传算法的局部搜索能力较差,导致单纯的遗传算法比较费时,在进化后期搜索效率较低。
在实际应用中,遗传算法容易产生早熟收敛的问题。
采用何种选择方法既要使优良个体得以保留,又要维持群体的多样性,一直是遗传算法中较难解决的问题。
模拟退火算法虽具有摆脱局部最优解的能力,能够以随机搜索技术从概率的意义上找出目标函数的全局最小点。
但是,由于模拟退火算法对整个搜索空间的状况了解不多,不便于使搜索过程进入最有希望的搜索区域,使得模拟退火算法的运算效率不高。
模拟退火算法对参数(如初始温度)的依赖性较强,且进化速度慢。