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

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者,博主专门做了一个专栏目录,整个专栏只放了一篇文章,足见我对其重视程度:博主专栏目录。做到极度细致,方便大家进行学习!亲民!!!还有我开了一个专栏给女朋友的,很浪漫的喔,代码学累的时候去瞧一瞧,看一看:女朋友的浪漫邂逅。有问题可以私密博主,博主看到会在第一时间回复。
📝目前更新:🌟🌟🌟电力系统相关知识,期刊论文,算法,机器学习和人工智能学习。
🚀支持:🎁🎁🎁如果觉得博主的文章还不错或者您用得到的话,可以关注一下博主,如果三连收藏支持就更好啦!这就是给予我最大的支持!

 

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

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

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

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

目录

1 离散粒子群算法

2 运行结果

3 Matlab代码实现

离散粒子群算法

普通粒子群算法(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 运行结果

部分代码: 

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)<position_Matrix(2*city_nums+2,i))
            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);
        end
    end
    [globalBestFitness,thisIndex]=min(position_Matrix(2*city_nums+2,:),[],2);
    globalBestPath=position_Matrix(city_nums+2:2*city_nums+1,thisIndex);
%     st_Matrix=ones(city_nums).*c_x-eye(city_nums)>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代码实现


 

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
离散粒子群优化算法(Discrete Particle Swarm Optimization, DPSO)是一种用于解决离散优化问题的启发式算法。它是基于粒子群算法(PSO)的一种改进版本。 DPSO算法的基本思想是通过模拟鸟群中鸟的觅食行为,来求解优化问题。在算法中,将问题的解空间划分为若干个离散的点,每个点代表一个候选解。算法通过调整粒子的位置和速度,使得其在解空间中搜索并找到最优的解。 DPSO算法的流程如下:首先,初始化一群粒子的位置和速度。然后,根据每个粒子当前位置的适应度值,更新历史最优位置和全局最优位置。接着,根据一定的规则和参数,调整粒子的速度和位置,使其向全局最优位置靠拢。最后,重复上述步骤,直到达到预定的停止条件。 DPSO算法有以下几个特点:1.简单易实现,不需要求解问题的梯度信息;2.具有快速收敛的特性,能够在较短的时间内找到较优解;3.适用于各种离散优化问题,如组合优化、调度问题等。 然而,DPSO算法也存在一些问题和改进空间。例如,算法对于解空间的离散化划分可能会影响算法的性能,对于解空间较大的问题,粒子的搜索能力可能会受到限制。因此,如何合理设计离散化策略和调整参数,以提高算法的效果,仍值得进一步研究。 总之,DPSO算法是一种用于解决离散优化问题的有效算法,在实际应用中已经取得了一定的成果。通过合理的改进和优化,DPSO算法有望在更多的离散优化问题中发挥作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值