当前位置: 首页 > news >正文

蚁群算法优化最优值

%%%%%%%%%%%%%%蚁群算法求函数极值%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%
clear all; %清除所有变量
close all; %清图
clc; %清屏
m = 20; %蚂蚁个数
G = 500; %最大迭代次数
Rho = 0.9; %信息素蒸发系数
P0 = 0.2; %转移概率常数
XMAX = 5; %搜索变量 x 最大值
XMIN = -5; %搜索变量 x 最小值
YMAX = 5; %搜索变量 y 最大值
YMIN = -5; %搜索变量 y 最小值
%%%%%%%%%%%%%随机设置蚂蚁初始位置%%%%%%%%%%%%%%%%
for i = 1:m
    X(i,1) = (XMIN+(XMAX-XMIN)*rand);
    X(i,2) = (YMIN+(YMAX-YMIN)*rand);
    Tau(i) = func(X(i,1),X(i,2));
end
step = 0.1; %局部搜索步长
for NC = 1:G
    lamda = 1/NC;
    [Tau_best,BestIndex] = min(Tau);
    %%%%%%%%%%%%%计算状态转移概率%%%%%%%%%%%%%%%
    for i = 1:m
        P(NC,i) = (Tau(BestIndex)-Tau(i))/Tau(BestIndex);
    end
    %%%%%%%%%%%%%%%%位置更新%%%%%%%%%%%%%%%%%
    for i = 1:m
        %%%%%%%%%%%%局部搜索%%%%%%%%%%%%%%%%%
        if P(NC,i) < P0
            temp1 = X(i,1)+(2*rand-1)*step*lamda;
            temp2 = X(i,2)+(2*rand-1)*step*lamda;
        else
            %%%%%%%%%%%%全局搜索%%%%%%%%%%%%%%%%
            temp1 = X(i,1)+(XMAX-XMIN)*(rand-0.5);
            temp2 = X(i,2)+(YMAX-YMIN)*(rand-0.5);
        end
        %%%%%%%%%%%%%%%%边界处理%%%%%%%%%%%%%%%
        if temp1 < XMIN
            temp1 = XMIN;
        end
        if temp1 > XMAX
            temp1 = XMAX;
        end
        if temp2 < YMIN
            temp2 = YMIN;
        end
        if temp2 > YMAX
            temp2 = YMAX;
        end
        %%%%%%%%%%%%%%%判断蚂蚁是否移动%%%%%%%%%%%
        if func(temp1,temp2) < func(X(i,1),X(i,2))
            X(i,1) = temp1;
            X(i,2) = temp2;
        end
    end
    %%%%%%%%%%%%%%%%%更新信息素%%%%%%%%%%%%%%%
    for i = 1:m
        Tau(i) = (1-Rho)*Tau(i)+func(X(i,1),X(i,2));
    end
    [value,index] = min(Tau);
    trace(NC) = func(X(index,1),X(index,2));
end
[min_value,min_index] = min(Tau);
minX = X(min_index,1); %最优变量
minY = X(min_index,2); %最优变量
minValue = func(X(min_index,1),X(min_index,2)); %最优值
figure
plot(trace)
xlabel('搜索次数');
ylabel('适应度值');
title('适应度进化曲线')
%%%%%%%%%%%%%%%%%适应度函数%%%%%%%%%%%%%%%%
function value = func(x,y)
value = 20*(x^2-y^2)^2-(1-y)^2-3*(1+y)^2+0.3;
end

 

http://www.lryc.cn/news/29271.html

相关文章:

  • Docker镜像的内部机制
  • 每日的时间安排规划
  • 【C++】类和对象——六大默认成员函数
  • 远程debug被arthas watch了的idea
  • Cesium实现的光柱效果
  • 你最爱记混的slice()和splice()
  • 【LeetCode】剑指 Offer(15)
  • 【刷题笔记】之二分查找(搜索插入位置。在排序数组中查找元素的第一个和最后一个位置、x的平方根、有效的完全平方数)
  • 一起Talk Android吧(第五百一十五回:绘制向外扩散的水波纹)
  • 基于粒子群改进的支持向量机SVM的情感分类识别,pso-svm情感分类识别
  • 【python中的列表和元组】
  • 世界顶级五大女程序媛,不仅技术强还都是美女
  • Linux- 系统随你玩之--文件管理-双生姐妹花
  • 18、多维图形绘制
  • 【C++】30h速成C++从入门到精通(STL介绍、string类)
  • PMP是什么意思?适合哪些人学呢?
  • 【SpringBoot 事务不回滚?怎么解决?】
  • 软件研发管理经验总结 - 技术管理
  • 项目实战典型案例19——临时解决方案和最终解决方案
  • 机器学习模型的可解释性算法汇总!
  • 什么是着色器/Threejs如何使用着色器/Threejs使用着色器实现平面网格的动态效果案例
  • 191、【动态规划】AcWing ——AcWing 900. 整数划分:完全背包解法+加减1解法(C++版本)
  • Java 比较器
  • 配置本地 python GEE、geemap环境
  • cmd命令教程
  • 深圳大学计软《面向对象的程序设计》实验15 函数模板和类模板
  • 组播详解及示例代码
  • C语言-qsort函数示例解析
  • 一些Linux内核内存性能调优笔记!
  • 【JVM】逃逸分析