基于GA遗传优化的flog任务调度算法matlab仿真

简介: 基于GA遗传优化的flog任务调度算法matlab仿真

1.算法仿真效果
matlab2022a仿真结果如下:
838bf4ca5db4cebd8309cbc8698a626a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
b08788b094329a4daec9c2e405f28861_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
ccefeb8b12c45c55fb93284dc69ca997_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
f4fc1d55bb07b499e9509737e6e60a34_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要

   遗传算法GA把问题的解表示成“染色体”,在算法中也即是以二进制编码的串。并且,在执行遗传算法之前,给出一群“染色体”,也即是假设解。然后,把这些假设解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉,变异过程产生更适应环境的新一代“染色体”群。这样,一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解。

   其主要步骤如下:

2.1.初始化

   选择一个群体,即选择一个串或个体的集合bi,i=1,2,...n。这个初始的群体也就是问题假设解的集合。一般取n=30-160。

   通常以随机方法产生串或个体的集合bi,i=1,2,...n。问题的最优解将通过这些初始假设解进化而求出。

2.2.选择

  根据适者生存原则选择下一代的个体。在选择时,以适应度为选择原则。适应度准则体现了适者生存,不适应者淘汰的自然法则。

给出目标函数f,则f(bi)称为个体bi的适应度。以

为选中bi为下一代个体的次数。

显然.从式(3—86)可知:

(1)适应度较高的个体,繁殖下一代的数目较多。

(2)适应度较小的个体,繁殖下一代的数目较少;甚至被淘汰。

这样,就产生了对环境适应能力较强的后代。对于问题求解角度来讲,就是选择出和最优解较接近的中间解。

3.3.交叉

   对于选中用于繁殖下一代的个体,随机地选择两个个体的相同位置,按交叉概率P。在选中的位置实行交换。这个过程反映了随机信息交换;目的在于产生新的基因组合,也即产生新的个体。交叉时,可实行单点交叉或多点交叉。

3.MATLAB核心程序

MaxIt = 60;    % 最大迭代次数
nPop  = 50;    % 人口规模
pc    = 0.8;                 % 交叉百分比
nc    = 2*round(pc*nPop/2);  % 子代数量(也包括Parnets)
pm    = 0.4;                 % 突变百分比
nm    = round(pm*nPop);      % 突变体数量
mu    = 0.05;                % 突变率
UseRandomSelection =true; 
pause(0.01); 
Best_Orchestration=[];
%初始化
for step=1:1
    S=CreatTask(S,1);
    for i=1:length(S)
        Tasks(i)=S{i}.Tasks;
    end
    empty_individual.Position = [];
    empty_individual.Cost = [];
    pop = repmat(empty_individual, nPop, 1);
    for i = 1:nPop
        %初始化位置
        pop(i).Position = randerr(SensorNum,FogNum)';
        %评价
        pop(i).Cost = NetworkModel(pop(i).Position,S,F,Tasks); 
    end
    %排序填充
    Costs = [pop.Cost];
    [Costs, SortOrder] = sort(Costs,'descend');
    pop = pop(SortOrder);
    %存储最佳解决方案
    BestSol = pop(1);
    %保持最佳成本值的阵列
    BestCost = zeros(MaxIt, 1);
    %成本
    WorstCost = pop(end).Cost;
    for it = 1:MaxIt
        it
        % Crossover
        popc = repmat(empty_individual, nc/2, 2);
        for k = 1:nc/2
            i1 = randi([1 nPop]);
            i2 = randi([1 nPop]);
            % Select
            p1 = pop(i1);
            p2 = pop(i2);
            % Perform Crossover
            [popc(k, 1).Position, popc(k, 2).Position] =MyCrossOver(p1.Position, p2.Position);
            % Evaluate Offsprings
            popc(k, 1).Cost = NetworkModel(popc(k,1).Position,S,F);
            popc(k, 2).Cost = NetworkModel(popc(k,2).Position,S,F);
        end
        popc = popc(:);
...........................................................................
        % Create Merged Population
        pop = [pop
            popc
            popm]; %#ok
        % Sort Population
        Costs = [pop.Cost];
        [Costs, SortOrder] = sort(Costs,'descend');
        pop = pop(SortOrder);
        % Update Worst Cost
        WorstCost = max(WorstCost, pop(end).Cost);
        % Truncation
        pop = pop(1:nPop);
        Costs = Costs(1:nPop);
        BestSol = pop(1);
        BestCost(it) = BestSol.Cost;
    end
    %Results
    [cost_func,total_cost(step),make_span(step),total_distance(step)]=NetworkModel(BestSol.Position,S,F)
    [rx,cx]                   = size(BestSol.Position);
    Best_Nodes_For_Tasks      = ChromosomeEncoding(BestSol.Position,rx,cx);
    Best_Orchestration(step,:)= Best_Nodes_For_Tasks;
    PlotFogCluser(F,S,Best_Nodes_For_Tasks,step);
    
    figure;
    plot(BestCost,'-bs',...
    'LineWidth',2,...
    'MarkerSize',8,...
    'MarkerEdgeColor','k',...
    'MarkerFaceColor',[0.0,0.9,0.0]);
    xlabel('Iteration');
    ylabel('Cost');
    title(['Cost function for task: ',num2str(step)])
end
A327
相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
1天前
|
数据采集 算法 数据可视化
MATLAB、R用改进Fuzzy C-means模糊C均值聚类算法的微博用户特征调研数据聚类研究
MATLAB、R用改进Fuzzy C-means模糊C均值聚类算法的微博用户特征调研数据聚类研究
|
11天前
|
文字识别 算法 计算机视觉
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
15 0
|
14天前
|
机器学习/深度学习 算法
【MATLAB】GA_ELM神经网络时序预测算法
【MATLAB】GA_ELM神经网络时序预测算法
286 9
|
1月前
|
算法
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:滑动平均滤波算法去噪及谱相减算法呈现频谱
45 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:卷积滑动平均滤波算法去噪及谱相减算法呈现频谱
33 0
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
40 1

热门文章

最新文章