熟人免疫算法优化复杂网络(MATLAB)

熟人免疫算法是一种用于优化复杂网络的进化算法。它通过模拟熟人关系和免疫机制的思想来改进网络的性能。该算法首先随机生成一组个体作为初始种群,然后通过计算每个个体的适应度值来评估其优劣。接下来,通过选择、交叉和变异等操作,不断迭代更新种群,以期望获得更优的个体。

与传统的遗传算法不同,熟人免疫算法引入了熟人关系的概念。在选择操作中,除了考虑个体自身的适应度值,还考虑了其周围的熟人个体的贡献。这样可以增强种群中优秀个体的传播和保存,从而加速优化过程。

此外,熟人免疫算法还借鉴了免疫机制的思想。通过引入免疫操作,即将一些优秀个体标记为“免疫”个体,可以避免它们被过度交叉和变异而失去优势。这样可以提高算法的收敛性和稳定性。

熟人免疫算法通过结合熟人关系和免疫机制的思想,能够有效地优化复杂网络。它在解决实际问题中具有潜力,并且在网络优化领域有着广泛的应用前景。

主程序如下:

clc;close all;clear all;

disp('随机图生成策略1,2,3或4')

disp('1表示 与均匀随机数比较法,总共生成的边数为N*(N-1)/2*alph');

disp('2表示 概率排序法,总共生成的边数为N*(N-1)/2*alph,并以一定的较小的概率对边随机化重连');

disp('3表示 与均匀随机数比较,但不要求总共的边数为N*(N-1)/2*alph');

disp('4表示 赌轮法,总共生成的边数为N*(N-1)/2*alph');

pp=input('请输入随机图生成策略1,2,3或4:');

% N=input('网络图中节点的总数目N:');

% alph=input('网络图中边的平均连接度alph:  ');

% beta=input('表征边的平均长度的参数beta:  ');

N=100;

alph=0.25;

beta=0.3;

randData=rand(2,N)*1000;

x=randData(1,:);

y=randData(2,:);

p=lianjiegailv(x,y,alph,beta,N);

switch  pp

    case 1

        A=bian_lianjie1(p,N,alph);

    case 2

         relink=input('请输入边重新连接的概率:');

         A=bian_lianjie2(p,N,alph,relink);

    case 3

         A=bian_lianjie3(p,N,alph);

    case 4

         A=bian_lianjie4(p,N,alph);

    otherwise

         disp('The number pp you input is wrong');

         return;

end

plot(x,y,'r.','Markersize',18);

hold on;

for i=1:N

    for j=i+1:N

        if A(i,j)~=0

            plot([x(i),x(j)],[y(i),y(j)],'linewidth',1);

            hold on;

        end

    end

end

hold off

[C,aver_C]=Clustering_Coefficient(A);

[DeD,aver_DeD]=Degree_Distribution(A);

[D,aver_D]=Aver_Path_Length(A);  

 disp(['该随机图的边数为:',int2str(sum(sum(A))/2)]);

 disp(['该随机图的平均路径长度为:',num2str(aver_D)]);  %%输出该网络的特征参数

 disp(['该随机图的聚类系数为:',num2str(aver_C)]);

 disp(['该随机图的平均度为:',num2str(aver_DeD)]);  

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 该函数求解两节点连接边的概率

function p=lianjiegailv(x,y,alph,beta,N)

d=zeros(N);

for i=1:N

    for j=1:N

        d(i,j)=sqrt((x(i)-x(j))^2+((y(i)-y(j)))^2);

    end

end

L=max(max(d));

for i=1:N

    for j=1:N

        p(i,j)=alph*exp(-d(i,j)/beta/L);

    end

        p(i,i)=0;

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 生成机制1:与[0,1]内均匀随机数比较,若p(i,j)>random_data,则连接节点i,j.

% 直至总共生成的边数为N*(N-1)/2*alph

function A=bian_lianjie1(p,N,alph)   %  返回值D为邻接矩阵

A=zeros(N);num=0;

for k=1:inf

    for i=1:N

        for j=1:N

            random_data=rand(1,1);

            if p(i,j)>=random_data&A(i,j)==0

               A(i,j)=1;A(j,i)=1;

                num=num+1;

                if num>=N*(N-1)/2*alph

                   return ;

                end

            end

        end

    end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 生成机制2:将概率从大到小排序,连接概率排在前面的节点对,直至总共生成的边数为N*(N-1)/2*alph

%% 以一定的较小的随机随机重连,以实现一定程度的随机化。   有问题!!!!!!!!

function A=bian_lianjie2(p,N,alph,relink)

A=zeros(N);

p1=reshape(tril(p),[1,N*N]);

[p2,px]=sort(p1,'descend');

M=ceil(N*(N-1)/2*alph)

for k=1:M

    [m,n]=ind2sub(size(p),px(k));  %单下标索引换为双下标索引

    A(m,n)=1;A(n,m)=1;

end

[m,n]=find(tril(A));               %以一定的概率随机化重连

for i=1:length(m)

    p1=rand(1,1);

    if relink>p1                          %若给定的随机化概率大于生成的随机数,则进行重连。

         A(m(i),n(i))=0;A(n(i),m(i))=0;   %先断开原来的边,再随机选择一条边与之相连 

         A(m(i),m(i))=inf;

         n1=find(A(m(i),:)==0);     

         random_data=randint(1,1,[1,length(n1)]);

         nn=n1(random_data);

         A(m(i),nn)=1;A(nn,m(i))=1;

         A(m(i),m(i))=0;

    end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% 生成机制3:与[0,1]内均匀随机数比较,若p(i,j)>random_data,则连接节点i,j,

%% 但不要求总共的边数为N*(N-1)/2*alph

function A=bian_lianjie3(p,N,alph);    

A=zeros(N);

for i=1:N

    for j=1:N

         random_data=rand(1,1);

         if p(i,j)>=random_data&A(i,j)==0

            A(i,j)=1; A(j,i)=1;

         end

    end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%生成机制4:将概率归一化,利用赌轮法选择连接的边,直至生成边数为N*(N-1)/2*alph。

function A=bian_lianjie4(p,N,alph)

A=zeros(N);

p1=reshape(p,1,N*N)./sum(sum(p));  

pp=cumsum(p1);%求累计概率

k=0;

while  k<N*(N-1)/2*alph           %利用赌轮法选择一条边相连

     random_data=rand(1,1);

     aa=find(pp>=random_data);jj=aa(1); % 节点jj即为用赌轮法选择的节点

     j=ceil(jj/N);i=jj-(j-1)*N;             %把单下标索引变为双下标索引,或者用函数ind2sub(siz,IND)

    % [i,j=ind2sub(size(p),jj);

    if A(i,j)==0

        A(i,j)=1;A(j,i)=1;

        k=k+1;

    end  

end

程序结果如下: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439841.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Spring Boot和MyBatis常见的十道面试题

拦截器和过滤器有什么区别&#xff1f; 拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;都是用于在请求道道目标资源的之前或之后进行处理的组件。主要区别有以下几点&#xff1a; 依赖对象不同&#xff1a;过滤器是来时Servlet&#xff0…

c语言常量详解 全

c语言常量详解 全 一 常量的基本概念及分类二 常量的存储方式三 c语言常量和变量的具体区别四 字面常量详解4.1 常见类型的字面常量及其示例&#xff1a;4.2 字面常量的使用情况4.3 字面常量的优点 五 const 关键字常量详解5.1 const关键字在C语言中的使用情况&#xff1a;5.2 …

温酒读Qt:QObject中篇2 ——欲遮还羞的 QObjectPrivate

《妙法莲华经》曰&#xff1a;“佛道长远&#xff0c;久受勤苦&#xff0c;乃可得成。” 世事修炼&#xff0c;莫不如是&#xff0c;日拱一卒无有尽&#xff0c;功不唐捐终入海。 传送门: 《温酒读Qt&#xff1a;QObject 序篇》 《温酒读Qt&#xff1a;QObject中篇1—— Q_OBJ…

设计模式——模板方法模式(Template Method Pattern)

概述 模板方法模式&#xff1a;定义一个操作中算法的框架&#xff0c;而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术&#xff0c;它是一种类行为型模式。模板方法模式是结…

Android中下载 HAXM 报错 Intel® HAXM installation failed,如何解决?

最近在搭建 Flutter 环境&#xff0c;但是在 Android Studio 中安装 Virtual Device 时&#xff0c;出现了一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructio…

1.25时间序列分析,FB先知模型、简要傅里叶变化解决周期性变化,实例步骤

目录 FB概念 ​编辑 GEOGEBRA可视化傅里叶​编辑 先知模型步骤 财务数据要考虑到可解释性 FB模型概念 可以用傅里叶级数来描述周期性变化的因素 GEOGEBRA可视化傅里叶 先知模型步骤

安装好IntelliJ IDEA点击无反应,如何解决配置文件不一致导致的启动问题

在我们的开发生涯中&#xff0c;遇到IDE工具出现问题是在所难免的。最令人头疼的莫过于&#xff0c;你的IDEA(IntelliJ IDEA)无法启动&#xff0c;而且没有任何错误提示。这篇文章将详细讲解如何解决IntelliJ IDEA 2023.3.3版本启动失败的问题&#xff0c;这个问题可能也适用于…

如何让wordpress首页只显示某一篇文章全部内容?在您的主页显示选择

大多数WordPress站点首页默认都是显示最新发布的文章列表&#xff0c;不过有些站点比较特殊&#xff0c;只想显示某一篇文章的全部内容&#xff0c;那么应该怎么设置呢&#xff1f; 其实&#xff0c;WordPress后台 >> 设置 >> 阅读 >> 在“您的主页显示”中…

OpenHarmony RK3568 启动流程优化

目前rk3568的开机时间有21s&#xff0c;统计的是关机后从按下 power 按键到显示锁屏的时间&#xff0c;当对openharmony的系统进行了裁剪子系统&#xff0c;系统app&#xff0c;禁用部分服务后发现开机时间仅仅提高到了20.94s 优化微乎其微。在对init进程的log进行分析并解决其…

解决Linux环境下gdal报错:ERROR 4: `/xxx.hdf‘ not recognized as a supported file format.

网上查了一堆资料&#xff0c;五花八门&#xff0c;总结了一下可能的原因&#xff1a; ① gdal不支持该格式 使用命令“gdalinfo --formats” 即可查看当前环境中的gdal所能支持的数据格式。如下图&#xff08;没截完整&#xff0c;下面还有一大串&#xff09;。 这个是很常见…

分布式虚拟文件系统,如何实现多种存储系统的融合

随着大数据技术和人工智能技术的发展&#xff0c;各种框架应运而生&#xff0c;比如大数据领域中的MapReduce和Spark&#xff0c;人工智能领域中的TensorFlow和PyTorch等。为了给不同的计算框架提供存储服务&#xff0c;存储的服务类型也是很多&#xff0c;常见的如AWS的S3存储…

Docker(第三部分)

1&#xff0c;Docker复杂安装说明 今天的优势会被明天趋势所取代 一切在云端 安装mysql主从复制 主从复制原理&#xff0c;默认你懂 主从搭建步骤 1&#xff0c;新建主从服务器容器实例3307 docker run -p 3307:3306 --name mysql-master\ -v /mydata/mysql-master/log:…