基于Matlab实现嗅觉优化算法的示例代码

目录
  • 1.概述
  • 2.37 个 CEC 基准测试函数代码
  • 3.F1 Matlab代码仿真

1.概述

嗅觉剂优化是一种新颖的优化算法,旨在模仿气味分子源尾随的药剂的智能行为。该概念分为三个阶段(嗅探,尾随和随机)是独特且易于实现的。此上传包含 SAO 在 37 个 CEC 基准测试函数上的实现。

2.37 个 CEC 基准测试函数代码

function [lb,ub,dim,fobj] = Select_Function(F)

switch F
    case 'F1'
        %Admijan
        fobj = @F1;
        lb=[-1 -1];
        ub=[2 1];
        dim=2;
      case 'F2'
        %Beale
        fobj = @F2;
        dim=2;
        lb=-4.5*ones(1,dim);
        ub=4.5*ones(1,dim);
        case 'F3'
       %Bird
        fobj = @F3;
        dim=2;
        lb=-2*pi*ones(1,dim);
        ub=2*pi*ones(1,dim);
         case 'F4'
       %Bohachevsky
        fobj = @F4;
        dim=2;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F5'
%         Booth
        fobj = @F5;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F6'
       %Branin RCOS1
        fobj = @F6;
        lb=[-5,0];
        ub=[10, 15];
        dim=2;
    case 'F7'
        %Branin RCOS2
        fobj = @F7;
        dim=2;
        lb=-5*ones(1,dim);
        ub=15*ones(1,dim);
    case 'F8'
        %Brent
         fobj = @F8;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F9'
        %Bukin F2
         fobj = @F9;
        dim=2;
        lb=[-15 -3];
        ub=[-5 3];
      case 'F10'
        %six-hump
         fobj = @F10;
        dim=2;
        lb=-5*ones(1,dim);
        ub=5*ones(1,dim);
    case 'F11'
        %Chichinadze
        fobj = @F11;
        dim=2;
        lb=-30*ones(1,dim);
        ub=30*ones(1,dim);
   case 'F12'
        %Deckkers-Aarts
        fobj = @F12;
        dim =2;
        lb=-20*ones(1,dim);
        ub=20*ones(1,dim);
    case 'F13'
        %Easom
        dim=2;
        fobj=@F13;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F14'
        %Matyas
        fobj = @F14;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
     case 'F15'
        %McComick
        fobj = @F15;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F16'
        %Michalewicz2
        fobj = @F16;
        dim=2;
        lb=0*ones(1,dim);
        ub=pi*ones(1,dim);
     case 'F17'
        %Quadratic
        fobj = @F17;
        dim=2;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F18'
        %Schaffer
        dim=2;
        fobj = @F18;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F19'
        %StyblinskiTang
        fobj = @F19;
        dim=2;
        lb=-5*ones(1,dim);
        ub=5*ones(1,dim);
     case 'F20'
        %Box-Betts
        fobj = @F20;
        dim=3;
        lb=[0.9 9 0.9];
        ub=[1.2 11.2 1.2];
    case 'F21'
        %Colville
        fobj = @F21;
        dim=4;
        lb=-1*ones(1,dim);
        ub=1*ones(1,dim);
    case 'F22'
        %Csendes
        fobj = @F22;
        dim=4;
        lb=-1*ones(1,dim);
        ub=1*ones(1,dim);
    case 'F23'
       %  Michalewicz 5
        fobj = @F23;
        dim=5;
        lb=0*ones(1,dim);
        ub=pi*ones(1,dim);
    case 'F24'
        %Miele Cantrell
        dim=4;
        fobj = @F24;
        lb=-1*ones(1,dim);
        ub=1*ones(1,dim);
    case 'F25'
        % Step
        fobj = @F25;
        dim=5;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F26'
        %Michalewicz
        fobj = @F26;
         dim=10;
        lb=0*ones(1,dim);
        ub=pi*ones(1,dim);
    case 'F27'
        %Shubert
        fobj = @F27;
        dim=5;
        lb=-10*ones(1,dim);
        ub=10*ones(1,dim);
    case 'F28'
        %Ackley
        dim=30;
        fobj = @F28;
        lb=-32*ones(1,dim);
        ub=32*ones(1,dim);
    case 'F29'
        %Brown
        fobj = @F29;
        dim=30;
        lb=-1*ones(1,dim);
        ub=4*ones(1,dim);
    case 'F30'
        %Ellipsoid
        dim=2;
        fobj = @F30;
        lb=-5.12*ones(1,dim);
        ub=5.12*ones(1,dim);
    case 'F31'
        % Grienwank
        fobj = @F31;
        dim=30;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F32'
        %Mishra
        fobj = @F32;
        dim=30;
        lb=0*ones(1,dim);
        ub=1*ones(1,dim);
    case 'F33'
        %Quartic
        dim=30;
        fobj = @F33;
        lb=-1.28*ones(1,dim);
        ub=1.28*ones(1,dim);
    case 'F34'
        %Rastrigin
        fobj = @F34;
        dim=30;
        lb=-5.12*ones(1,dim);
        ub=5.12*ones(1,dim);
    case 'F35'
        %Rosenbrock
        fobj = @F35;
        dim=30;
        lb=-30*ones(1,dim);
        ub=30*ones(1,dim);
    case 'F36'
     %     Salomon
        fobj = @F36;
        dim=30;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
    case 'F37'
        %Sphere
        fobj = @F37;
        dim=30;
        lb=-100*ones(1,dim);
        ub=100*ones(1,dim);
end
end

function o=F1(x)
% Adjiman
 o=(cos(x(:,1)).*sin(x(:,2))-x(:,1)./(x(:,2).^2+1));

end
function o=F2(x)
  %     Beale
   o=(1.5-x(:,1)+(x(:,1).*(x(:,2)))).^2+(2.25-x(:,1)+(x(:,1).*(x(:,2)).^2)).^2+...
    (2.625-x(:,1)+(x(:,1).*(x(:,2)).^3)).^2;
end
function o=F3(x)
    %     Bird
    o=sin(x(:,2)).*(exp(1-cos(x(:,1))).^2)+cos(x(:,1)).*(exp(1-sin(x(:,2))).^2)...
    +(x(:,1)+(x(:,2))).^2;
end

function o=F4(x)
    %     Bohachevsky
    W=0;
    [a,dim]=size(x);
    for i=1:dim-1
        W=W+x(:,i).^2+2.*x(:,i+1).^2-0.3.*cos(3.*pi.*x(:,i+1))-0.4.*cos(4.*pi.*(x(:,i+1)))+0.7;
    end
    o=W;
end

function o=F5(x)
        %Booth
    o=(x(:,2)-(5.1*x(:,1).^2/(4*pi*2))+(5*x(:,1)/pi)-6).^2+...
        10*(1-1/(8*pi)).*cos(x(:,1))+10;
end

function o=F6(x)
    %     Branin RCOS 1
    o=(x(:,2)-(5.1*x(:,1).^2/(4*pi*2))+(5*x(:,1)/pi)-6).^2+...
        10*(1-1/(8*pi)).*cos(x(:,1))+10;
end

function o=F7(x)
%     Branin RCOS 2
    a=1; b=5.1/(4*pi^2); c=5/pi; d=6; e=10; g=1/(8*pi);
    f1=a*(x(:,2)-b*x(:,1).^2+c*x(:,1)-d).^2;
    f2=e*(1-g)*cos(x(:,1)).*cos(x(:,2));
    f3=log(x(:,1).^2+x(:,2)+1);
    o=-1/(f1+f2+f3+e);
end
function o=F8(x)
%Brent
    o=(x(:,1)+10).^2+(x(:,1)+10).^2+exp(-x(:,1).^2-x(:,2).^2);
end
function o=F9(x)
  %Bukin F2
o=(abs(x(:,1)-0.01.*x(:,2).^2))+0.01.*abs(x(:,2)+10);
end
function o=F10(x)
%Camel Six Hump
    o=(4-2.1*x(:,1).^2+(x(:,1).^4)/3).*x(:,1).^2+x(:,1).*x(:,2)+...
        (4*x(:,2).^2-4).*x(:,2).^2;
end
function o=F11(x)
        %Chichinadze
    o=x(:,1).^2-12*x(:,1)+11+10*cos(pi*x(:,1)/2)+8*sin(5*pi*x(:,1)/2)-...
        ((1/5)^0.5)*exp(-0.5*(x(:,2)-0.5).^2);
end

function o=F12(x)
%     Deckkers-Aarts
    o=10^5*x(:,1).^2+x(:,2).^2-(x(:,1).^2+x(:,2).^2).^2+...
        10^(-5)*(x(:,1).^2+x(:,2).^2).^4;
end
function o = F13(x)
% Easom
o=-cos(x(:,1)).*cos(x(:,2)).*exp(-(x(:,1)-pi).^2-(x(:,2)-pi).^2);      

end
function o=F14(x)
    %     Evaluate Matyas
    o=0.26*(x(:,1).^2+x(:,2).^2)-0.48*x(:,1).*x(:,2);
end
function o=F15(x)
  %     McCormick
o=mccormick(x);%
end
function o=F16(x)
    %  Michalewicz2
    [~,d]=size(x);
    W=0;
    for i=1:d
        W=sin(x(:,1)).*sin(i*x(:,i).^2/pi).^2*d;
    end
    o=-W;
end
function o=F17(x)
   %   Quadratic
    o=-3803.84-138.08*x(:,1)-232.92*x(:,2)+128.08*x(:,1).^2+203.64*x(:,2).^2+182.25*x(:,1).*x(:,2);
end
function o=F18(x)
        %     Evaluate Schaffer
        [~,d]=size(x);
        w=0;
        for i=1:d-1
            w=w+((x(i).^2+x(i+1).^2).^.5).*(sin(50.*(x(i).^2+x(i+1).^2).^0.1)).^2;
        end
        o=w;
end
    function o=F19(x)
    %  Styblinki's Tang
    [~,d]=size(x);
      W=0;
      for i=1:d
          W=W+(x(:,i).^4-16.*x(:,i).^2+5.*x(:,i));
      end
      o=W.*0.5;
    end
    function o=F20(x)
        % Box-Betts
        [~,d]=size(x);
    W=0;
    for i=1:d
        g=exp(-0.1.*(i+1)).*x(:,1)-exp(-0.1.*(i+1)).*x(:,2)-((exp(-0.1.*(i+1)))-exp(-(i+1)).*x(:,3));
        W=W+g.^2;
    end
    o=W;
    end
    function o=F21(x)
    %     Colville
    o=100*(x(:,1)-x(:,2).^2).^2+(1-x(:,1)).^2+90*(x(:,4)-x(:,3).^2).^2+...
    (1-x(:,3)).^2+10.1*((x(:,2)-1).^2+(x(:,4)-1).^2)+...
    19.8*(x(:,2)-1).*(x(:,4)-1);
    end
    function o=F22(x)
        %     Csendes
        [~,d]=size(x);
    aa=0;
    for i=1:d
        aa=aa+x(:,i).^6.*(2+sin(1/x(:,i)));
    end
    o=aa;
    end
    function o=F23(x)
            % Michalewicz 5
            [~,d]=size(x);
    W=0;
    for i=1:d
        W=sin(x(:,1)).*sin(i*x(:,i).^2/pi).^2*d;
    end
    o=-W;
    end
    function o=F24(x)
 %Miele Cantrell
    o=(exp(-x(:,1))-x(:,2)).^4+100*(x(:,2)-x(:,3)).^6+...
        (tan(x(:,3)-x(:,4))).^4+x(:,1).^8;
    end
    function o=F25(x)
        %     Evaluate Step
        [~,d]=size(x);
    W=0;
    for i=1:d
        W=W+(floor(x(:,i)+0.5)).^2;
    end
    o=W;
    end

    function o=F26(x)
        %     Evaluate Michalewicz 10
        [~,d]=size(x);
        W=0;
    for i=1:d
        W=sin(x(:,1)).*sin(i*x(:,i).^2/pi).^2*d;
    end
    o=-W;
    end
    function o=F27(x)
%     shubert
        [~,d]=size(x);
        s1=0;
        s2=0;
        for i = 1:d
             s1 = s1+i*cos((i+1)*x(1)+i);
             s2 = s2+i*cos((i+1)*x(2)+i);
        end
        o = s1*s2;
    end
% F28--Ackley
function o = F28(x)
dim=size(x,2);
o=-20*exp(-.2*sqrt(sum(x.^2)/dim))-exp(sum(cos(2*pi.*x))/dim)+20+exp(1);
end
    function o=F29(x)
    [~,d]=size(x);
    %     Brown
    a=0;
    for i=1:d-1
        a=(x(:,i).^2).^(x(:,i+1)+1)+(x(:,i+1).^2).^(x(:,i).^2+1);
    end
    o=a;
    end
    function o=F30(x)
            %     Ellipsoid
     [~,d]=size(x);
        W=0;
        for i=1:d
            W=W+i.*x(:,1).^2;
        end
        o=W;
    end
    %Grienwank
    function o=F31(x)
    o=griewank(x);
    end
    function o=F32(x)
        %      Mishra
        [~,d]=size(x);
    a=0;
    for i=1:d-1
        a=a+x(:,i);
    end
    aa=d-a;
    b=0;
    for j=1:d-1
        b=b+x(:,j);
    end
    W=abs((1+d-b).^aa);
    o=W;
    end
% --Quartic
function o = F33(x)
dim=size(x,2);
o=sum([1:dim].*(x.^4))+rand;
end
%Rastrigin
    function o=F34(x)
    o=rastrigin(x);
    end
% Rosenbrock
function o = F35(x)
dim=size(x,2);
o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2);
end
    function o=F36(x)
%     salomon
    x2 = x.^2;
    sumx2 = sum(x2, 2);
    sqrtsx2 = sqrt(sumx2);
    o = 1 - cos(2 .* pi .* sqrtsx2) + (0.1 * sqrtsx2);
    end
function o = F37(x)
%Sphere
o=sum(x.^2);
end

function o=Ufun(x,a,k,m)
o=k.*((x-a).^m).*(x>a)+k.*((-x-a).^m).*(x<(-a));
end

3.F1 Matlab代码仿真

到此这篇关于基于Matlab实现嗅觉优化算法的示例代码的文章就介绍到这了,更多相关Matlab嗅觉优化算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python&Matlab实现灰狼优化算法的示例代码

    目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 1 灰狼优化算法基本思想 灰狼优化算法是一种群智能优化算法,它的独特之处在于一小部分拥有绝对话语权的灰狼带领一群灰狼向猎物前进.在了解灰狼优化算法的特点之前,我们有必要了解灰狼群中的等级制度. 灰狼群一般分为4个等级:处于第一等级的灰狼用α表示,处于第

  • 利用Matlab实现迭代适应点算法

    目录 1.算法描述 2.工具函数 3.函数调用 4.优势与不足 道格拉斯-普克算法(Douglas–Peucker algorithm,亦称为拉默-道格拉斯-普克算法.迭代适应点算法.分裂与合并算法)是将曲线近似表示为一系列点,并减少点的数量的一种算法.它的优点是具有平移和旋转不变性,给定曲线与阈值后,抽样结果一定. 1.算法描述 1.在曲线首尾两点间虚连一条直线,求出其余各点到该直线的距离. 2.选其最大者与阈值相比较,若大于阈值,则离该直线距离最大的点保留,否则将直线两端点间各点全部舍去.

  • Matlab实现遗传算法的示例详解

    目录 1算法讲解 1.1何为遗传算法 1.2遗传算法流程描述 1.3关于为什么要用二进制码表示个体信息 1.4目标函数值与适应值区别 1.5关于如何将二进制码转化为变量数值 1.6关于代码改进 2MATLAB自带ga函数 2.1问题描述 2.2自带函数使用 3自编遗传算法各部分代码及使用 3.1代码使用 3.2Genetic1--主函数 3.3PI(PopulationInitialize)--产生初始种群 3.4Fitness--计算目标函数值 3.5FitnessF--计算适应值 3.6Tr

  • Python和Matlab实现蝙蝠算法的示例代码

    目录 1前言 2 蝙蝠算法原理细讲 3 详细步骤 4Python实现 4.1代码 4.2结果 5Matlab实现 5.1 代码 5.2 结果 5.3 展望 1 前言 蝙蝠算法是2010年杨教授基于群体智能提出的启发式搜索算法,是一种搜索全局最优解的有效方法.该算法基于迭代优化,初始化为一组随机解,然后迭代搜寻最优解,且在最优解周围通过随机飞行产生局部新解,加强局部搜索速度.该算法具有实现简单.参数少等特点. 该算法主要用于目标函数寻优,基于蝙蝠种群利用产生的声波搜索猎物和控制飞行方向的特征来实现

  • 基于Matlab实现鲸鱼优化算法的示例代码

    目录 1.鲸鱼优化算法建模 1.1 包围猎物 1.2 螺旋狩猎 1.3 搜索猎物 1.4 算法流程图 2.Matlab代码实现 2.1 结果 2.2 代码 1.鲸鱼优化算法建模 鲸鱼优化算法(WOA)是澳大利亚学者Mirjaili等于2016年提出的群体智能优化算法,根据座头鲸的捕猎行为实现优化搜索的目的.其中,每个鲸鱼可以看作一个粒子,每个粒子作为不同的决策变量.WOA的实现过程主要包括包围猎物.螺旋狩猎和随机搜索3个阶段,其数学模型如下: 1.1 包围猎物 1.2 螺旋狩猎 1.3 搜索猎物

  • Python&Matlab实现蚂蚁群算法求解最短路径问题的示例

    目录 1知识点 1.1 蚁群算法步骤 1.2 蚁群算法程序 2蚂蚁算法求解最短路径问题——Python实现 2.1源码实现 2.2 ACA_TSP实现 3 蚂蚁算法求解最短路径问题——Matlab实现 3.1流程图 3.2代码实现 3.3结果 1 知识点 详细知识点见:智能优化算法—蚁群算法(Python实现) 我们这一节知识点只讲蚁群算法求解最短路径步骤及流程. 1.1 蚁群算法步骤 设蚂蚁的数量为m,地点的数量为n,地点i与地点j之间相距Dij,t时刻地点i与地点j连接的路径上的信息素浓度为

  • 基于Matlab实现野狗优化算法的示例代码

    目录 1.概述 2.捕食过程的数学模型 2.1 种群初始化 2.2 群体攻击过程 2.3 迫害攻击过程 2.4 野狗的存活率 3.Matlab代码实现 3.1 代码 3.2 结果 1.概述 野狗优化算法(Dingo Optimization Algorithm, DOA)模仿澳大利亚野狗的社交行为.DOA算法的灵感来源于野狗的狩猎策略,即迫害攻击.分组策略和食腐行为.为了提高该方法的整体效率和性能,在DOA中制定了三种与四条规则相关联的搜索策略,这些策略和规则在搜索空间的强化(开发)和多样化(探

  • Java编程基于快速排序的三个算法题实例代码

    快速排序原理简介 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的.快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数.同时采用"分而治之"的思想,把大的拆分为小的,小的拆分为更小的,其原理如下:对于给定的一组记录,选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,

  • 如何基于layui的laytpl实现数据绑定的示例代码

    想了半天才想起自己园子的登录密码.可想而知,多长时间没登录了 正文 一开始用layui做了几个管理系统,所以用起来觉得确实很容易上手,管理后台最常用的就是form和table以及弹窗类.layui提供的form table layer已经是很简洁好用了,抛开底层的封装不说,给我们展现出来的使用方法我觉得是非常简化了.管理用到的除了form table layer之外,经常会有一些统计数据展示或者详情页这种内容展示.那么一些用到的统计数据(除图表),如文字统计型数据展示.这个时候,用layui的基

  • Java实现8种排序算法的示例代码

    冒泡排序 O(n2) 两个数比较大小,较大的数下沉,较小的数冒起来. public static void bubbleSort(int[] a) { //临时变量 int temp; //i是循环次数,也是冒泡的结果位置下标,5个数组循环5次 for (int i = 0; i < a.length; i++) { //从最后向前面两两对比,j是比较中下标大的值 for (int j = a.length - 1; j > i; j--) { //让小的数字排在前面 if (a[j] <

  • JAVA用递归实现全排列算法的示例代码

    求一个n阶行列式,一个比较简单的方法就是使用全排列的方法,那么简述以下全排列算法的递归实现. 首先举一个简单的例子说明算法的原理,既然是递归,首先说明一下出口条件.以[1, 2]为例 首先展示一下主要代码(完整代码在后面),然后简述 //对数组array从索引为start到最后的元素进行全排列 public void perm(int[]array,int start) { if(start==array.length) { //出口条件 for(int i=0;i<array.length;i

  • Android多边形区域递归种子填充算法的示例代码

    平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界(也可以是没有边界,只是给出指定颜色),要求将边界范围内的所有象素单元都修改成指定的颜色(也可能是图案填充).区域填充中最常用的是多边形填色,本文中我们就讨论几种多边形区域填充算法. 一.种子填充算法(Seed Filling) 如果要填充的区域是以图像元数据方式给出的,通常使用种子填充算法(Seed Filling)进行区域填充.种子填充算法需要给出图像数据的区域,以及区域内的一个点,这种算法比较适合人机交互方式

  • C++实现顺序排序算法简单示例代码

    本文实例讲述了最直接的顺序排序法VC++示例代码,还记得以前上学时候这是计算机的必考题,而且在排序算法中,顺序排序似乎是最简单的了,也是最容易掌握的.现在列出来让大家重新回顾一下! 具体代码如下: //顺序排序 void InsertSort(int r[], int n){ for (int i=2; i<n; i++){ r[0]=r[i]; //设置哨兵 for (int j=i-1; r[0]<r[j]; j--) //寻找插入位置 r[j+1]=r[j]; //记录后移 r[j+1]

  • 基于MATLAB神经网络图像识别的高识别率代码

    MATLAB神经网络图像识别高识别率代码 I0=pretreatment(imread('Z:\data\PictureData\TestCode\SplitDataTest\0 (1).png')); I1=pretreatment(imread('Z:\data\PictureData\TestCode\SplitDataTest\1 (1).png')); I2=pretreatment(imread('Z:\data\PictureData\TestCode\SplitDataTest\

  • 用python实现k近邻算法的示例代码

    K近邻算法(或简称kNN)是易于理解和实现的算法,而且是你解决问题的强大工具. 什么是kNN kNN算法的模型就是整个训练数据集.当需要对一个未知数据实例进行预测时,kNN算法会在训练数据集中搜寻k个最相似实例.对k个最相似实例的属性进行归纳,将其作为对未知实例的预测. 相似性度量依赖于数据类型.对于实数,可以使用欧式距离来计算.其他类型的数据,如分类数据或二进制数据,可以用汉明距离. 对于回归问题,会返回k个最相似实例属性的平均值.对于分类问题,会返回k个最相似实例属性出现最多的属性. kNN

  • Java实现高效随机数算法的示例代码

    前言 事情起源于一位网友分享了一个有趣的面试题: 生成由六位数字组成的ID,要求随机数字,不排重,不可自增,且数字不重复.ID总数为几十万. 初次解答 我一开始想到的办法是 生成一个足够大的ID池(其实就是需要多少就生成多少) 对ID池中的数字进行随机排序 依次消费ID池中的数字 可惜这个方法十分浪费空间,且性能很差. 初遇梅森旋转算法 后面咨询了网友后得知了一个高效的随机数算法:梅森旋转(Mersenne Twister/MT).通过搜索资料得知: 梅森旋转算法(Mersenne twiste

  • python 实现A*算法的示例代码

    A*作为最常用的路径搜索算法,值得我们去深刻的研究.路径规划项目.先看一下维基百科给的算法解释:https://en.wikipedia.org/wiki/A*_search_algorithm A *是最佳优先搜索它通过在解决方案的所有可能路径(目标)中搜索导致成本最小(行进距离最短,时间最短等)的问题来解决问题. ),并且在这些路径中,它首先考虑那些似乎最快速地引导到解决方案的路径.它是根据加权图制定的:从图的特定节点开始,它构造从该节点开始的路径树,一次一步地扩展路径,直到其一个路径在预定

随机推荐

其他