m基于GA遗传优化+SA模拟退火的混合改进算法的多产品多机器生产优化matlab仿真

本文涉及的产品
全球加速 GA,每月750个小时 15CU
简介: m基于GA遗传优化+SA模拟退火的混合改进算法的多产品多机器生产优化matlab仿真

1.算法描述

   这里,我们首先介绍一下改进算法的基本原理,按照前面说的,这里我们主要将GA和SA进行合并。

   这里,我研究了下,将两种算法做如下方法的结合:

   首先,在之前做的改进GA算法和普通SA算法的基础之上,将两个算法进行融合,整体的算法流程图如下所示:

    第一、随机化产生N个初始群体P;

    第二、代入到优化目标函数,获得N个初始的适应度值;

    第三、按照改进GA算法的流程进行选择,变异和交叉等操作;

    第四、然后对个体进行模拟退火的操作;

    第五、然后对模拟退火后的群体的所有个体进行计算适应度值;

    第六、将遗传算法中最优个体(未进行变异交叉的部分个体)和模拟退火后的个体进行融合,构成新的种群,作为新一代的种群;

    第七、重复上述的步骤直接优化迭代次数结束。

其算法的流程图如下所示:

1.png

具体的理论过程如下所示:

我们按上面的过程,介绍一下具体的理论和原理:

01).种群的初始化

2.png

02).定义优化目标函数

    当某一个机器生产完毕空闲下来,但由于受到交货期限的限制,需要将其余未生产好的产品放到空闲的机器上进行生产。此时就得到了如下的公式:

3.png

这里先说明一下上面公式的含义:

4.png
5.png

03).保留一部分最优的个体直接复制到新一代,这些群体定义为P1:

    这里,采取一种改进后的种群保留机制,具体如下所示:这里,通过对比各个适应度之间的大小关系来判断的方法进行选择。

04).没有被保留的部分进行交叉和变异操作

   这里,没有被保留的群体,定义为P2:。然后然后进行交叉和变异操作,具体的步骤见上次发你的关于GA算法的理论说明。

   其中,关于这里交叉和变异的几个改进点如下所示:

1).交叉概率变异概率的自适应调整

   进行遗传算法的关键点之一是保证种群的多样性。遗传算法的交叉和变异的判断,就是根据每个染色体个体的最大适应度值和平均适应度的差值的大小来判断,即:

6.png

  当差值较大的时候,说明染色体差异较大,当差值较小的时候,说明染色体差异较小,当差异较小的时候,就会容易出现局部收敛。为了防止这种情况出现,我们需要自适应的调整这种变异概率和交叉概率,分别为:

7.png

  其中k1和k2为两个常数,取值为1。根据上述的步骤,可以根据染色体的实际情况,自适应的调整交叉概率,变异概率。通过上述三个步骤的改进,可以有效解决传统遗传算法中存在的局部优化的缺陷。

8.png

05).模拟退火过程

    对上述交叉变异后的个体进行模拟退火处理,获得p2’',关于模拟退火的过程,参考之前的给你写的文档,这里需要注意的是:

    在模拟退火算法中,由于允许以一定概率接受差的解,使得当前状态可能比搜索轨迹中的某些中间状态要差,从而实际算法往往最终得到近似最优解,甚至可能比中间经历的最好解差,而且搜索效率较差,为了不遗失当前最优解,并提高搜索效率,在算法搜索过程中增加记忆功能,记住中间最优解,并及时更新。

06).种群的更新:

   将种群P1和种群p2’'进行合并,构成新一代的种群。

07).进行下一个循环的迭代

根据上面的改进算法,我们进行编程,获得如下的仿真结果。

2.仿真效果预览
matlab2022a仿真结果如下:

9.png

3.MATLAB核心程序

%生产周期
ProduceA    = 15*24;
ProduceB    = 20*24;
ProduceC    = 30*24;
%三种商品的交货期限
Time_OverA = 20;
Time_OverB = 30;
Time_OverC = 40;
%定义初始化时间
Time_iniA  = 24;
Time_iniB  = 48;
Time_iniC  = 72;
%更换机器产生的延迟
Time_delay = 12;
%清洗时间
Time_wash  = [2,3,5];
%机器容量
Cap        = [20,30,50];
%设置三种产品的随机值得随机数种子
Seek_A     = 1;
Seek_B     = 2;
Seek_C     = 3;
%%%%%%%%%%%%%%此处在Simulink等效替换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% RandStream.setDefaultStream(RandStream('mt19937ar','seed',Seek_A));
A_source = floor(30*rand(1,Num))+1;
% RandStream.setDefaultStream(RandStream('mt19937ar','seed',Seek_B));
B_source = floor(20*rand(1,Num))+1;
% RandStream.setDefaultStream(RandStream('mt19937ar','seed',Seek_C));
C_source = floor(10*rand(1,Num))+1;
%计算优化前的需要的时间
%计算优化前的需要的时间
TimeA    = func_product_time(A_source,Time_iniC,ProduceC,Num,Cap,3)
TimeB    = func_product_time(B_source,Time_iniB,ProduceB,Num,Cap,2)
TimeC    = func_product_time(C_source,Time_iniA,ProduceA,Num,Cap,1)
MAX_Time = max([TimeA,TimeB,TimeC]);
 
TASKer   = [A_source',B_source',C_source']; 
 
%生产完一批,下一批换产品导致的延迟
A_1           = Time_iniA + Time_wash(1) + Time_delay;
A_2           = Time_iniA + Time_wash(2) + Time_delay;
A_3           = Time_iniA + Time_wash(3) + Time_delay; 
A_delays_diff = [A_1,A_2,A_3];
 
B_1           = Time_iniB + Time_wash(1) + Time_delay;
B_2           = Time_iniB + Time_wash(2) + Time_delay;
B_3           = Time_iniB + Time_wash(3) + Time_delay; 
B_delays_diff = [B_1,B_2,B_3];
 
C_1           = Time_iniC + Time_wash(1) + Time_delay;
C_2           = Time_iniC + Time_wash(2) + Time_delay;
C_3           = Time_iniC + Time_wash(3) + Time_delay; 
C_delays_diff = [C_1,C_2,C_3];
%生产完一批,下一批还是生产同样的产品(根据修改后的要求可知,只要是同一批产品,则可以连续生产)
A_1           = 0;
A_2           = 0;
A_3           = 0; 
A_delays_same = [A_1,A_2,A_3];
 
B_1           = 0;
B_2           = 0;
B_3           = 0; 
B_delays_same = [B_1,B_2,B_3];
 
C_1           = 0;
C_2           = 0;
C_3           = 0; 
C_delays_same = [C_1,C_2,C_3];
 
for i = 1:Num
    Machine_sel{i,1} = [3,3,3];
    Machine_sel{i,2} = [2,2,2];
    Machine_sel{i,3} = [1,1,1];
end
%根据每个机器的容量,来等效出每个单个订单的生产时间,但在后面计算过程中,当期满足判决条件的时候,时间则为72,96或者120
for i = 1:Num
    Machine_time{i,1} = [C_source(i)/Cap(1)*ProduceC,B_source(i)/Cap(1)*ProduceB,A_source(i)/Cap(1)*ProduceA];
    Machine_time{i,2} = [C_source(i)/Cap(2)*ProduceC,B_source(i)/Cap(2)*ProduceB,A_source(i)/Cap(2)*ProduceA];
    Machine_time{i,3} = [C_source(i)/Cap(3)*ProduceC,B_source(i)/Cap(3)*ProduceB,A_source(i)/Cap(3)*ProduceA];
end
 
%一下是遗传算法的一些参数
%个体
Num_gene  = 20;        
%遗传次数
Iteration = 1000;      
%代沟
DG        = 0.9;      
%交叉率
cross_rate= 0.8;  
%变异率
by_rate   = 0.2;   
%计数器
Cnter     = 0;          
 
[Nums_time,Num_ABC] = size(Machine_sel);  
Best_save           = zeros(2, Iteration); 
All_Number          = Nums_time*Num_ABC;    
Number              = zeros(1,Nums_time);
for i=1:Nums_time
    Number(i)=Num_ABC;     
end
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%01)种群的初始化
Random_save_machine = zeros(Num_gene,2*All_Number);
for j=1:Num_gene
    Number2=Number;
    for i=1:All_Number
        %产品编号ABC - > 123
        val = unidrnd(Nums_time);
        while Number2(val)==0
              val = unidrnd(Nums_time);
        end
        
        %产品编号
        Random_save_machine(j,i) = val;
        Number2(val)             = Number2(val)-1;
        
        %机器编号
        Temp     = Machine_sel{val,Num_ABC-Number2(val)};
        SizeTemp = length(Temp);
        %随机产品机器
        Random_save_machine(j,i+All_Number) = unidrnd(SizeTemp);
    end
end
%定义fitness
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%02)定义优化目标函数
[Value_Product,ObjV,Product,Genes] = func_fitness(Random_save_machine,Num_machine,Machine_time,Machine_sel);  
s = RandStream('mt19937ar','Seed',0);
RandStream.setGlobalStream(s);
%开始优化迭代
%设置模拟退火算法参数
%初始温度
T   = 1000;   
%温度降低参数
a   = 0.99;   
%记录模拟退火次数
kkk = 1;   
 
while Cnter <= Iteration
    Cnter
    isover    = 0;
    if Cnter == 0
       %交叉率
       cross_rate0 = 0.8;  
       %变异率
       by_rate0    = 1 - cross_rate0;  
       cross_rate  = cross_rate0;
       by_rate     = by_rate0;
    else
       %交叉率
       cross_rate  = cross_rate0*(1-exp(1/(1+Cnter))/8);  
       %变异率
       by_rate     = 1 - cross_rate;  
    end
    
    %适应度值
    Value_fit = ranking(ObjV);  
    %选择
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %03)保留一部分最优的个体直接复制到新一代,这些群体定义为:
    GA_Oper   = select('rws', Random_save_machine, Value_fit, DG);      
    
    %04)没有被保留的部分进行交叉和变异操作
    %交叉
    GA_Oper   = func_Gene_cross(GA_Oper,cross_rate,Machine_sel,Machine_time);          
    %变异
    GA_Oper   = func_aberrance(GA_Oper,by_rate,Machine_sel,Machine_time);            
    
    %适应度值
    [Value_Product,Obj_Product,Product,Genes,TYPE] = func_fitness(GA_Oper,Num_machine,Machine_time,Machine_sel);   
    %新种群
    [Random_save_machine,ObjV]                     = reins(Random_save_machine, GA_Oper,1, 1, ObjV, Obj_Product); 
    
    Cnter              = Cnter + 1;       
    %保存最值
    Best_save(1,Cnter) = min(ObjV);       
    Best_save(2,Cnter) = mean(ObjV);  
    
    %05)模拟退火过程
    [newbestfitness,newbestindex]=min(ObjV);
    [worestfitness,worestindex]  =max(ObjV);
    
    if Cnter == 1
       [bestfitness,bestindex]=min(ObjV); 
       bestchrom   = Random_save_machine(bestindex,:);
    else
        %代替上一次进化中最好的染色体
        if bestfitness>= newbestfitness
           bestfitness = newbestfitness;
           bestchrom   = Random_save_machine(newbestindex,:);
        else
           bh      = bestfitness-newbestfitness;
           cc(kkk) = bh/T;
           aa(kkk) = exp(bh/T);
           if exp(1000*bh/T) > rand/5
              kkk         = kkk+1;
              bestfitness = newbestfitness;
              bestchrom   = Random_save_machine(newbestindex,:);
           end
        end
    end
    T=T*a;   %温度降低
    Random_save_machine(worestindex,:) = bestchrom;
    ObjV(worestindex)                  = bestfitness;
 
    %延期判决
    if isover == 1
       Cnter = Cnter-1;%重新开始本次迭代
    else
       Cnter =Cnter;  
    end
    Best_V(Cnter)  = mean(ObjV);
    if Cnter <= 64
       Best_V2(Cnter)  = mean(Best_V(1:Cnter));
    else
       Best_V2(Cnter)  = mean(Best_V(Cnter-64:Cnter)); 
    end 
end
 
 
%描绘解的变化
figure;
plot(Best_V2,'Linewidth',2);
grid on
xlabel('Iteration Number');
ylabel('GA & SA values');
02_024m
相关文章
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
1月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
1月前
|
算法 决策智能
基于SA模拟退火优化算法的TSP问题求解matlab仿真,并对比ACO蚁群优化算法
本项目基于MATLAB2022A,使用模拟退火(SA)和蚁群优化(ACO)算法求解旅行商问题(TSP),对比两者的仿真时间、收敛曲线及最短路径长度。SA源于金属退火过程,允许暂时接受较差解以跳出局部最优;ACO模仿蚂蚁信息素机制,通过正反馈发现最优路径。结果显示SA全局探索能力强,ACO在路径优化类问题中表现优异。
|
1月前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
1月前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15

热门文章

最新文章