蚁群算法优化

%%%%%%%%%%%%蚁群算法解决 TSP 问题%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
m = 50; %蚂蚁个数
Alpha = 1; %信息素重要程度参数
Beta = 5; %启发式因子重要程度参数
Rho = 0.1; %信息素蒸发系数
G = 200; %最大迭代次数
Q = 100; %信息素增加强度系数
C = [1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;...
    3238 1229;4196 1044;4312 790;4386 570;3007 1970;2562 1756;...
    2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;...
    3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2376;...
    3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;...
    2370 2975]; %31 个省会城市坐标
%%%%%%%%%%%%%%%第一步:变量初始化%%%%%%%%%%%%%%
n = size(C,1); %n 表示问题的规模(城市个数)
D = zeros(n,n); %D 表示两个城市距离间隔矩阵
for i = 1:n
    for j = 1:n
        if i ~= j
            D(i,j) = ((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;
        else
            D(i,j) = eps;
        end
        D(j,i) = D(i,j);
    end
end
Eta = 1./D; %Eta 为启发因子,这里设为距离的倒数
Tau = ones(n,n); %Tau 为信息素矩阵
Tabu = zeros(m,n); %存储并记录路径的生成
NC = 1; %迭代计数器
R_best = zeros(G,n); %各代最佳路线
L_best = inf.*ones(G,1); %各代最佳路线的长度
figure(1); %优化解
while NC <= G
    %%%%%%%%%%第二步:将 m 只蚂蚁放到 n 个城市上%%%%%%%%%%
    Randpos = [];
    for i = 1:(ceil(m/n))
        Randpos = [Randpos,randperm(n)];
    end
    Tabu(:,1) = (Randpos(1,1:m))';
    %%%第三步:m 只蚂蚁按概率函数选择下一座城市,完成各自的周游%%%%
    for j = 2:n
        for i = 1:m
            visited = Tabu(i,1:(j-1)); %已访问的城市
            J = zeros(1,(n-j+1)); %待访问的城市
            P = J; %待访问城市的选择概率分布
            Jc = 1;
            for k = 1:n
                if length(find(visited==k))==0
                    J(Jc) = k;
                    Jc = Jc+1;
                end
            end
            %%%%%%%%%%%计算待选城市的概率分布%%%%%%%%%%%
            for k = 1:length(J)
                P(k) = (Tau(visited(end),J(k))^Alpha)...
                    *(Eta(visited(end),J(k))^Beta);
            end
            P = P/(sum(P));
            %%%%%%%%%%%按概率原则选取下一个城市%%%%%%%%%
            Pcum = cumsum(P);
            Select = find(Pcum >= rand);
            to_visit = J(Select(1));
            Tabu(i,j) = to_visit;
        end
    end
    if NC >= 2
        Tabu(1,:) = R_best(NC-1,:);
    end
    %%%%%%%%%%%%%第四步:记录本次迭代最佳路线%%%%%%%%%%
    L = zeros(m,1);
    for i = 1:m
        R = Tabu(i,:);
        for j = 1:(n-1)
            L(i) = L(i)+D(R(j),R(j+1));
        end
        L(i) = L(i)+D(R(1),R(n));
    end
    L_best(NC) = min(L);
    pos = find(L==L_best(NC));
    R_best(NC,:) = Tabu(pos(1),:);
    %%%%%%%%%%%%%%%第五步:更新信息素%%%%%%%%%%%%%
    Delta_Tau = zeros(n,n);
    for i = 1:m
        for j = 1:(n-1)
            Delta_Tau(Tabu(i,j),Tabu(i,j+1)) = ...
                Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);
        end
        Delta_Tau(Tabu(i,n),Tabu(i,1)) = ...
            Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);
    end
    Tau = (1-Rho).*Tau+Delta_Tau;
    %%%%%%%%%%%%%%%第六步:禁忌表清零%%%%%%%%%%%%%
    Tabu = zeros(m,n);
    %%%%%%%%%%%%%%%%%历代最优路线%%%%%%%%%%%%%%%
    for i = 1:n-1
        plot([ C(R_best(NC,i),1), C(R_best(NC,i+1),1)],...
            [C(R_best(NC,i),2), C(R_best(NC,i+1),2)],'bo-');
        hold on;
    end
    plot([C(R_best(NC,n),1), C(R_best(NC,1),1)],...
        [C(R_best(NC,n),2), C(R_best(NC,1),2)],'ro-');
    title(['优化最短距离:',num2str(L_best(NC))]);
    hold off;
    pause(0.005);
    NC = NC+1;
end
%%%%%%%%%%%%%%%%%第七步:输出结果%%%%%%%%%%%%%%
Pos = find(L_best==min(L_best));
Shortest_Route = R_best(Pos(1),:); %最佳路线
Shortest_Length = L_best(Pos(1)); %最佳路线长度
figure(2),
plot(L_best)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark运行架构

目录 1 运行架构 2 核心组件 2.1 Driver 2.2 Executor 2.3 Master & Worker 2.4 ApplicationMaster 3 核心概念 3.1 Executor 与 Core 3.2 并行度&#xff08; Parallelism&#xff09; 3.3 ​​​​​​​有向无环图&#xff08; DAG&#xff09; 4 提交流程 …

FME安装问题以及FME处理dwg代码示例

FME 安装 说明&#xff1a;这里采用的是FME2022的desktop的来处理和读取cad dwg文件 &#xff08;曾今安装过去fme的&#xff0c;就需要全局删除所有fme的文件夹&#xff09; https://www.zhihu.com/question/278356734 https://www.xiazai99.com/down/soft266163.html https:/…

基于springboot实现财务管理系统【源码+论文】

基于springboot实现财务管理系统演示开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xf…

js+echarts画图:代码没报错,但是图表不显示

背景 想用 jsecharts 画图&#xff0c;图表布局大致如下&#xff1a; 父盒子下面有2个盒子并排分布&#xff0c;其中左边盒子是数字模块&#xff0c;右边盒子是图表模块&#xff1a; 核心代码&#xff1a; css文件&#xff1a; html文件&#xff1a; 但是运行完html页面…

Matlab进阶绘图第11期—方块热图灵活版

方块热图是一种特殊的热图。 与传统热图相比&#xff0c;方块热图利用不同颜色、不同大小的正方形表示数据的差异&#xff0c;可以更加直观地对数据情况进行分析。 之前分享了一个简易版本的方块热图绘制工具squareheatmap&#xff0c;虽说已经可以适应大部分场景&#xff0c…

计算广告(六)

出价技术 PID算法 PID算法是工业应用中最广泛算法之一&#xff0c;在闭环系统的控制中&#xff0c;可自动对控制系统进行准确且迅速的校正。 PID算法已经有100多年历史&#xff0c;在四轴飞行器&#xff0c;平衡小车、汽车定速巡航、温度控制器等场景均有应用。 ​ 编辑 添…

小白学Pytorch系列--Torch.nn API Recurrent Layers(8)

小白学Pytorch系列–Torch.nn API Recurrent Layers(8) 方法注释nn.RNNBasenn.RNN将具有tanh tanh或ReLU ReLU非线性的多层Elman RNN应用于输入序列。nn.LSTM将多层长短期记忆(LSTM) RNN应用于输入序列。nn.GRU将多层门控循环单元(GRU) RNN应用于输入序列。nn.RNNCell具有tanh或…

渗透测试之冰蝎实战

渗透测试之冰蝎实战1.基本使用2.命令执行&虚拟终端3.文件管理4.反弹shell5.内网资产扫描6.内网穿透7.数据库管理“冰蝎”是一款动态二进制加密网站管理客户端 下载地址 1.基本使用 运行冰蝎&#xff0c;打开传输协议&#xff1a; 生成一个php远程马&#xff1a; 点击生成…

使用 Alluxio 优化 EMR 上 Flink Join

业务背景&痛点 流式处理的业务场景&#xff0c;经常会遇到实时消息数据需要与历史存量数据关联查询或者聚合&#xff0c;比如电商常见的订单场景&#xff0c;订单表做为实时事实表&#xff0c;是典型的流式消息数据&#xff0c;通常会在 kafka 中&#xff0c;而客户信息&a…

有钱还系统开发|有钱还系统顾头不顾尾?最后的人会受伤害?

有钱还系统开发|其实要想凭借一个系统程序&#xff0c;来彻底解决穷人和欠债的问题&#xff0c;是完全不现实的。有钱还众筹还债系统只是在用众筹的方式&#xff0c;来帮助每一个用户减轻负债压力&#xff0c;它的具体还债步骤如下&#xff1a; 第一阶段众筹&#xff1a; 条件…

TS常用数据类型(TypeScript常用数据类型,ts常用数据类型和js常用数据类型的区别)

简述&#xff1a;TS全称TypeScript&#xff0c;是一门弱类型的语言&#xff0c;可以理解为是 JavaScript 的扩展语法&#xff0c;因此我们可以在 ts 中继续写js代码&#xff0c;且不会报错&#xff0c;而且TypeScript 又叫做静态的JavaScript&#xff0c;可称为静态类型语言&am…

前端面试题之html css篇

文章目录1.什么是盒模型2.行内元素有哪些&#xff1f;块级元素有哪些&#xff1f; 空(void)元素有那些&#xff1f;行内元素和块级元素有什么区别&#xff1f;3.简述src和href的区别4.什么是css Hack5.什么叫优雅降级和渐进增强6.px和em的区别7.HTML5 为什么只写< !DOCTYPE …

Spring MVC 启动之 Handler 揭秘

前面的文章中我们学习了 Spring MVC 的启动流程以及 HandlerMapping&#xff0c;其中有一个步骤就是查找 Handler&#xff0c;用于处理客户端请求并返回响应结果&#xff0c;不同的Handler类型有不同的作用和实现方式。今天我们就来学习一下 Spring 都为我们提供了哪些 Handler…

C#学习 Day2

类型 bool System.Boolean的别名。只需要1 bit 存储空间&#xff0c;但运行时会使用1 byte 内存&#xff08;运行时和处理器可以高效操作的最小的块&#xff09;。针对数组&#xff0c;Framework 提供了 BitArray 类&#xff0c;&#xff08;System.Collections&#xff09;&…

CocosCreator实战篇 | 实现刮刮卡和橡皮擦 | 擦除效果

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/dxt19980308 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由肩匣与橘编写&#xff0c;首发于CSDN&#x1f649; &#x1f4e2;生活依旧是美好而…

安装及使用本地Maven仓库

1. 下载 Maven Maven 下载地址&#xff1a;https://maven.apache.org/download.cgi 2. 安装 Maven 解压 zip 包到本地目录&#xff0c;如&#xff1a;E:\maven\apache-maven-3.9.1 将 E:\maven\apache-maven-3.9.1和 E:\maven\apache-maven-3.9.1\bin 路径设置到环境变量。…

Linux 多线程:多线程和多进程的对比

目录一、多进程优缺点二、多线程优缺点三、使用多执行流的场景在多任务处理中&#xff0c;我们既可以使用多进程&#xff0c;也可以使用多线程。但多进程和多线程并不是随意选择的&#xff0c;因为它们应对的场景不同&#xff0c;优缺点也不同。 一、多进程优缺点 多进程就是在…

ChatGPT再掀AI资本狂潮,30位科技创新VC投资者齐聚“实在智能”

2023年开局&#xff0c;ChatGPT席卷全球。人工智能浪潮在国内外再次掀起质的高峰。一众投资者纷纷抢滩找项目。 3月&#xff0c;来自巴雪创投家俱乐部的近30位VC/PE和企业家齐聚杭州&#xff0c;前往调研国内AI准独角兽与RPA赛道头部企业杭州实在智能科技有限公司&#xff0c;…

【CSS】清除浮动 ③ ( 清除浮动 - 使用 after 伪元素 | 语法简介 | 兼容低版本浏览器 | 原理分析 )

文章目录一、清除浮动 - 使用 after 伪元素 ( 最流行写法 )1、额外标签法 和 overflow 样式法弊端2、after 伪元素清除浮动简介3、after 伪元素清除浮动核心代码4、after 伪元素清除浮动原理分析二、使用 after 伪元素 - 代码示例一、清除浮动 - 使用 after 伪元素 ( 最流行写法…

深度好文,无代码平台如何解决软件开发成本居高不下?

居高不下的开发成本尽管软件业的发展很快&#xff0c;但不可否认的是&#xff0c;软件标准化的程度非常低&#xff0c;低标准所带来的的后果往往是&#xff1a;1.更高的开发成本2.更高的实施风险&#xff08;不确定性&#xff09;3.更低的效率系统的开发成本并不是仅仅在一期交…
最新文章