精华内容
下载资源
问答
  • 遗传算法(一) 遗传算法基本原理

    千次阅读 多人点赞 2020-02-03 22:25:13
    遗传算法(一)遗传算法基本原理 1.概述 遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和...

    遗传算法(一)遗传算法的基本原理

    1.概述

    遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
    相关概念:(高中所学)
    基因型(genotype):性状染色体的内部表现;
    表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
    进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
    适应度(fitness):度量某个物种对于生存环境的适应程度。
    选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
    复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
    交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
    变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
    编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
    解码(decoding):基因型到表现型的映射。
    个体(individual):指染色体带有特征的实体;
    种群(population):个体的集合,该集合内个体数称为种群 的大小。

    2.遗传算法的步骤

    开始循环直至找到满意的解。

    1.评估每条染色体所对应个体的适应度。

    2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。

    3.抽取父母双方的染色体,进行交叉,产生子代。

    4.对子代的染色体进行变异。

    5.重复2,3,4步骤,直到新种群的产生。

    结束循环。
    在这里插入图片描述在这里插入图片描述

    3.遗传算法的具体过程

    为了让讲解更为简便,我们先来理解一下著名的组合优化问题「背包问题」。

    比如,你准备要去野游 1 个月,但是你只能背一个限重 30 公斤的背包。现在你有不同的必需物品,它们每一个都有自己的「生存点数」(具体在下表中已给出)。因此,你的目标是在有限的背包重量下,最大化你的「生存点数」。
    在这里插入图片描述
    3.1 初始化(编码)
    这里我们用遗传算法来解决这个背包问题。第一步是定义我们的总体。总体中包含了个体,每个个体都有一套自己的染色体。

    我们知道,染色体可表达为二进制数串,在这个问题中,1 代表接下来位置的基因存在,0 意味着丢失。(译者注:作者这里借用染色体、基因来解决前面的背包问题,所以特定位置上的基因代表了上方背包问题表格中的物品,比如第一个位置上是 Sleeping Bag,那么此时反映在染色体的『基因』位置就是该染色体的第一个『基因』。)

    在这里插入图片描述
    现在,我们将图中的 4 条染色体看作我们的总体初始值
    3.2 编码补充
    二进制编码
    二进制编码由二进制符号0和1所组成的二值符号集。
    格雷码
    格雷码编码是其连续的两个整数所对应的编码之间只有一个码位是不同的,其余码位完全相同。
    二进制码转为格雷码:异或运算:同则为0,异则为1。
    浮点编码法
    二进制编码虽然简单直观,但明显地。但是存在着连续函数离散化时的映射误差。个体长度较短时,可能达不到精度要求,而个体编码长度较长时,虽然能提高精度,但增加了解码的难度,使遗传算法的搜索空间急剧扩大。
    所谓浮点法,是指个体的每个基因值用某一范围内的一个浮点数来表示。编码长度等于决策变量的个数。 在浮点数编码方法中,必须保证基因值在给定的区间限制范围内,遗传算法中所使用的交叉、变异等遗传算子也必须保证其运算结果所产生的新个体的基因值也在这个区间限制范围内。
    符号编码法
    符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}。

    3.3 适应度函数
    接下来,让我们来计算一下前两条染色体的适应度分数。对于 A1 染色体 [100110] 而言,有:
    在这里插入图片描述
    类似地,对于 A2 染色体 [001110] 来说,有:
    在这里插入图片描述
    对于这个问题,我们认为,当染色体包含更多生存分数时,也就意味着它的适应性更强。因此,由图可知,染色体 1 适应性强于染色体 2。

    3.4 选择
    现在,我们可以开始从总体中选择适合的染色体,来让它们互相『交配』,产生自己的下一代了。这个是进行选择操作的大致想法,但是这样将会导致染色体在几代之后相互差异减小,失去了多样性。因此,我们一般会进行「轮盘赌选择法」(Roulette Wheel Selection method)。

    想象有一个轮盘,现在我们将它分割成 m 个部分,这里的 m 代表我们总体中染色体的个数。每条染色体在轮盘上占有的区域面积将根据适应度分数成比例表达出来。在这里插入图片描述
    基于上图中的值,我们建立如下「轮盘」。
    在这里插入图片描述
    现在,这个轮盘开始旋转,我们将被图中固定的指针(fixed point)指到的那片区域选为第一个亲本。然后,对于第二个亲本,我们进行同样的操作。有时候我们也会在途中标注两个固定指针,如下图:
    在这里插入图片描述
    通过这种方法,我们可以在一轮中就获得两个亲本。我们将这种方法成为「随机普遍选择法」(Stochastic Universal Selection method)。

    3.5 交叉
    在上一个步骤中,我们已经选择出了可以产生后代的亲本染色体。那么用生物学的话说,所谓「交叉」,其实就是指的繁殖。现在我们来对染色体 1 和 4(在上一个步骤中选出来的)进行「交叉」,见下图:
    在这里插入图片描述
    这是交叉最基本的形式,我们称其为「单点交叉」。这里我们随机选择一个交叉点,然后,将交叉点前后的染色体部分进行染色体间的交叉对调,于是就产生了新的后代。

    如果你设置两个交叉点,那么这种方法被成为「多点交叉」,见下图:
    在这里插入图片描述
    3.6变异
    如果现在我们从生物学的角度来看这个问题,那么请问:由上述过程产生的后代是否有和其父母一样的性状呢?答案是否。在后代的生长过程中,它们体内的基因会发生一些变化,使得它们与父母不同。这个过程我们称为「变异」,它可以被定义为染色体上发生的随机变化,正是因为变异,种群中才会存在多样性。

    下图为变异的一个简单示例:
    在这里插入图片描述
    变异完成之后,我们就得到了新为个体,进化也就完成了,整个过程如下图:
    在这里插入图片描述
    在进行完一轮「遗传变异」之后,我们用适应度函数对这些新的后代进行验证,如果函数判定它们适应度足够,那么就会用它们从总体中替代掉那些适应度不够的染色体。这里有个问题,我们最终应该以什么标准来判断后代达到了最佳适应度水平呢?

    一般来说,有如下几个终止条件: 1. 在进行 X 次迭代之后,总体没有什么太大改变。 2. 我们事先为算法定义好了进化的次数。 3. 当我们的适应度函数已经达到了预先定义的值。

    展开全文
  • 算法基本特征

    万次阅读 2017-09-27 09:37:34
    算法基本特征: 有限性:一个算法在执行有限步之后必须会终止。 确定性:一个算法的每个步骤都必须精确地定义,可以严格地、无歧义地执行。 输入:一个算法在运行之前赋给它的量,或在运行过程中动态地赋给它的...

    算法的基本特征:
    有限性:一个算法在执行有限步之后必须会终止。
    确定性:一个算法的每个步骤都必须精确地定义,可以严格地、无歧义地执行。

    输入:一个算法在运行之前赋给它的量,或在运行过程中动态地赋给它的量。

    输出:一个算法运行结束时的结果。

    有效性:一个算法在运行过程中,所有运算必须是充分基本的,是可行的,原则上人们可以用笔和纸在有限的时间内精确地完成这些运算。

    展开全文
  • 文章目录1.序2.动态规划的基本概念[^1]3.动态规划算法基本思想[^2]4....这篇文章主要介绍动态规划算法基本思想、使用动态规划算法求解问题的基本步骤、动态规划算法的两个基本要素以及一些经典的动态规划问题。...

    1.序

    近期笔者会写一些博客,与大家共同讨论一些经典的算法思想。这篇文章主要介绍动态规划算法的基本思想、使用动态规划算法求解问题的基本步骤、动态规划算法的两个基本要素以及一些经典的动态规划问题。

    2.动态规划的基本概念[^1]

    在学习动态规划之前,先思考这样一个问题:什么是动态规划?为什么叫动态规划?
    当读者在试图探索这个问题的时候,不可避免的要了解动态规划的产生背景。动态规划是由 Dynamic Programming 翻译过来的。动态规划的概念是由美国数学家R.E.Bellman等人提出的,应用于工程领域。
    动态规划是是求解多阶段决策过程(decision process)的最优化问题一种方法。

    所谓多阶段决策过程是指这样一类决策过程:它可以把一一个复杂问题按时间(或空间)分成若干个阶段,每个阶段都需要作出决策,
    以便得到过程的最优结局。由于在每阶段采取的决策是与时间有关的而且前一阶段采取的决策如何,不但与该阶段的经济效果有关,
    还影响以后各阶段的经济效果,可见这类多阶段决策问题是一个动态的问题,因此,处理的方法称为动态规划方法。然而,动态
    规划也可以处理一些本来与时间没有关系的静态模型,这只要在静态模型中人为地引入“时间”因素,分成时段,就可以把它看作
    是多阶段的动态模型,用动态规划方法去处理。
    

    简言之,多阶段决策过程是指这样的一类特殊的活动过程:问题可以按时间顺序分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列。
    下面举例说明什么是多阶段决策问题。
    例1(最短路线问题)在线路网络图1中,从A至E有一批货物需要调运。图上所标数字为各节点之间的运输距离,为使总运费最少,必须找出一条由A至E总里程最短的路线。
    在这里插入图片描述

    图1

    为了找到由A至E的最短线路,可以将该问题分成A—B—C—D—E 4个阶段,在每个阶段都需要作出决策,即在A点需决策下一步到B1还是到B2或B3;同样,若到达第二阶段某个状态,比如B1 ,需决定走向C1还是C2 ;依次类推,可以看出:各个阶段的决策不同,由A至E的路线就不同,当 从某个阶段的某个状态出发作出一个决策,则这个决策不仅影响到下一个阶段的距离,而且直接影响后面各阶段的行进线路。所以这类问题要求在各个阶段选择一个恰当的决策,使这些决策序列所决定的一条路线对应的总路程最短。

    3.动态规划算法的基本思想[^2]

    动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。
    在这里插入图片描述

    图2

    但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。
    如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。
    在这里插入图片描述

    图3

    4.动态规划的求解步骤[^2]

    a. 找出最优解的性质,并刻划其结构特征。
    b. 递归地定义最优值。
    c. 以自底向上的方式计算出最优值。
    d. 根据计算最优值时得到的信息,构造最优解

    5.动态规划算法的基本要素[^2]

    5.1 最优子结构

    • 矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质
    • 在分析问题的最优子结构性质时,所用的方法具有普遍性:首先假设由问题的最优解导出的子问题的解不是最优的,然后再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。
    • 利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。最优子结构是问题能用动态规划算法求解的前提。

    注意:同一个问题可以有多种方式刻划它的最优子结构,有些表示方法的求解速度更快(空间占用小,问题的维度低)

    5.2 重叠子问题

    • 递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。这种性质称为子问题的重叠性质。
    • 动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果。
    • 通常不同的子问题个数随问题的大小呈多项式增长。因此用动态规划算法只需要多项式时间,从而获得较高的解题效率。
      在这里插入图片描述
      图4

    6.一些经典的动态规划问题

    题目描述:
    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    

    示例 2:

    输入: "cbbd"
    输出: "bb"
    

    分析:
    一个问题要使用动态规划求解,一定要满足【最优子结构】,只有满足最优子结构,才能通过子问题的解 构造出 整个问题的解。

    在编码时,一般采用【备忘录】或 dp table来实现。
    最关键的要找出:该问题的递推关系式(状态转移方程)

    假设dp[i][j]=true,表示字符串s从s[i]到s[j]的子串为最长回文子串
    反之false.

    考虑 abcba 这个示例。如果我们已经知道 bca 是回文,那么要判断 abcba 是不是回文串,只需判断它的左首字母和右尾字母是否相等。这里左=右=a,因此abcba 是回文串

    从这里我们可以归纳出状态转移方程
    dp[i][j] = true
    前提是
    dp[i+1][j-1]为true,且 s[i] == s[j]

    #include <iostream>
    using namespace std;
    class MySolution {
    public:
        string longestPalindrome(string s) {
    
            int len = s.size();
            if (len < 2)
                return s;
            //bool dp[len][len];
            bool** dp;
            dp = new bool* [len];
            for (int i = 0; i < len; i++)
                dp[i] = new bool[len];//分配了len行len列的二维数组空间
        
            int max_len=1;//最大回文串长度
            int max_left;//最长回文串的起始位置
            for (int j = 0; j < len; j++)
            {
                for (int i = 0; i < j; i++)
                {
                    if (s[j] != s[i])
                        dp[i][j] = false;
                    else if (j - i < 3) // (j-1)-(i+1)+1< 2 即表明dp[i][j]是回文串
                        dp[i][j] = true;
                    else
                        dp[i][j] = dp[i + 1][j - 1];//s[i]==s[j]
                    if (j - i + 1 > max_len && dp[i][j])
                    {
                        max_len = j - i + 1;
                        max_left = i;
                    }
    
                }
            }
            return s.substr(max_left, max_len);
            // 用完要释放:
            for (int i = 0; i < len; i++)
            {
                delete[] dp[i]; 
                delete[]dp;
            }   
        }
    };
    int main()
    {
        MySolution sl;
        string s = sl.longestPalindrome("abcdedcabcdefggfedcba");
        cout << s << endl;
    }
    

    参考文献
    [1] 引用自百度文库https://wenku.baidu.com/view/c0f9fb156c175f0e7cd1377d.html
    [2]引用自老师的课件

    展开全文
  • 什么是算法算法有哪些特征

    万次阅读 2019-11-11 07:44:45
    什么是算法算法有哪些特征算法定义:为解决一个问题而采取的方法和步骤,称为“算法”。 算法五大特征: ①有穷性 ②确定性 ③有零个或多个输入 ④有一个或多个输出 ⑤有效性 ...

    什么是算法,算法有哪些特征?

    算法定义:为解决一个问题而采取的方法和步骤,称为“算法”。

    算法五大特征:

    ①有穷性

    ②确定性

    ③有零个或多个输入

    ④有一个或多个输出

    ⑤有效性

    展开全文
  • 单目标&多目标 灰狼算法算法讲解

    千次阅读 2019-10-05 11:38:03
    1. 灰狼算法思想 2. 单目标灰狼算法 3. 多目标灰狼算法
  • C语言算法基本特征

    千次阅读 2015-12-06 18:57:23
    一、 有穷性:一个算法必须在执行有限个操作步骤后终止。 二、 确定性:算法中每一步的含义必须是确切的,不可出现任何二义性。 三、 有效性:算法中的每一步操作都应该能有效执行,一个不可执行的操作是无效的,...
  • 详解遗传算法(含MATLAB代码)

    万次阅读 多人点赞 2019-05-29 11:30:47
    三、遗传算法基本流程及实现技术 3.1 遗传算法基本流程 3.2 遗传算法的实现技术 1.编码 2.适应度函数 3.选择算子 4.交叉算子 5.变异算子 6.运行参数 四、遗传算法基本原理 4.1 模式定理 4.2 积木块...
  • 遗传算法原理及算法实例

    万次阅读 多人点赞 2017-11-26 09:42:19
    遗传算法(GA)是一种元启发式自然选择的过程,属于进化算法(EA)大类。遗传算法通常是利用生物启发算子,如变异、交叉和选择来生成高质量的优化和搜索问题的解决方案。 借鉴生物进化理论,遗传算法将问题模拟成一...
  • 特征提取算法简单学习笔记

    万次阅读 2018-01-30 14:21:13
    特征提取:将原始特征转换为一组具有明显物理意义(Gabor、几何特征[角点、不变量]、纹理[LBP HOG])或者统计意义或核的特征 特征选择:从特征集合中挑选一组最具统计意义的特征,达到降维 我的理解: 特征提取:...
  • 目前推荐系统研宄的主要趋势是从单一的、独立的推荐系统算法逐渐向组合多种推荐算法形成混合式的综合推荐算法方向发展,越来越多的结合用户标签数据、社交网络数据、上下文信息、地理位置信息。群体推荐也成为一个...
  • 算法的主要特征

    千次阅读 2019-04-18 20:11:11
    一个算法应该具有以下五个重要的特征: 1,有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止; 2,确切性(Definiteness):算法的每一步骤必须有确切的定义; 3,输入项(Input):一个算法...
  • 算法基本特性

    千次阅读 2019-11-28 02:58:44
    算法和程序设计以及数据结构有着密切的相关。 算法是为了解决某一些特定类型的问题而设计的一个实现过程,算法有以下特性: 有穷性:一个算法必须在执行有穷步之后结束,并且每一步都在有穷时间内完成,不能无限的...
  • 图像识别算法

    万次阅读 多人点赞 2019-08-15 17:36:40
    图像特征提取是图像分析与图像识别的前提,它是将高维的图像数据进行简化表达最有效的方式,从一幅图像的的数据矩阵中,我们看不出任何信息,所以我们必须根据这些数据提取出图像中的关键信息,一些基本元件以及它们...
  • 算法的5个基本特性① 有输入。一个算法必须有0个或多个输入。它们是算法开始运算前给予算法的量。这些输入取自于特定的对象的集合。它们可以使用输入语句由外部提供,也可以使用赋值语句在算法内给定。② 有输出。一...
  • 机器学习算法 综述(入门)

    万次阅读 多人点赞 2019-06-16 21:59:28
    学习了一个学期机器学习算法,从什么都不懂到对十个机器学习算法有一定的了解,下面总结一下十大机器学习算法,从算法的概念、原理、优点、缺点、应用等方面来总结,如果有错误的地方,欢迎指出。 目录 1.决策树...
  • 特征检测与特征匹配算法简介

    万次阅读 2019-05-20 13:22:17
    特征检测 opencv可以检测图像的主要特征,然后提取这些特征,使其成为图像描述符。 ...大多数特征检测算法都会涉及图像的角点、边和斑点的识别。 Harris可用于识别角点。此函数可以很好的检...
  • 一、随机森林算法简介: 在机器学习中,随机森林是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而 "Random ...
  • 遗传算法特征选择的python实现

    千次阅读 热门讨论 2019-07-02 16:43:39
    遗传算法特征选择的基本原理是用遗传算法寻找一个最优的二进制编码, 码中的每一位对应一个特征, 若第i位为“1”, 则表明对应特征被选取, 该特征将出现在估计器中, 为“0”, 则表明对应特征未被选取,该特征将不出现在...
  • 特征匹配算法

    千次阅读 2020-06-03 16:51:21
    看论文《特征匹配算法研究及其在目标跟踪上的应用》,感谢! 特征匹配算法 目前 SIFT 算法和 ORB 算法获得了研究者的青睐,但是因为 SIFT 算法是对图像进行全局的特征点检测耗时较长,造成算法的运行速度慢,达不到...
  • 贪心算法基本要素

    万次阅读 多人点赞 2019-10-29 11:17:55
    本文着重讨论可以用贪心算法求解的问题的一般特征。 对于一个具体的问题,怎么知道是否可用贪心算法解此问题,以及能否得到问题的最优解呢? 这个问题很难给予肯定的回答。但是,从许多可以用贪心算法求解的问题中...
  • (一)人脸识别技术之人脸识别过程及识别算法简介

    万次阅读 多人点赞 2018-11-04 23:19:40
    5.1 20世纪的人脸识别:基于集合特征,基于模板匹配和子空间算法 (1) 子空间算法将人脸当成一个高维向量,将向量投影到低维空间中,投影之后得到的低维向量达到对不同的人具有良好的区分度,代表算法是Eigenface(PCA,...
  • SIFT算法原理

    万次阅读 多人点赞 2019-03-16 21:33:58
    SIFT算法 SIFT即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。 一、SIFT算法特点: 1、具有较好的稳定性和不变性,能够适应旋转、尺度...
  • 目录 1. 模拟退火算法实现...在本节按照基本实现步骤实现模拟退火算法, 对于模拟退火算法的高级封装(类封装), 可以参考模拟退火算法特征选择的python实现(二) 1. 模拟退火算法实现步骤 2. python实现 i...
  • 机器人控制算法

    千次阅读 多人点赞 2019-09-11 16:43:20
    机器人的算法大方向可以分为感知算法与控制算法,感知算法一般是环境感知、路径规划,而控制算法一般分为决策算法、运动控制算法。环境感知算法获取环境各种数据,通常指以机器人的视觉所见的图像识别等,当然还有...
  • 模式识别之特征提取算法

    千次阅读 2019-06-03 10:50:07
    说明:此处暂时简单介绍下各种特征提取算法,后续完善。 前言:模式识别中进行匹配识别或者分类器分类识别时,判断的依据就是图像特征。用提取的特征表示整幅图像内容,根据特征匹配或者分类图像目标。常见的特征...
  • 特征选择作为常见的降维方法是数据挖掘中的研究热点之一。特征选择时指从原始的特征集合中选取出以某种标准最优的特征子集。... 文章包含特诊选择的定义、4要素、算法分类以及常见的特征选择算法
  • 运动目标跟踪算法

    万次阅读 多人点赞 2019-02-17 12:53:17
    运动目标跟踪是视频监控系统中不可缺少的环节。在特定的场景中,有一些经典的算法可以实现比较好的目标跟踪效果。... 一般将目标跟踪分为两个部分:特征提取、目标跟踪算法。其中提取的目标特征大致可以分...
  • SIFT特征匹配算法介绍——寻找图像特征点的原理

    万次阅读 多人点赞 2017-06-26 15:35:15
    关于opencv的SIFT特征匹配算法原理的详细介绍,附有图文解析,希望能帮助到图像处理刚入门的朋友们(*^__^*) 嘻嘻……

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 289,686
精华内容 115,874
关键字:

属于算法基本特征的是