遗传算法之:编码方法

2024-04-15 05:08
文章标签 遗传算法 编码方法

本文主要是介绍遗传算法之:编码方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

遗传算法之:编码方法

标签:  遗传算法 tsp c++    遗传算法c++程序    遗传算法c++编程  
转自:  http://blog.csdn.net/SpriteLW/article/details/1039252

本文最初由SpriteLW发表于http://blog.csdn.net/SpriteLW,可以随意转载,但未经同意不得增删修改,转载应保留本声明,否则追究责任。

       读万卷书不如行万里路,今天下决心写一个SGA(Simple Genetic Alogrithms)程序,是求解非约束优化问题。

max f(x1,x2) = 21.5 + x1*sin(4 * PI *x1) + x2*sin(20 * PI * x2)

-3.0 <= x1 <= 12.1

4.1 <= x2 <= 5.8

这可是遗传算法中最容易的,可是结果却令人失望,在整个求解过程中都收敛在局部最优,只有通过加大变异率才能求得全局最优,但问题可想而知:全局最优解不稳定,就好像是昙花一现。

       查了一下资料才发现是编码设计的问题。我用的是二进制编码。

       编码是应用遗传算法时要解决的首要问题,也是设计遗传算法时的一个关键步骤。编码方法影响到交叉算子、变异算子等遗传算子的运算方法,大很大程度上决定了遗传进化的效率。

       迄今为止人们已经提出了许多种不同的编码方法。总的来说,这些编码方法可以分为三大类:二进制编码法、浮点编码法、符号编码法。下面我们从具体实现角度出发介绍其中的几种主要编码方法。

       1.二进制编码方法:

       它由二进制符号01所组成的二值符号集。它有以下一些优点:

1)      编码、解码操作简单易行

2)      交叉、变异等遗传操作便于实现

3)      符合最小字符集编码原则

4)      利用模式定理对算法进行理论分析。

       二进制编码的缺点是:对于一些连续函数的优化问题,由于其随机性使得其局部搜索能力较差,如对于一些高精度的问题(如上题),当解迫近于最优解后,由于其变异后表现型变化很大,不连续,所以会远离最优解,达不到稳定。而格雷码能有效地防止这类现象

       2.格雷码方法:

       格雷码方法是这样的一种编码方法,其连续两个整数所对应的编码值之间仅仅只有一个码位是不同的。如下表

十进制

二进制

格雷码

0

0000

0000

1

0001

0001

2

0010

0011

3

0011

0010

4

0100

0110

5

0101

0111

6

0110

0101

7

0111

0100

8

1000

1100

9

1001

1101

10

1010

1111

11

1011

1110

12

1100

1010

13

1101

1011

14

1110

1001

15

1111

1000

假设有一个二进制编码B=bmbm-1…b2b1,其对应的格雷码为G=gmgm-1…g2g1

由二进制编码转格雷码的转换公式为:

       gm =  bm

       gi = bi+1bi i=m-1,m-2,…2,1

由格雷码转二进制的转换公式为:
       bm = gm

       bi = bi+1gi, i=m-1,m-2,…2,1

从以上表格可以看出,当一个染色体变异后,它原来的表现现和现在的表现型是连续的。

       格雷码编码的主要优点是:

1)      便于提高遗传算法的局部搜索能力

2)      交叉、变异等遗传操作便于实现

3)      符合最小字符集编码原则

4)      便于利用模式定理对算法进行理论分析

 

3.浮点编码法

       对于一些多维、高精度要求的连续函数优化问题,使用二进制编码来表示个体时将会有一些不利之处。

       二进制编码存在着连续函数离散化时的映射误差。个体长度较知时,可能达不到精度要求,而个体编码长度较长时,虽然能提高精度,但却使遗传算法的搜索空间急剧扩大。

       所谓浮点法,是指个体的每个基因值用某一范围内的一个浮点数来表示。在浮点数编码方法中,必须保证基因值在给定的区间限制范围内,遗传算法中所使用的交叉、变异等遗传算子也必须保证其运算结果所产生的新个体的基因值也在这个区间限制范围内。

       浮点数编码方法有下面几个优点:

1)      适用于在遗传算法中表示范围较大的数

2)      适用于精度要求较高的遗传算法

3)      便于较大空间的遗传搜索

4)      改善了遗传算法的计算复杂性,提高了运算交率

5)      便于遗传算法与经典优化方法的混合使用

6)      便于设计针对问题的专门知识的知识型遗传算子

7)      便于处理复杂的决策变量约束条件

 

4.符号编码法

       符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}。

       符号编码的主要优点是:

1)      符合有意义积术块编码原则

2)      便于在遗传算法中利用所求解问题的专门知识

3)      便于遗传算法与相关近似算法之间的混合使用。

       但对于使用符号编码方法的遗传算法,一般需要认真设计交叉、变异等遗传运算的操作方法,以满足问题的各种约束村求,这样才能提高算法的搜索性能。

这篇关于遗传算法之:编码方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/904900

相关文章

遗传算法Github初学

遗传算法的理论是根据达尔文进化论而设计出来的算法:人类是朝着好的方向(最优解)进化,进化过程中,会自动选择优良基因,淘汰劣等基因 遗传算法(genetic algorithm——GA)是计算数学中用于解决最佳化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择、杂交等。 搜索算法的共同特征为: 首先组成一组候选解依据某些适应

零基础学启发式算法(5)-遗传算法 (Genetic Algorithm)

一、遗传算法 (Genetic Algorithm, GA)  源于达尔文的进化论,将问题的一个解当作种群中的一个个体。 gene:基因 chromosome: 染色体 population:种群 crossover:交叉 mutation:变异 selection:选择 通过多轮的“选择,交叉和变异”,选择适应度最好的个体作为问题的最优解。 选择:优胜劣汰,适者生存。

MATLAB智能优化算法-学习笔记(1)——遗传算法求解0-1背包问题【过程+代码】

一、问题描述 (1)数学模型 (2)模型总结 目标函数:最大化背包中的总价值 Z。约束条件:确保背包中的物品总重量不超过容量 W。决策变量:每个物品是否放入背包,用0或1表示。 这个数学模型是一个典型的0-1整数线性规划问题。由于其NP完全性,当问题规模较大时,求解此问题通常需要使用启发式算法(如遗传算法、动态规划、分支定界法等)来找到近似最优解。 (3)实例讲解:0-1 背包问题

遗传算法与深度学习实战(8)——使用遗传算法解决旅行商问题

遗传算法与深度学习实战(8)——使用遗传算法解决旅行商问题 0. 前言1. 旅行商问题2. NP 问题3. 构建 TSP 求解器小结系列链接 0. 前言 旅行商问题 (Traveling Salesman Problem, TSP) 是一个经典的优化问题,其目标是找到一条最短的路径,使得旅行商可以访问一系列给定的城市并且每个城市只访问一次,最终回到出发地点。在本节中,我们将学习

MATLAB遗传算法求解考虑碳排放的逆向物流快递产品回收处理中心选址问题实例代码

MATLAB遗传算法求解考虑碳排放的逆向物流快递产品回收处理中心选址问题实例代码 MATLAB遗传算法求解考虑碳排放的逆向物流快递产品回收处理中心选址问题实例代码

遗传算法(GA)的C语言实现

问题: 在下面的程序中将要运用遗传算法对一个多项式求最小值 要求在(-8,8)间寻找使表达式达到最小的x,误差为0.001 问题分析: 编码:采用常规码,即二进制码编码。构造简单,交叉、变异的实现非常容易,同时解的表达也很简洁、直观。可以每0.001取一个点,这样理论误差讲小于0.0005,可以满足题目中的误差要求。此事总的求解空间为: N = (8 - (-8)) * 10

用Python解决优化问题_多目标规划遗传算法模板

NSGA2,即非支配排序遗传算法II(Nondominated Sorting Genetic Algorithm II),是一种用于解决多目标优化问题的遗传算法。NSGA-II算法基于Pareto最优概念,通过快速非支配排序和精英策略,有效地维护种群多样性并提高优化精度 。 NSGA-II算法的流程主要包括: 1. 初始种群的生成。 2. 对种群进行非支配排序和拥挤度计算。 3. 根据非支配等

Genetic Algorithm遗传算法整理

文章目录 一、简介二、算法流程三、参数四、代码五、参考资料 一、简介 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。 遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传

遗传算法与深度学习实战(7)——使用遗传算法解决N皇后问题

遗传算法与深度学习实战(7)——使用遗传算法解决N皇后问题 0. 前言1. N 皇后问题2. 解的表示3. 遗传算法解决 N 皇后问题小结系列链接 0. 前言 进化算法 (Evolutionary Algorithm, EA) 和遗传算法 (Genetic Algorithms, GA) 已成功解决了许多复杂的设计和布局问题,部分原因是它们采用了受控随机元素的搜索。这通常使得使

浅析遗传算法

1 初探遗传算法   Ok,先看维基百科对遗传算法所给的解释: 遗传算法是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。   遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)的抽象表示(称为染色体)的种群向更好的解进化。传统上,解用二进制表示