-
遗传算法
优化:是应用数学的一个分支,主要研究在特定情況下最大化或最小化某一特定函数。
-
-
算法介绍
-
1、遗传算法(Genetic Algorithm, GA)是一种进化算法,其基本原理是仿效生物界的“物竞天择,适者生存”的演化法则。
2、它是把问题参数编码为染色体,再利用迭代进行选择、交叉以及变异等运算来交换种群中染色体的信息。
3、启发式算法就是例如遗传算法、模拟退火、以及各种种群算法如:蚁群、鱼群、粒子群、人工神经网络等模仿自然界或生命体行为模式的算法,一般又称人工智能算法或全局优化算法。
4、由于遗传算法是由进化论和遗传学机理而产生的搜索算法,所以在这个算法中会用到很多生物遗传学知识。
-
-
算法的名词解释
-
转录:是指以DNA为模板,以ATP、UTP、GTP和CTP为原料,按照碱基互补原则,在RNA聚合酶的作用下合成信使RNA的过程,是基因表达的第一步。
适应度:度量某个物种对于生存环境的适应程度。
翻译:是根据遗传密码的中心法则,将成熟的信使RNA分子(由DNA通过转录而生成)中“碱基的排列顺序”(核苷酸序列)解码,并生成对应的特定氨基酸序列的过程。
基因型:性状染色体的内部表现。
表现型:染色体决定的性状的外部表现。
适应度:度量某个物种对于生存环境的适应程度。
选择:以一定的概率从种群中选择若干个个体。一般来说,选择过程是一种基于适应度的优胜劣汰的过程。
交叉:两个染色体的某一相同位置DNA被切断,前后两串分别交叉组合形成两个新的染色体,也称基因重组。
变异:基因在复制时有一定概率产生复制差错,变异产生新的染色体,表现为新的性状。
-
-
-
编码
-
-
编码是应用遗传算法时要解决的首要问题,也是设计遗传算法时的一个关键步骤。编码方法影响到交叉算子、变异算子等遗传算子的运算方法,很大程度上决定了遗传进化的效率。
-
-
-
适应度函数
-
-
评价一个个体(解)的好坏程度,适应度函数是遗传算法进化过程的驱动力,也是进行自然选择的唯一标准,它的设计应结合求解问题本身的要求而定。
-
-
-
遗传算子(选择、交叉、变异)
-
-
选择算子:
适应度高的个体被遗传到下一代群体中的概率大;适应度低的个体,被遗传到下一代群体中的概率小。
选择操作的任务就是从父代群体中选取一些个体,遗传到下一代群体。基本的遗传算法采用轮赌法进行,其基本的思想是各个个体被选中的概率与其适应度函数值大小成正比。
交叉算子:
交叉运算,是指对两个相互配对的染色体依据交叉概率PC按某种方式相互交换其部分基因,从而形成两个新的个体。基本的遗传算法采用单点交叉。
变异算子:
变异运算,是指改变个体编码串中的某些基因值,从而形成新的个体。
作用:让遗传算法搜索全面,防止局部最优的情况出现。
-
-
-
算法步骤
-
-
1、初始化种群
2、计算种群上每个个体的适应度
3、按由个体适应度所决定的某个规则选择将进入下一代的个体
4、按概率Pc进行交叉操作
5、按概率Pm进行变异操作
6、若没有满足某种停止条件,则转入第2步
7、输出种群中适应度最优的染色体作为问题的满意解或最优解。
-
-
-
算法应用
-
-
(1)函数优化 (2)组合优化
(3)自动控制 (4)生产调度
(5)图像处理 (6)机器学习
(7)人工生命 (8)数据挖掘
1、函数优化
在函数优化问题,遗传算法多用于复杂函数的求最值。
2、组合优化
随着问题规模的增大,组合优化问题的搜索空间也急剧扩大,有时在计算机上用枚举法很难甚至不可能求出其最优解。实践证明,遗传算法已经在求解布局优化、旅行商问题、装箱问题等具有NP难度的组合优化问题上取得了成功的应用。
算法的优缺点
优点是能很好的处理约束,能很好的跳出局部最优,最终得到全局最优解,全局搜索能力强;适合求解离散问题,具备数学理论支持。
缺点是收敛较慢,局部搜索能力较弱,运行时间长,且容易受参数的影响。
要将多种算法进行混合,就要针对特定问题,然后融合其中的优势。
比如将遗传算法中的变异算子加入粒子群中就可以形成基于变异的粒子群算法。
旅行商问题(TSP)是一个组合优化方面的问题,已经成为测试组合优化新算法的标准问题。应用遗传算法解决TSP问题,首先对访问城市序列进行排列组合的方法编码,这保证了每个城市经过且只经过一次。接着生成初始种群,并计算适应度函数,即计算遍历所有城市的距离。然后用最优保存法确定选择算子,以保证优秀个体直接复制到下一代。采用有序交叉和倒置变异法确定交叉算子和变异算子。
-
-
:求解背包问题
-
有一个背包,最多能承载170斤的重量,现在有7个物品,物重和价值如下表:
物重 | 35 | 30 | 60 | 50 | 40 | 10 | 25 |
价值 | 10 | 40 | 30 | 50 | 35 | 40 | 30 |
如何选择才能使得我们的背包背走最多价值的物品?
m = 8
N = 800
Pc = 0.8
Pm = 0.05
V =[10,40,30,50,35,40,30]
W =[35,30,60,50,40,10,25]
n = len(W)##染色体长度
w = 10000
C = init(m, n)
S,F = fitness(C,m,n,W,V,w)
B ,y = best_x(F,S,m)
Y =[y]
for i in range(N):
p = rate(F)
C = chose(p, C, m, n)
C = match(C, m, n, Pc)
C = vari(C, m, n, Pm)
S, F = fitness(C, m, n, W, V, w)
B1, y1 = best_x(F, S, m)
if y1 > y:
y = y1
Y.append(y)
print("最大值为:",y)
plt.plot(Y)
plt.show()
-
- 求解TSP问题
问题描述:现有34个城市,已知其坐标;从其中某一城市作为起点出发,途径其他的所有城市,然后回到起点,要求走过的距离最短。
结论:
最短距离为:175.3996
途经:13, 12, 0, 1, 11, 10, 9, 7, 6, 27, 14, 5, 4, 31, 29, 3, 30, 24, 20, 25, 32, 33, 26, 8, 22, 21, 19, 2, 17, 18, 16, 28, 23后回到原点
最终结果如下所示:
最短路径图
TSP结果图