m基于PSO粒子群优化的柔性制造系统AGV调度模型matlab仿真

news2024/11/26 2:26:36

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        在PSO中,群中的每个粒子表示为向量。在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资本。矢量转换为多维搜索空间中的位置。每个粒子也会记住它最好的历史位置。对于PSO的每次迭代,找到全局最优位置。这是群体中最好的最优位置。一旦找到全局最优位置,每个粒子都会更接近其局部最优位置和全局最优位置。当在多次迭代中执行时,该过程产生一个解决该问题的良好解决方案,因为粒子会聚在近似最优解上。

       Ray等人通过将PSO算法和Pareto排序机制想结合起来。采用Pareto排序法来选择一组精英解,全局最优粒子的选择则是采用轮盘赌方式从中选择。实际运行时,只有少量的个体选择概率大,种群多样性保持不好。Coello等在PSO算法中选择群体最佳位置则是通过引入Pareto竞争机制和微粒知识库。该知识库用于存储微粒在每次飞行循环后的飞行经验,知识库的更新是通过考虑一个基于地理学的系统,该系统是就每个微粒的目标函数值而言来定义的。这个知识库被微粒用来确定一个指导搜索的领导者。同时非劣解的确定是通过将候选个体与从种群中随机选出的比较集进行比较,因此比较集的参数对算法成功与否有着至关重要的影响。若参数过大,则容易发生早熟收敛的现象,而参数过小,则种群中选出的非劣解的数量可能过少。

       PSO模拟的是鸟群的捕食行为。设想场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有鸟都不知道食物在哪里。但是他们知道当前的位置距离食物还有多远。那么找到食物的最优策略是什么?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

      鸟群在整个搜寻过程中,通过相互传递各自的信息,让其他鸟知道自己当前的位置,通过这样的协作来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终整个鸟群都能聚集在食物源的周围,即找到了最优解。

      PSO中,每个优化问题的解都是搜索空间的一只鸟,我们称之为“粒子”。所有的粒子都有一个被优化的函数决定的适应值,每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

       PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解,在每一次迭代中,粒子通过跟踪两个“极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值。另一个极值是整个种群目前找到的最优解,这个极值是全局机制。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。
        PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个“极值(pbest和gbest)”来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

本仿真算例:

m:加工单元4个

n:工件10个

k:工序数

D:  AGV  2个      

表格为各工件工序的在加工单元上的加工时间(单位: min),0表示该机床无法加工此道工序

加工单元

工件号

工序号

m1

m2

m3

m4

n1

k11

3

0

0

3

k12

0

4

4

4

k13

3

3

0

3

n2

k21

2

2

0

2

k22

0

5

0

5

n3

k31

3

3

0

0

k32

6

0

6

6

k33

4

4

4

0

n4

k41

5

0

0

5

k42

0

0

3

3

k43

2

2

2

0

k44

4

4

4

0

n5

k51

3

0

0

3

k52

0

2

2

2

n6

k61

2

2

0

2

k62

4

0

0

4

k63

3

3

3

3

n7

k71

3

0

3

3

k72

2

2

2

2

n8

k81

1

1

1

1

k82

3

0

3

0

k83

0

3

0

3

n9

k91

2

2

2

0

k92

3

0

3

0

k93

5

5

5

0

n10

k101

3

3

3

0

k102

0

0

2

2

k103

4

0

4

0

k104

5

5

0

5

AGV搬运时间表(单位:min)

待加工区

m1

m2

m3

m4

加工完

成区

待加工区

0

1

0.5

0.5

1

0

m1

1

0

0.5

1

1.5

1

m2

0.5

0.5

0

0.5

1

0.5

m3

0.5

1

0.5

0

0.5

0.5

m4

1

1.5

1

0.5

0

1

加工完

成区

0

1

0.5

0.5

1

0

2.仿真效果预览

matlab2022a仿真结果如下:

3.MATLAB核心程序

dim   = nvar; %变量数量         
Lmin =  lb;
Lmax =  ub;
c1    = 2.5;         %学习因子1
c2    = 2.5;         %学习因子2
w     = 1;         %惯性权重
Iters = 200;         %最大迭代次数
Num   = 400;           

%初始化种群的个体(可以在这里限定位置和速度的范围)
for i = 1:nvar
    for j = 1:Num
        x(j,i) = Lmin(i) + (Lmax(i)-Lmin(i))*rand(1,1);  %随机初始化位置
        v(j,i) = Lmin(i) + (Lmax(i)-Lmin(i))*rand(1,1);  %随机初始化速度
    end
end
y     = [];

%先计算各个粒子的适应度,并初始化Pi和Pg
for i=1:Num
    i
    [p(i),z1,z2,z3] = func_F(x(i,:));
    y(i,:)          = x(i,:);
end
%全局最优
pg = x(1,:);             

for i=2:Num
    i
    [pa(i),z1,z2,z3] = func_F(x(i,:));
    pb(i)            = func_F(pg);
    if pa(i) < pb(i)
       pg=x(i,:);
    end
end

for t=1:Iters
    t
    for i=1:Num
        v(i,:)           = w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)           = x(i,:)+v(i,:);
        [pa(i),z1,z2,z3] = func_F(x(i,:));
        if pa(i)<p(i)
           p(i)  = pa(i);
           y(i,:)= x(i,:);
        end

        [pb(i),z1,z2,z3] = func_F(pg);
        if p(i)<pb(i)
           pg=y(i,:);
        end
        
 
    [Pbest(i),z1_(i),z2_(i),z3_(i)] = func_F(pg);    
    end
    Fs(t)=mean(Pbest);
    Y1       = z1_;
    Y2       = z2_;
    Y3       = z3_;
    tmps     = pg;
end

figure;
plot(Fs);
xlabel('PSO迭代次数');
ylabel('fitness');
grid on

pg
 

II=15;
Total_time = Y1(II);
Total_WT   = Y2(II);
max_WT     = Y3(II);
X          = tmps;
% Z=fitness(X)
%显示甘特图
[V,I] = sort(X(1:end));
 
seq1 = sort(I(1:N1));
seq2 = sort(I(N1+1:N1+N2));
seq3 = sort(I(N1+N2+1:N1+N2+N3));
seq4 = sort(I(N1+N2+N3+1:N1+N2+N3+N4));%选择了任务3的计算机器
seq5 = sort(I(N1+N2+N3+N4+1:N1+N2+N3+N4+N5));%选择了任务3的计算机器

x1   = mach(seq1);
x2   = mach(seq2);
x3   = mach(seq3);
x4   = mach(seq4);
x5   = mach(seq5);


for i = 1:N1
    c1(1,i) = time1(x1(i)); 
end
for i = 1:N2
    c2(1,i) = time2(x2(i)); 
end
for i = 1:N3
    c3(1,i) = time3(x3(i)); 
end
for i = 1:N4
    c4(1,i) = time4(x4(i)); 
end
for i = 1:N5
    c5(1,i) = time5(x5(i)); 
end

xx  = [x1,x2,x3,x4,x5]
seq = [seq1,seq2,seq3,seq4,seq5] 
cc  = [c1,c2,c3,c4,c5] 


 
%[x y w h]
LEN = N1+N2+N3+N4+N5;
rec1(:,LEN)=[0,0,0,0]';
rec2(:,LEN)=[0,0,0,0]';
rec3(:,LEN)=[0,0,0,0]';
rec4(:,LEN)=[0,0,0,0]';
rec5(:,LEN)=[0,0,0,0]';


cnt1=0;
cnt2=0;
cnt3=0;
cnt4=0;
cnt5=0;
color1=[];
color2=[];
color3=[];
color4=[];
color5=[];
Timesave1=[];
Timesave2=[];
Timesave3=[];
Timesave4=[];
Timesave5=[];
P1=[];
P2=[];
P3=[];
P4=[];
P5=[];
for i = 1:LEN
    idx = find(seq == i);
    time= cc(idx);
    if xx(idx)==1;%machine1
        cnt1=cnt1+1;
        cnt2=cnt2;
        cnt3=cnt3;
        cnt4=cnt4;
        cnt5=cnt5;
        if idx<=N1
            color1=[color1,'c'];
            color2=[color2];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P1(:,cnt1)=[1;1];
        end
        if idx>N1&idx<=N1+N2
            color1=[color1,'g'];
            color2=[color2];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P1(:,cnt1)=[1;2];
        end
        
        
        if idx>N1+N2&idx<=N1+N2+N3
            color1=[color1,'y'];
            color2=[color2];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P1(:,cnt1)=[1;3];
        end
        
        if idx>N1+N2+N3&idx<=N1+N2+N3+N4
            color1=[color1,'r'];
            color2=[color2];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P1(:,cnt1)=[1;4];
        end
        
        if idx>N1+N2+N3+N4&idx<=N1+N2+N3+N4+N5
            color1=[color1,'b'];
            color2=[color2];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P1(:,cnt1)=[1;5];
        end
        
        if cnt1==1
           rec1(1,cnt1) = 0;
           rec1(2,cnt1) = 1-0.3;
           rec1(3,cnt1) = cc(idx);
           rec1(4,cnt1) = 0.6; 
        else
           rec1(1,cnt1) = rec1(1,cnt1-1)+rec1(3,cnt1-1);
           rec1(2,cnt1) = 1-0.3;
           rec1(3,cnt1) = cc(idx);
           rec1(4,cnt1) = 0.6; 
        end
        Timesave1(cnt1)=cc(idx);
        
    end
    
    
    
    if xx(idx)==2;%machine2
        cnt1=cnt1;
        cnt2=cnt2+1;
        cnt3=cnt3;
        cnt4=cnt4;
        cnt5=cnt5;
        if idx<=N1
            color1=[color1];
            color2=[color2,'c'];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P2(:,cnt2)=[2;1];
        end
        if idx>N1&idx<=N1+N2
            color1=[color1];
            color2=[color2,'g'];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P2(:,cnt2)=[2;2];
        end
        if idx>N1+N2&idx<=N1+N2+N3
            color1=[color1];
            color2=[color2,'y'];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P2(:,cnt2)=[2;3];
        end
        if idx>N1+N2+N3&idx<=N1+N2+N3+N4
            color1=[color1];
            color2=[color2,'r'];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P2(:,cnt2)=[2;4];
        end
        if idx>N1+N2+N3+N4&idx<=N1+N2+N3+N4+N5
            color1=[color1];
            color2=[color2,'b'];
            color3=[color3];
            color4=[color4];
            color5=[color5];
            P2(:,cnt2)=[2;5];
        end
        
        if cnt2==1
           rec2(1,cnt2) = 0;
           rec2(2,cnt2) = 2-0.3;
           rec2(3,cnt2) = cc(idx);
           rec2(4,cnt2) = 0.6; 
        else
           rec2(1,cnt2) = rec2(1,cnt2-1)+rec2(3,cnt2-1);
           rec2(2,cnt2) = 2-0.3;
           rec2(3,cnt2) = cc(idx);
           rec2(4,cnt2) = 0.6; 
        end
        Timesave2(cnt2)=cc(idx);
    end
.........................................................
        Timesave5(cnt5)=cc(idx);
    end  
end
02_103m

4.完整MATLAB

V

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

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

相关文章

Word控件Spire.Doc 【超链接】教程(5):使用 C# 更改颜色或从 Word 中的超链接中删除下划线

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

STM32 ~ 定时器

定时器的基本框图&#xff1a; 不管是做PWM输出、定时中断还是输入捕获都肯定要搞清楚CK_INT 从哪里来&#xff0c;频率是多少&#xff1f;才能正确使用定时器。时钟肯定是来自时钟树&#xff0c;那我们就要去Reference manual里找找&#xff1a; 时钟源确实可以找到&#xf…

奈雪收购乐乐茶,茶饮品牌开启整合之路

近日&#xff0c;奈雪的茶以5.25亿元收购了乐乐茶43.64%的股权&#xff0c;成为其第一大股东。这是今年以来新式茶饮品牌最大的一笔投资&#xff0c;也使得奈雪的股价一路飙涨&#xff0c;五日涨幅超过15%&#xff0c;创下年内新高。 据《2022年中国新式茶饮研究报告》显示&…

【程序人生】卡塔尔世界杯吉祥物python海龟绘图(附源代码),世界杯主题前端特效5个(附源码)

卡塔尔世界杯吉祥物python海龟绘图&#xff08;附源代码&#xff09; 世界杯主题前端特效5个&#xff08;附源码&#xff09;程序人生 本文目录&#xff1a; 一、python turtle海龟绘图卡塔尔世界杯吉祥物 &#xff08;1&#xff09;、世界杯吉祥物“Laeeb”绘制效果图 &am…

数据结构---栈和队列

栈和队列栈入栈出栈栈的JAVA实现队列入队出队循环队列栈和队列。这两者都属于逻辑结构&#xff0c;它们的物理实现既可以利用数组&#xff0c;也可以利用链表来完成。 栈 栈&#xff08;stack&#xff09;是一种线性数据结构&#xff0c;它就像一个上图所示的放入乒乓球的圆筒…

实施 GitOps 的三个关键步骤

GitOps 是一种自动化和管理基础架构和应用程序的模型&#xff0c;通过许多团队已经使用的相同 DevOps 最佳实践来形成的模型&#xff0c;例如版本控制、代码审查和 CI/CD 流水线。在实施 DevOps 时&#xff0c;我们找到了自动化软件开发生命周期的方法&#xff0c;但在基础设施…

[附源码]Python计算机毕业设计高铁乘坐舒适性在线调查及评价系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

3399的-mipi适应多个lcd屏显示-后续2-linux内核中的修改

一、前提&#xff1a; 1. rk3399核心板 2.linux4.4.19 源码 3. 多个MIPI显示屏的启动序列以及显示时序&#xff08;重要&#xff09; 4.rk3399MIPI通道0 5.接上一个uboot中的修改配置 二、内核驱动的修改 0. dts就不再给出了&#xff0c;请参考uboot的修改 1. 主要涉及的…

基于C#开发的(WinForm)图书管理系统【100010037】

图书管理系统项目开发说明书 项目简介 项目背景&#xff08;选择这个项目的原因、前景&#xff0c;面向的用户&#xff0c;优势&#xff09;&#xff1b; * 根据学院需要希望能够充分利用现代科技来提高图书管理的效率&#xff0c;在原有的办公系统基础上进行扩展&#xff0c…

ArkUI框架,更懂程序员的UI信息语法

ArkUI框架&#xff0c;更懂程序员的信息语法ArkUI框架简化代码的“秘密” 在传统的开发过程中&#xff0c;总有个问题在困扰我&#xff1a;如何实现前端view与后端数据的同步更改&#xff1f;例如&#xff1a;在某个视频类app的页面&#xff0c;如果我想要实现视频的点击播放功…

移动端touch拖动事件和click事件冲突问题解决

通过本课程你会学到什么 1.系统掌握 Web 全栈技能树 2.网络、前后端、持久化等核心技术解析 3.全栈开发的技术比较和选型 4.拓宽技术视野&#xff0c;培养全栈思维 今天我们要接触一个和 MVC 密切相关的&#xff0c;能带来思维模式改变的编程范型——面向切面编程&#xff08;…

OpenCV StudyNote

Open CV学习 图像读取与显示 灰度图像 - 单通道 彩色图像 - 三通道 (B, G, R) 一般步骤 import cv2 as cv # 导入OpenCV支持(cv2是包的名称不是版本号) import numpy as np # 所有图像数据都是以 numpy 数组方式存储 imread(filename[,flags]) # imread 函数&am…

自助服务:怎么提高客服人员效率?

越来越多的企业意识到了客服效率的重要性&#xff0c;大家通过布局全渠道系统、智能客服机器人、人员岗前培训等方式来提升客服效率&#xff0c;为客户提供更迅速、专业、优质的服务。人员效率的提升不仅能提高客户体验&#xff0c;还有助于企业的长期发展&#xff0c;带来更多…

【Vue2+Element ui通用后台】头部

文章目录headerheader 在 components 中新建 CommonHeader.vue 组件来完成头部组件的编写 <template><div class"header-container"><div class"l-content"><el-button icon"el-icon-menu" size"mini"><…

【MySQL】索引基础介绍

一、常见的存储引擎有哪些&#xff1f;区别是什么&#xff1f; Mysql 默认的存储引擎是&#xff1a;InnoDB&#xff0c;具有支持事务、行级锁、高并发访问性能。MyIsAM&#xff1a;访问速度快&#xff0c;实际运用如果是以读和插入操作为主&#xff0c;并对事物完整性和并发性…

面向对象程序设计期末项目总结

面向对象程序设计期末项目总结 开发前准备 MysqlNavicatTomCatIDEA 一&#xff0c;配置项目环境 右键项目名&#xff0c;添加新模块 命名后右键新建的模块 选中Web模块 到此项目创建完毕&#xff0c;接下来是配置环境。 打开IDEA–>File找到Project Structure 添加所…

Pikachu(皮卡丘)靶场中SQL注入

Pikachu靶场中SQL注入1.Pikachu(皮卡丘)靶场中SQL注入1.1.数字型注入1.2.字符型注入1.3.搜索型注入1.4.xx型注入1.5.insert/update注入1.6.delete注入1.7.http头注入1.8.盲注(base on boolian)1.9.盲注(base on time)1.10.宽字节注入1.Pikachu(皮卡丘)靶场中SQL注入 若遇到不链…

基于java+springboot+mybatis+vue+mysql的冬奥会科普平台

项目介绍 基于SpringBoot框架的冬奥会科普平台利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点&#xff0c;系统采用java语言开发&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。比如计算检索速度特别快、可靠性特别高…

大数据如何在制造业中进行应用?数据宝董事长汤寒林现身数字化年会讲了这个事

12月8日1670923102263472480日&#xff0c;2022中国数字化年会成功在线上举办&#xff01;本届年会以“向变而生”为主题&#xff0c;历时三天&#xff0c;特别打造了主论坛、高峰论坛与行业数智化论坛三大板块&#xff0c;60余位专家学者与来自各领域各行业数字化领军人物 通过…

前端基础(五)_CSS文本文字属性

CSS文本文字属性 1、文字属性 1.1、字号 font-size&#xff1a;38px; 浏览器默认16px; 1.2、字体 font-family: 如果字体名称包含空格&#xff0c;字体名称上加引号&#xff1b; 中文字体名称加引号&#xff1b; 多个字体名称作为一个回退系统来保存&#xff0c;如果第一个不…