基于混合VNS(变邻域搜索算法)的PSO(粒子群优化算法)的任务分配问题(Matlab代码实现)

news2024/12/20 9:17:14

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

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码实现

💥1 概述

    PSO算法最早是由Kennedy和Eberhart提出的;它的基本原理源于对鸟群捕食行为的仿真.目前对PSO算法的研究主要集中在连续型的PSO算法,即描述粒子状态及其运动规律的量都是连续型的.而对离散粒子群优化(Discrete Particle Swarm ()ptimization,DPSO)算法的研究甚少.只有ClerC提出用于求解TSP问题的DPSO算法,但其性能与其它算法(如蚁群算法)相比仍有一定差距.

     独立任务的分配问题不仅存在于计算机并行计算、操作系统等计算机技术领域,而且还广泛存在于工农业生产、交通运输及服务行业.它通常以总完成时间最短为目标函数,是一个NP-困难的组合优化问题,不存在多项式时间复杂性的算法以找到全局最优解.尽管文献中已有许多启发式算法试图去获取优质解,但是解的质量还是不能令人满意.本文基于一种混合VNS(变邻域搜索算法)的PSO(粒子群优化算法)用以解决拦截对抗中的任务分配问题,新的算法能够有效地避免粒子群陷入局部收敛,并且解决离散优化问题。

📚2 运行结果

ultimate distribute matrix:
         0         0         0         0         0         0    0.0806    0.9194
         0         0    1.0000         0         0         0         0         0
         0         0         0         0         0         0    1.0000         0
         0         0         0         0         0    1.0000         0         0
         0         0         0    1.0000         0         0         0         0
    1.0000         0         0         0         0         0         0         0
         0    1.0000         0         0         0         0         0         0
         0         0         0         0         0    1.0000         0         0
    1.0000         0         0         0         0         0         0         0
         0         0         0         0    1.0000         0         0         0

ultimate fitness value:
  146.8842

时间已过 4.112748 秒。

部分代码:

maxgen = 100;   % number of iterations
sizepop = 50;   % Population size
Vmax = 1;  % limits of velocity
Vmin = -1;
popmax = 1;   % limits of position
popmin = 0;

% original population
for i = 1:sizepop
    % obtain a particle swarm randomly
    popi = popmin + (popmax - popmin)*rand(numP, numE);
    for k = 1:numP
        popi(k,:) = popi(k,:)/sum(popi(k,:));
    end
    pop(i,:,:) = popi;   % original postion
    V(i,:,:) = Vmin + (Vmax - Vmin)*rand(numP, numE);   % original velocity
    % caculate fitness value
    fitness(i) = fitnessf(squeeze(pop(i,:,:)), P, E);
end

% Individual and global extremums of the initial population
[bestfitness bestindex] = max(fitness);
zbest = pop(bestindex,:,:);   % global extremums
gbest = pop;    % Individual extremums
fitnessgbest = fitness;   % Individual extremums fitness value
fitnesszbest = bestfitness;   % global extremums fitness value

% iterations
for i = 1:maxgen
    for j = 1:sizepop
        % velocity update
        V(j,:,:) = omg*V(j,:,:) + c1*rand*(gbest(j,:,:) - pop(j,:,:)) + c2*rand*(zbest - pop(j,:,:));
        
        % position update
        pop(j,:,:) = pop(j,:,:) + V(j,:,:);
        pop(j,find(pop(j,:,:)<0)) = 0;
        popj = squeeze(pop(j,:,:));
        for k = 1:numP
            popj(k,:) = popj(k,:)/sum(popj(k,:));
        end
        pop(j,:,:) = popj;
        
        % caculate fitness value
        fitness(j) = fitnessf(squeeze(pop(j,:,:)), P, E);
        
        Fhistory(i, j) = fitness(j);
        
        
    end
    for j = 1:sizepop
        % individual extremum update
        if fitness(j) > fitnessgbest(j)
            gbest(j,:,:) = pop(j,:,:);
            fitnessgbest(j) = fitness(j);
        end
        
        % global extremum update
        if fitness(j) > fitnesszbest
            zbest = pop(j,:,:);
            fitnesszbest = fitness(j);
        end
    end
    % vns strategy
    for j = 1:sizepop
        popj = squeeze(pop(j,:,:));
        if i > 3
            if (Fhistory(i, j) - Fhistory(i-1, j)) < 1e-4
                if (Fhistory(i, j) - Fhistory(i-2, j)) < 1e-4
                    if mod(i, 15) == 0
                        if j == 1
                            disp('vns going');
                        end
                        omg = 0.4;
                        % vns strategy
                        [popjn, isupdate] = vns(popj, P, E);
                        pop(j,:,:) = popjn;
                        tmptfitness = fitnessf(popjn, P, E);
                        % individual extremum update
                        if isupdate
                            gbest(j,:,:) = popjn;
                            fitnessgbest(j) = tmptfitness;
                        end
                        % global extremum update
                        if tmptfitness > fitnesszbest
                            zbest = pop(j,:,:);
                            fitnesszbest = tmptfitness;
                        end
                    end
                end
            end
        end
        
    end
    
    yy(i) = fitnesszbest; % fitness value each iteration
    disp(i);
    disp(squeeze(pop(1, :, :)));
end
 

 

 

🎉3 参考文献

[1]钟一文,杨建刚.独立任务分配问题的离散粒子群优化算法[J].模式识别与人工智能,2006,19(03):399-405.

👨‍💻4 Matlab代码实现

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析 | Pandas 200道练习题,每日10道题,学完必成大神(3)

文章目录1.读取本的数据集2.查看数据的前5行3.将salary列的数据转换为最大值和最小值的平均值4.将数据根据学历进行分组计算平均值5.将createTime列转换为月日6.查看所索引&#xff0c;数据类型和内存信息7.查看数值型列的汇总统计8.新增一列根据salary将数据分为三组9.按照sal…

【Day31】力扣算法(超详细思路+注释)[1441. 用栈操作构建数组 ] [621. 任务调度器]

您的点赞&#xff0c;收藏以及关注是对作者最大的鼓励喔 ~~ 刷题打卡&#xff0c;第 三十一 天题目一、1441. 用栈操作构建数组题目二、621. 任务调度器题目一、1441. 用栈操作构建数组 原题链接&#xff1a;1441. 用栈操作构建数组 题目描述&#xff1a; 给你一个数组targe…

5 个 Flutter VSCode 技巧和窍门,你可以马上使用!

5 个 Flutter VSCode 技巧和窍门&#xff0c;你可以马上使用&#xff01; 前言 今天&#xff0c;我将向你展示 5 个非常有用的 Flutter 技巧&#xff0c;你可以立即应用到你的项目中。我不会给你任何软件包或扩展&#xff0c;但非常简单&#xff0c;但非常有用的技巧&#xff0…

【大厂高频真题100题】单词拆分 真题练习第7题 持续更新~

单词拆分 描述: 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s = "leetcode", wordDict = ["leet&q…

德邦股份第三季营收80亿:净利2.56亿 京东控制72%股权

雷递网 雷建平 10月28日德邦物流股份有限公司&#xff08;证券代码&#xff1a;603056&#xff0c;证券简称&#xff1a;德邦股份&#xff09;今日发布财报。财报显示&#xff0c;德邦股份2022年前9个月营收为228.17亿元&#xff0c;较上年同期增长1.14%&#xff1b;净利为3.5亿…

springboot+jsp志愿者岗位报名培训系统javaweb

当我知道北京冬奥会申请成功&#xff0c;也刚好是我的毕业&#xff0c;觉得自已需要做点什么&#xff0c;北京冬奥会申请成功觉得自已去做一个志愿者&#xff0c;这样不断丰富了自已的经历&#xff0c;还能给自已在现实生活中上了一课&#xff0c;为了迎合志愿者需求&#xff0…

每日学习06:=和== 和 equals 你学废了吗?

1.赋值运算符 &#xff1a;是赋值运算符。赋是指为变量或常量指定数值的符号。赋值运算符的符号为“”&#xff0c;它是双目运算符&#xff0c;左边的操作数必须是变量&#xff0c;不能是常量或表达式。 赋值运算符的优先级低于算术运算符&#xff0c;结合方向是自右向左&…

Python基础_第4章_Python数据序列(容器)

Python基础_第4章_Python数据序列&#xff08;容器&#xff09; 文章目录Python基础_第4章_Python数据序列&#xff08;容器&#xff09;Python数据序列&#xff08;容器&#xff09;一、作业回顾1、面试题2、报数字&#xff08;数7&#xff09;二、了解字符串1、字符串的定义2…

蓝桥杯备赛(二)

目录 前言&#xff1a; 一、ASC 分析 代码实现 二、 卡片 分析 代码实现 三、 直线 分析 代码实现 四、货物摆放 分析 代码实现 小结&#xff1a; 前言&#xff1a; 在刷题的过程中&#xff0c;发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉&#xff…

【IO】文件操作基础知识

目录 1.文件的操作&#xff1a; 2.文件内容的读写—数据流&#xff1a; 3.文件操作练习&#xff1a; 1.文件的操作&#xff1a; 文件分为狭义上的文件和广义的文件。狭义上的文件&#xff1a;存储在硬盘上的数据&#xff0c;以“文件”为单位进行组织。文件夹也叫做目录。通…

图第三遍补充(各种算法与力扣)

一、一些补充的概念 如果具有n个结点的图中是一个环&#xff0c;则会有n个不同的生成树&#xff0c;每个生成树有n-1条边 连通、连通图、连通分量&#xff1a;路径&#xff0c;无向图 &#xff0c;极大连通子图为连通分量&#xff0c;边数小于n-1&#xff0c;则图必为非连通图…

Xilinx XC7Z020双核ARM+FPGA开发板试用合集——自定义硬件工程

本期测试板卡是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板,处理器集成PS端双核ARM Cortex-A9 + PL端Artix-7架构28nm可编程逻辑资源。 下面是测试内容,欢迎查阅。 SD卡启动设置 根据《TLZ7x-EasyEVM-S评估板硬件说明书》…

开心消消乐游戏网页设计作品 学生dreamweaver作业静态HTML网页设计模板 游戏主题网页作业制作

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

有营养的算法笔记(八)

有营养的算法笔记八摆砖块问题数字转换K递增子序列魔法子数组摆砖块问题 1.题目描述 给定一个正数数组arr&#xff0c;其中每个值代表砖块长度。所有砖块等高等宽&#xff0c;只有长度有区别&#xff0c;每一层可以用1块或者2块砖来摆。要求每一层的长度一样 要求必须使用所有…

【阅读笔记】低照度图像增强-《An Integrated Neighborhood Dependent...

本文介绍的是一种比较实用的低照度图像增强算法&#xff0c;选自2004年Tao的一篇论文&#xff0c;名称是《An Integrated Neighborhood Dependent Approach for Nonlinear Enhancement of Color Images 》 概述 图像中暗区图像增强的基本机制是对图像的亮度进行动态范围压缩&…

玩转rancher 2.6之 monitor监控

目录 前言 1. 安装monitor 2. 安装prometheus-webhook-dingtalk 2.1 配置钉钉告警配置文件 2.2 创建钉钉告警模板 2.3 创建dingtalk configmap配置文件 2.4 安装dingtalk 2.5 dingtalk调用方法 3. 配置告警 3.1 配置告警接收者 3.2 配置路由默认告警接收者 4. 测试 前…

初识C++ (三)

初识C 三引用一. 引用的概念代码演示二. 引用特性1. 引用在定义时必须要初始化2. 一个引用可以有多个实体3. 引用一旦引用一个实体&#xff0c;再不能引用其他实体三. 使用场景1. 做参数2. 做返回值内存销毁后空间还在吗&#xff1f;内存销毁后我们还能访问嘛&#xff1f;结论优…

论文写作——ICASSP论文写作及投稿

记录 ICASSP2023 写作投稿过程。小白如何写好并投稿自己的第一篇英文论文&#xff1f;投稿会议时&#xff08;以 ICASSP2023 为例&#xff09;有哪些需要关注的信息以及注意事项&#xff1f;论文写作必备软件有哪些&#xff1f;论文书写关注点有哪些&#xff1f;论文格式与排版…

【Node.JS 】http的概念及作用

往期文章 【Node.JS 练习】时钟案例 【Node.JS 】path路径模块 【Node.JS 练习】考试成绩整理 【Node.JS】buffer类缓冲区 【Node.JS】事件的绑定与触发 【Node.JS】写入文件内容 【Node.JS】读取文件内容 什么是http模块 在网络节点中&#xff0c;负责消费资源的电脑&…

【C语言】C语言文件操作详解(一)

前言 本章主要讨论的是数据文件&#xff0c;如何使用C语言对数据文件进行输入输出数据的操作&#xff0c;以及文件顺序读写涉及的库函数详解 目录前言1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开和关闭3.1文件指针3.2文件的打开3.3文件的关闭3.…