离散粒子群算法(DPSO)求解路径规划(Matlab代码实现)

欢迎来到本博客❤️❤️❤️
作者研究:本科计算机专业,研究生电气学硕主要研究方向是电力系统和智能算法、机器学习和深度学习。目前熟悉python网页爬虫、机器学习、群智能算法、深度学习的相关内容。希望将计算机和电网有效结合!⭐️⭐️⭐️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者,博主专门做了一个专栏目录,整个专栏只放了一篇文章,足见我对其重视程度:博主专栏目录。做到极度细致,方便大家进行学习!亲民!!!还有我开了一个专栏给女朋友的,很浪漫的喔,代码学累的时候去瞧一瞧,看一看:女朋友的浪漫邂逅。有问题可以私密博主,博主看到会在第一时间回复。
目前更新:电力系统相关知识,期刊论文,算法,机器学习和人工智能学习。
支持:如果觉得博主的文章还不错或者您用得到的话,可以关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!

                          

                                    欢迎您的到来

                     ⛅⛅⛅ 个人主页:电力系统科研室

                    专栏目录:电力系统与算法之美‍‍‍

                            

博主课外兴趣:中西方哲学,送予读者:

‍做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。在我这个专栏记录我有空时的一些哲学思考和科研笔记:科研和哲思。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“真理”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......

本文目录如下:⛳️⛳️⛳️

目录

1 离散粒子群算法

2 Matlab代码实现

3 写在最后

 

离散粒子群算法

普通粒子群算法(Particle Swarm Optimization Algorithm,PSO)的粒子初始位置、更新速度都是连续函数,与之对应,位置和速度更新均为离散值的算法是离散PSO算法(Discrete Particle Swarm Optimization Algorithm, DPSO);

一般就是在跟新粒子位置后,对粒子进行离散点处理;

比如:你的粒子的离散点是0到9的整数。那么对每个粒子更新位置后,比如是在(0,1)范围内的随机数。那么就(0,0.1)范围令其值为0;(0.1,0.2)范围令其值为1;............(0.9.1)范围令其值为9。当然初始位置值也需要这样处理.

2 Matlab代码实现

本文仅展现部分代码,全部代码见:正在为您运送作品详情

离散粒子群算法(DPSO)求解路径规划(Matlab代码实现)_第1张图片

离散粒子群算法(DPSO)求解路径规划(Matlab代码实现)_第2张图片

function main()
%% 初始化城市位置向量
city_nums=5;
%% 初始化微粒群参数
particle_nums=100;
%% 最大进化代数
max_iter=100;
%% 速度位置更新方式 v=(c1max-i/itermax*(c1max-c1min))*v+c2(Pbest-Pi)+c3(Pgbest-Pi);
%% 速度由N*N的矩阵来表示;
%% 微粒个数为particle_nums;
%% position_Matrix(1:city_nums):当前微粒路径
%% position_Matrix(city_nums+1):当前微粒适应度值
%% position_Matrix(city_nums+2:2*city_nums+1):个体最优路径
%% position_Matrix(2*city_nums+2):个体最优适应度值
city_position_x_max=10;city_position_y_max=10;city_position=rand(city_nums,2);
city_position(:,1)=city_position(:,1)*city_position_x_max;
city_position(:,2)=city_position(:,2)*city_position_y_max;
%% 初始化城市距离矩阵
city_distance=zeros(city_nums,city_nums);
for i=1:city_nums
    for j=1:i
        city_distance(i,j)=sqrt((city_position(i,1)-city_position(j,1)).^2+(city_position(i,1)-city_position(j,1)).^2);
        city_distance(j,i)=city_distance(i,j);
    end
end
position_Matrix=zeros(2*city_nums+2,particle_nums);
speed_current_Matrix=zeros(city_nums,city_nums,particle_nums);
c_x=0.5;c_1_min=0.0;c_1_max=1;c_2=0.4;c_3=0.2;
%% 初始化微粒的速度和位置
for i=1:particle_nums
    position_Matrix(1:city_nums,i)=wGenerate(city_nums);
    position_Matrix(city_nums+1,i)=calFitness(position_Matrix(1:city_nums,i),city_distance);
    position_Matrix(city_nums+2:2*city_nums+1,i)=position_Matrix(1:city_nums,i);
    position_Matrix(2*city_nums+2,i)=position_Matrix(city_nums+1,i);
    st_Matrix=ones(city_nums).*c_x-eye(city_nums)>rand(city_nums);
    speed_current_Matrix(:,:,i)=(st_Matrix+st_Matrix')>ones(city_nums);
end 
[globalBestFitness,thisIndex]=min(position_Matrix(2*city_nums+2,:),[],2);
globalBestPath=position_Matrix(city_nums+2:2*city_nums+1,thisIndex);
pathPlot(globalBestPath,city_position)
title(num2str(globalBestFitness));
%% 迭代过程
for iter=1:max_iter
    for i=1:particle_nums
        PbestLinkM=linkM(position_Matrix(city_nums+2:2*city_nums+1,i));
        PgbestLinkM=linkM(globalBestPath);
        v_1_M=PM2VM(speed_current_Matrix(:,:,i),c_1_max-i./max_iter*(c_1_max-c_1_min));
        v_2_M=PM2VM(sub_M(PbestLinkM,speed_current_Matrix(:,:,i)),c_2);
        v_3_M=PM2VM(sub_M(PgbestLinkM,speed_current_Matrix(:,:,i)),c_3);
        v_M=and_M(and_M(v_1_M,v_2_M),v_3_M);
        for j=1:city_nums
            for k=j:city_nums
                if(v_M(j,k)==1)
                    position_Matrix(1:city_nums,i)=add_M(position_Matrix(1:city_nums,i),[j;k]);
                end
            end
        end
        position_Matrix(city_nums+1,i)=calFitness(position_Matrix(1:city_nums,i),city_distance);
        if(position_Matrix(city_nums+1,i)rand(city_nums);
%     speed_current_Matrix(:,:,thisIndex)=(st_Matrix+st_Matrix')>ones(city_nums);
end
grid on;
figure
pathPlot(globalBestPath,city_position)
title(num2str(globalBestFitness));

3 写在最后

部分理论引用网络文献,若有侵权请联系博主删除。 
 

你可能感兴趣的:(#,电气期刊论文,算法,matlab,开发语言)