侵权投诉

深不可测的遗传算法的原理原来是这么简单

2018-03-12 11:40 次阅读

很多人认为,算法是数学的内容,学起来特别麻烦。我们不能认为这种观点是错误的。但是我们也知道,软件是一种复合的技术,如果一个人只知道算法,但是不能用编程语言很好地实现,那么再优秀的算法也不能发挥作用。

有一次,一个人问我:

“你写的都是小儿科的东西,几十行代码就能搞定,能不能整一点高深的算法?”

我反问他什么是他所理解的高深的算法,他答复说:“像遗传算法蚁群算法之类的。”于是我给了他一个遗传算法求解0-1背包问题的例子,并告诉他,这也就是几十行代码的算法,怎么理解成是高深的算法?他刚开始不承认这是遗传算法,直到我给了他Denis Cormier公开在北卡罗来纳州立大学服务器上的遗传算法的源代码后,他才相信他一直认为深不可测的遗传算法的原理原来是这么简单。

还有一个人直言“用三个水桶等分8升水”之类的问题根本就称不上算法,他认为像“阿法狗”那样的人工智能才算是算法。我告诉他计算机下棋的基本理论就是博弈树,或者再加一个专家系统。但是他认为博弈树也是很高深的算法,于是我给了他一个井字棋游戏,并告诉他,这就是博弈树搜索算法,非常智能,你绝对战胜不了它(因为井字棋游戏很简单,这个算法会把所有的状态都搜索完)。我相信他一定很震惊,因为这个算法也不超过100行代码。

对于上面提到的例子,我觉得主要原因在于大家对算法的理解有差异,很多人对算法的理解太片面,很多人觉得只有名字里包含“XX算法”之类的东西才是算法。而我认为算法的本质是解决问题,只要是能解决问题的代码就是算法。

一个人只有有了很好的计算机知识和数学知识,才能在算法的学习上不断进步。不管算法都么简单,都要自己亲手实践,只有不断认识错误、不断发现错误,才能不断提高自己的编程能力,不断提高自己的业务水平。

其实任何算法都有自己的应用环境和应用场景,没有算法可以适用于所有的场景。这一点希望大家明白。同时,我们也要清楚复杂的算法都是由普通的算法构成的,没有普通的算法就没有复杂的算法可言,所以复杂变简单,由大化小,这就是算法分治递归的基本思想。

我们可以下面一个数组查找的函数说起。一句一句讲起,首先我们开始从最简单的函数构造开始:

1. int find(int array[], int length, int value)  

2. {  

3.     int index = 0;  

4.     return index;  

5. }  

这里看到,查找函数只是一个普通的函数,那么首先需要判断的就是参数的合法性:

1. static void test1()  

2. {  

3.     int array[10] = {0};  

4.     assert(FALSE == find(NULL, 10, 10));  

5.     assert(FALSE == find(array, 0, 10));  

6. }  

这里可以看到,我们没有判断参数的合法性,那么原来的查找函数应该怎么修改呢?

1. int find(int array[], int length, int value)  

2. {  

3.     if(NULL == array || 0 == length)  

4.         return FALSE;  

5.   

6.     int index = 0;  

7.     return index;  

8. }  

看到上面的代码,说明我们的已经对入口参数进行判断了。那么下面就要开始写代码了。

1. int find(int array[], int length, int value)  

2. {  

3.     if(NULL == array || 0 == length)  

4.         return FALSE;  

5.   

6.     int index = 0;  

7.     for(; index < length; index++){  

8.         if(value == array[index])  

9.             return index;  

10.     }  

11.   

12.     return FALSE;  

13. }  

上面的代码已经接近完整了,那么测试用例又该怎么编写呢?

1. static void test2()  

2. {  

3.     int array[10] = {1, 2};  

4.     assert(0 == find(array, 10, 1));  

5.     assert(FALSE == find(array, 10, 10));  

6. }  

运行完所有的测试用例后,我们看看对原来的代码有没有什么可以优化的地方。其实,我们可以把数组转变成指针。

1. int find(int array[], int length, int value)  

2. {  

3.     if(NULL == array || 0 == length)  

4.         return FALSE;  

5.   

6.     int* start = array;  

7.     int* end = array + length;  

8.     while(start < end){  

9.         if(value == *start)  

10.             return ((int)start - (int)array)/(sizeof(int));  

11.         start ++;  

12.     }  

13.   

14.     return FALSE;  

15. }  

如果上面的代码参数必须是通用的数据类型呢?

1. template  

2. int find(type array[], int length, type value)  

3. {  

4.     if(NULL == array || 0 == length)  

5.         return FALSE;  

6.   

7.     type* start = array;  

8.     type* end = array + length;  

9.     while(start < end){  

10.         if(value == *start)  

11.             return ((int)start - (int)array)/(sizeof(type));  

12.         start ++;  

13.     }  

14.   

15.     return FALSE;  

16. }  

此时,测试用例是不是也需要重新修改呢?

1. static void test1()  

2. {  

3.     int array[10] = {0};  

4.     assert(FALSE == find(NULL, 10, 10));  

5.     assert(FALSE == find(array, 0, 10));  

6. }  

7.   

8. static void test2()  

9. {  

10.     int array[10] = {1, 2};  

11.     assert(0 == find(array, 10, 1));  

12.     assert(FALSE == find(array, 10, 10));  

13. }  

最后,我们总结一下:

(1)我们的算法需要测试用例的验证

(2)任何的优化都要建立在测试的基础之上

(3)测试和代码的编写要同步进行

(4)算法的成功运行时一步一步进行得,每一步的成功必须确立在原有的成功之上

原文标题:算法又难又神秘?你大错特错!

文章出处:【微信号:weixin21ic,微信公众号:21ic电子网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

基于遗传算法优化EKF算法的SOC估算

采用遗传算法对 EKF 中的系统噪声矩阵和测量矩阵的协方差进行在线优化,以实现在模型误差最小时对 SOC 进行在线估计 ...
发表于 03-12 12:27 681次 阅读
基于遗传算法优化EKF算法的SOC估算

基于遗传算法的异步电机

在对异步电机矢量控制系统分析的基础上,给出了参数优化设计的数学模型,采用了一种改进的遗传算法,并利用Matlab软件对PID参...
发表于 12-10 15:40 395次 阅读
基于遗传算法的异步电机

浅析遗传算法的工作原理

本文简要地对遗传算法进行阐述,让以前没有接触过遗传算法的人有个大概的认识,并了解遗传算法的工作原理
的头像 汽车玩家 发表于 11-30 11:12 2050次 阅读
浅析遗传算法的工作原理

多AGV路径总距离怎么缩短?

论文主要研究一种改进的遗传算法在多个自动导引车(AGV)路径规划中的应用。其创新体现两方面,首先,三交换启发交叉算子用来...
发表于 09-11 11:52 662次 阅读
多AGV路径总距离怎么缩短?

简单遗传算法无法解出最终值

最近在学习遗传算法,看的是《遗传算法与遗传规划》书上有个简单遗传算法例子,求y=x^2 在x∈[0,31]上的最大值。 但是只讲了思路...
发表于 03-12 23:55 330次 阅读
简单遗传算法无法解出最终值

遗传算法及其应用书籍的详细资料说明

遗传算法是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法,由美国J.Holland教授提出,其....
发表于 03-01 15:35 429次 阅读
遗传算法及其应用书籍的详细资料说明

遗传算法如何进行设计和其并行的实现

遗传算法(Genetic Algorithm-- GA) ,是模拟达尔文的遗传选择和自然淘汰的生物进....
发表于 12-18 16:11 527次 阅读
遗传算法如何进行设计和其并行的实现

人工智能之遗传算法(GA),搜索最优解的方法

遗传算法(GA)是从代表问题可能潜在的解集的一个种群(population)开始,而一个种群则由经过....
发表于 05-11 10:35 7378次 阅读
人工智能之遗传算法(GA),搜索最优解的方法

能透过333口诀,快速理解AI到底是什么

第二次AI热潮伴随着计算机的普及,出现在1980年代。这时期所进行的研究,是以灌输「专家知识」作为规....
的头像 物联之家网 发表于 04-30 17:10 4329次 阅读
能透过333口诀,快速理解AI到底是什么

解析人工智能的3大浪潮、3大技术和3大应用

所谓人工智能(Artificial Intelligence;缩写:AI),是指以人工方式让机器来实....
的头像 Thundersoft中科创达 发表于 04-25 12:36 5731次 阅读
解析人工智能的3大浪潮、3大技术和3大应用

基于改进遗传算法的唯相波束形成方法

在卫星或雷达通信中,由于发射方和接收方的距离较远,杂波干扰较大,所以对天线低副瓣要求极高。倘若对阵元....
发表于 04-03 15:36 351次 阅读
基于改进遗传算法的唯相波束形成方法

智能控制([刘金琨编着]第1版)--第10章 遗传算法

智能控制([刘金琨编着]第1版)--第10章 遗传算法.zip ...
发表于 03-18 21:13 732次 阅读
智能控制([刘金琨编着]第1版)--第10章 遗传算法

第8章遗传算法辨识

第8章遗传算法辨识.rar
发表于 03-18 20:58 611次 阅读
第8章遗传算法辨识

基于走点法的改进遗传算法

传统的遗传算法在解决移动节点路径规划问题时由于其算法复杂度高、迭代时间长,容易陷入局部最优。为此,提....
发表于 01-29 14:30 338次 阅读
基于走点法的改进遗传算法

基于遗传算法的电力交易优化模型

新能源微电网是基于局部配电网建设的风、光、天然气等各类分布式能源多能互补的智慧型能源综合利用局域网。....
发表于 01-24 14:15 431次 阅读
基于遗传算法的电力交易优化模型

用遗传算法模拟电路的自动设计!!!!

大神们大家好!!非常高兴在这里和大家一起相聚。最近我在学习用遗传算法来模拟电路的自动设计,不知道大家是否有研究这方面的。...
发表于 01-16 19:41 1169次 阅读
用遗传算法模拟电路的自动设计!!!!

基于遗传算法的多缺陷定位方法

基于程序频谱的缺陷定位方法可以有效地辅助开发人员定位软件内部缺陷,但大部分已有自动化方法在解决多缺陷....
发表于 01-15 09:56 354次 阅读
基于遗传算法的多缺陷定位方法

融合遗传和蚁群的证券组合投资优化

基于Markowitz资产组合理论,综合考虑证券投资的风险和收益,建立证券组合投资的多目标规划模型,....
发表于 01-12 13:57 329次 阅读
融合遗传和蚁群的证券组合投资优化

基于遗传算法结构化进化的IIR数字滤波器生成方法

数字滤波器具有精度高、稳定、易于集成等模拟滤波器不具备的特点,所以在通信、图像处理、模式识别等领域得....
发表于 01-10 11:35 500次 阅读
基于遗传算法结构化进化的IIR数字滤波器生成方法

遗传算法的单目相机标定

针对张正友标定方法中相机内参数的求解可能陷入局部最优解的问题,考虑镜头的三阶径向畸变和二阶离心畸变,....
发表于 01-05 16:11 320次 阅读
遗传算法的单目相机标定

遗传算法的太阳影子定位

本文以直杆为研究对象,利用二次拟合方法、遗传算法和量子遗传算法对影长数据和视频进行处理,来建立太阳影....
发表于 01-02 18:58 578次 阅读
遗传算法的太阳影子定位

基于遗传算法的试验计划总完工时间极小化模型设计

伴随着物联网技术和大数据分析技术的兴起,越来越多的企业由传统制造业向智能化转型,以实现产业升级,而总....
发表于 12-30 16:54 254次 阅读
基于遗传算法的试验计划总完工时间极小化模型设计

一种灾变变速量子遗传算法用于SSSC的选址定容优化

针对静止同步串联补偿器(static synchronous series compensator,....
发表于 12-26 11:37 348次 阅读
一种灾变变速量子遗传算法用于SSSC的选址定容优化

关于如何「训练」神经网络的一部分经验与见解

本文是作者关于如何「训练」神经网络的一部分经验与见解,处理神经网络的基础概念外,这篇文章还描述了梯度....
的头像 人工智能和机器人研究院 发表于 12-21 17:10 4542次 阅读
关于如何「训练」神经网络的一部分经验与见解

基于遗传算法的WSAN故障检测滤波器优化设计

为提高无线传感器/执行器网络( WSAN)的可靠性,提出一种基于遗传算法(GA)的WSAN故障检测滤....
发表于 12-21 16:12 253次 阅读
基于遗传算法的WSAN故障检测滤波器优化设计

基于粗糙集和PSO、遗传算法的基因调控网络构建方法

MicroRNA( miRNA)是一类大小为21 - 25 nt的内源性非编码小核糖核酸(RNA),....
发表于 12-09 10:05 309次 阅读
基于粗糙集和PSO、遗传算法的基因调控网络构建方法

基于云计算遗传算法的多任务调度算法

任务调度是云计算中的一个关键问题,遗传算法是一种能较好解决优化问题的算法。本论文针对遗传算法在任务调....
发表于 12-07 15:16 164次 阅读
基于云计算遗传算法的多任务调度算法

基于Prim初始种群选取优化遗传算法的三维片上网络低功耗映射

针对将计算任务合理地映射到三维片上网络( NoC)的问题,提出了一种基于遗传算法(GA)的改进算法。....
发表于 12-07 14:40 207次 阅读
基于Prim初始种群选取优化遗传算法的三维片上网络低功耗映射

高校在线排课系统的设计

高校排课工作作为教学管理中一个很重要的环节,影响因素较多,是一种典型的组合优化问题。群体智能算法的研....
发表于 12-07 13:44 177次 阅读
高校在线排课系统的设计

多种群量子遗传算法优化BP神经网络的网络流量预测模型

为了提高网络流量的预测精度,提出了一种改进的多种群量子遗传算法优化BP神经网络的网络流量预测模型。在....
发表于 12-06 17:18 870次 阅读
多种群量子遗传算法优化BP神经网络的网络流量预测模型

遗传算法的基本原理

遗传算法简称GA(Genetic Algorithms)是1962年由美国Michigan大学的Ho....
发表于 12-06 15:05 234次 阅读
遗传算法的基本原理

基于遗传算法的伺服系统静态摩擦辨识

基于遗传算法的伺服系统静态摩擦辨识
发表于 12-06 15:04 208次 阅读
基于遗传算法的伺服系统静态摩擦辨识

基于遗传算法的机械手参数辨识

基于遗传算法的机械手参数辨识
发表于 12-06 15:02 242次 阅读
基于遗传算法的机械手参数辨识

遗传算法辨识程序

遗传算法辨识程序
发表于 12-06 15:00 128次 阅读
遗传算法辨识程序

小生境分布估计量子遗传算法NEDQGA

针对现有量子遗传算法进化机制存在的收敛速度慢以及易陷入局部极值的问题,为提高量子进化算法的全局收敛性....
发表于 12-06 11:37 164次 阅读
小生境分布估计量子遗传算法NEDQGA

基于偏好矩阵遗传算法求解长期车辆合乘问题

针对长期车辆合乘问题( LTCPP),提出带有偏好矩阵的遗传算法(PMGA),将拥有私家车且目的地相....
发表于 12-06 11:15 127次 阅读
基于偏好矩阵遗传算法求解长期车辆合乘问题

使用遗传算法对时空数据压缩策略优化

针对时空数据因为有损压缩导致的还原精度不高的问题,提出了使用遗传算法对时空数据压缩策略进行优化。算法....
发表于 12-05 14:18 315次 阅读
使用遗传算法对时空数据压缩策略优化

基于遗传算法的列车运行调整

开展技术站车流组织与区段列车运行调整的协同优化研究,利用在途列车的运行可调性实现运输区域的线流配合,....
发表于 12-04 11:06 126次 阅读
基于遗传算法的列车运行调整

利用代间差分遗传算法优化分形图像编码速度

分形图像压缩技术是利用数字图像本身固有的自相似性,在分形理论的指导下,把图像数据转变为相关的分形参数....
发表于 12-01 16:00 371次 阅读
利用代间差分遗传算法优化分形图像编码速度

基于改进遗传算法在餐厅服务机器人的路径规划应用

针对遗传算法(GA)易产生早熟现象和收敛速度慢的问题,提出了一种基于传统遗传算法(TGA)的改进遗传....
发表于 11-30 11:03 775次 阅读
基于改进遗传算法在餐厅服务机器人的路径规划应用

一类适应度函数的遗传算法编码

针对在探讨适应度函数的周期性特点与整数编码元数之间的关联特性时,一阶积木块数量对编码性能的评价不一定....
发表于 11-30 10:27 254次 阅读
一类适应度函数的遗传算法编码

基于聚类的多目标遗传算法在类职责分配中的应用

在面向对象软件设计与实现过程中,类职责分配是其中最重要且复杂的步骤之一,它在很大程度上影响软件质量。....
发表于 11-28 17:35 176次 阅读
基于聚类的多目标遗传算法在类职责分配中的应用

基于处理器的混合并行遗传算法

传统遗传算法求解计算密集型任务时,适应度函数的执行时间增加相当快,致使当种群规模或者进化代数增大时,....
发表于 11-27 17:55 186次 阅读
基于处理器的混合并行遗传算法

混合修复遗传算法及其在社会网络中的应用

社会网络分析是数据挖掘中与社会生活联系最紧密的热点之一,凝聚子群分析是一种典型的社会网络子结构分析方....
发表于 11-23 11:52 147次 阅读
混合修复遗传算法及其在社会网络中的应用

汽车电子中混合遗传算法的应用介绍

机车车辆企业是典型的订单式生产企业,面对全球经济一体化,客户需求个性化以及产品交货高速化的经济时代,....
发表于 11-22 16:18 190次 阅读
汽车电子中混合遗传算法的应用介绍

基于免疫遗传算法优化的自调整PID控制器研究

目前,传统自调整PID控制器回路中存在目的误差、平均误差和透过误差较多的现象,容易造成工艺数据控制不....
发表于 11-22 10:09 229次 阅读
基于免疫遗传算法优化的自调整PID控制器研究

基于改进遗传算法的多天线地面站硬件资源分配方法

多天线卫星地面站硬件设备资源分配问题是一个基于约束满足的复杂资源组合优化问题。在考虑任务执行时间、地....
发表于 11-20 10:26 206次 阅读
基于改进遗传算法的多天线地面站硬件资源分配方法

一种改进的自适应遗传算法优化BP神经网络

针对Srinivas提出的自适应遗传算法种群前期进化较慢的问题,改进了自适应交叉率和变异率的计算方法....
发表于 11-16 10:39 408次 阅读
一种改进的自适应遗传算法优化BP神经网络

基于遗传算法在自动组卷系统中应用

基于满足信息时代考试模式改革的要求和保证考试的公正性、有效性的目的,文中在分析研究自动组卷系统中算法....
发表于 11-14 16:19 285次 阅读
基于遗传算法在自动组卷系统中应用

遗传算法的解析与基于遗传算法的机器学习的介绍

遗传算法在许多优化问题中都有成功的应用1但其本身也存在一些不足2如何改善遗传算法的搜索能力和提高算法....
发表于 11-13 17:40 235次 阅读
遗传算法的解析与基于遗传算法的机器学习的介绍

求解物流路径优化的改进遗传算法研究

为了解决传统遗传算法中易早熟和陷入局部最优,造成收敛慢,效率低的问题,提出了一种改进的遗传算法GBL....
发表于 11-11 17:46 271次 阅读
求解物流路径优化的改进遗传算法研究

BP神经网络风速预测方法

针对BP神经网络风速预测中存在的结构不确定以及网络过度拟合的问题,利用遗传算法的全局搜索能力和模糊聚....
发表于 11-10 11:23 355次 阅读
BP神经网络风速预测方法

遗传算法在函数优化中研究(MATLAB测试)

遗传算法(GA)是基于达尔文生物进化论和孟德尔遗传变异理论的一类仿生型优化算法。遗传算法结构简单不需....
发表于 11-10 10:53 224次 阅读
遗传算法在函数优化中研究(MATLAB测试)

基于自适应量子遗传算法和二维OTSU的图像分割方法

图像分割是图像预处理中的关键步骤,是更高层次网像识别和理解的基础,是图像处理中不可忽视的存在。阈值分....
发表于 11-09 14:46 257次 阅读
基于自适应量子遗传算法和二维OTSU的图像分割方法

基于遗传算法的优化机组有功出力的方法

低频振荡是影响互联电网安全稳定运行的突出问题,提高系统阻尼是防止区间低频振荡最有效的措施。本文提出了....
发表于 11-09 10:42 187次 阅读
基于遗传算法的优化机组有功出力的方法

采用遗传算法实现模型的路径优化

近年来自然灾害、重大事故的频繁发生,使得应急疏散问题越来越得到人们的重视。应急疏散是指在灾害发生后,....
发表于 11-06 11:16 466次 阅读
采用遗传算法实现模型的路径优化

针对运输网络成本的多联式遗传算法

目前港口发展越来越依赖于腹地内接人的公路、铁路和水路系统,解决不断增加的运输需求量是货运业的主要任务....
发表于 11-01 16:48 179次 阅读
针对运输网络成本的多联式遗传算法

遗传算法及其在电力系统中的应用【PDF】

发表于 12-13 18:36 2729次 阅读
遗传算法及其在电力系统中的应用【PDF】

matlab利用遗传算法求最值的小实例详解

发表于 12-13 18:32 3462次 阅读
matlab利用遗传算法求最值的小实例详解

优化结果输出问题

各位大神先看看我的程序,这是借鉴网上一位师兄的,按照自己的需求做了修改: clc format long %--------------------控制参...
发表于 07-07 14:43 1336次 阅读
优化结果输出问题