【优化调度】基于帝国企鹅算法求解多扇区航空调度问题附matlab代码

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【优化调度】基于帝国企鹅算法求解多扇区航空调度问题附matlab代码

1 简介

基于帝国企鹅算法求解多扇区航空调度问题

2 部分代码

function [bestY,bestX,recording]=AFO(x,y,option,data)%% Authority%Author: Zhe Yang% E-mail: 454170989@qq.com% School:University of Manchester%% Input% x----positions of initialized populaiton% y----fitnesses of initialized populaiton% option-----parameters set of the algorithm% data------Pre-defined parameters% This parameter is used for solving complex problems is passing case data%% outPut% bestY ----fitness of best individual% bestX ----position of best individual% recording ---- somme data was recorded in this variable%% initializationpe=option.pe;L=option.L;gap0=option.gap0;gap=gap0;dim=option.dim;recording.bestFit=zeros(option.maxIteration+1,1);recording.meanFit=zeros(option.maxIteration+1,1);At=randn(option.numAgent,option.dim);count=1;%% center of population[y_c,position]=min(y);x_c=x(position(1),:);At_c=At(position(1),:);%% memory of populationy_m=y;x_m=x;%% update recordingrecording.bestFit(1)=y_c;recording.meanFit(1)=mean(y_m);%% main loopfor iter=1:option.maxIteration    %Dmp(['AFO,iter:',num2str(iter),',minFit:',num2str(y_c)])    %% Moving Strategy I for center of population    if rem(iter, gap)==0        c0=exp(-30*(iter-gap0)/option.maxIteration); % EQ.2-11        Dx=ones(1,dim);        Dx=c0*Dx/norm(Dx)*norm(option.v_ub-option.v_lb)/2; %EQ.2-12        % +△x        for j=1:dim            tempX(j,:)=x_c;             tempX(j,j)=x_c(1,j)+Dx(j);            if tempX(j,j)>option.ub(j)                tempX(j,j)=option.ub(j);                Dx(1,j)=tempX(j,j)-x_c(1,j);            end            if tempX(j,j)<option.lb(j)                tempX(j,j)=option.lb(j);                Dx(1,j)=tempX(j,j)-x_c(1,j);            end            tempY(j,:)=option.fobj(tempX(j,:),option,data);            if tempY(j)*y_c<0                g0(1,j)=(log(tempY(j))-log(y_c))./Dx(j); %EQ.2-18            else                temp=[tempY(j),y_c];                temp=temp+min(temp)+eps;                g0(1,j)=(log(temp(1))-log(temp(2)))./Dx(j);            end                 g0(isnan(g0))=0;        end        G0=-g0(1,:)*norm(option.v_ub-option.v_lb)/2/norm(g0(1,:)); % part of Eq 2-18         G0(1,G0(1,:)>option.v_ub)=G0(1,G0(1,:)>option.v_ub)/max(G0(1,G0(1,:)>option.v_ub))*max(option.v_ub(G0(1,:)>option.v_ub));        G0(1,G0(1,:)<option.v_lb)=G0(1,G0(1,:)<option.v_lb)/min(G0(1,G0(1,:)<option.v_lb))*min(option.v_lb(G0(1,:)<option.v_lb));        G01=G0;        % -△x        Dx=-ones(1,dim);        Dx=c0*Dx/norm(Dx)*norm(option.v_ub-option.v_lb)/2;        for j=1:dim            tempX(j+dim,:)=x_c;            tempX(j+dim,j)=x_c(1,j)+Dx(j);            if tempX(j+dim,j)>option.ub(j)                tempX(j+dim,j)=option.ub(j);                Dx(1,j)=tempX(j,j)-x_c(1,j);            end            if tempX(j+dim,j)<option.lb(j)                tempX(j+dim,j)=option.lb(j);                Dx(1,j)=tempX(j,j)-x_c(1,j);            end        if minY<y_c            y_c=tempY(no);            x_c=tempX(no,:);        end        if rand>(no-dim*2)/(option.numAgent-dim*2)*(option.maxIteration-iter)/option.maxIteration            gap=max(option.gapMin,gap-option.dec); %EQ.2-15        end    else        for i=1:option.numAgent            p =tanh(abs(y(i)-y_c)); %EQ.2-30              if rand<p*(option.maxIteration-iter)/option.maxIteration                % EQ 2-28                At(i,:)=option.w2*At(i,:)+option.w4*rand(size(x(1,:))).*(x_c-x(i,:))+option.w5*rand(size(x(1,:))).*(x_m(i,:)-x(i,:));                x(i,:)=x(i,:)+At(i,:); %EQ 2-29                x(i,:)=checkX(x(i,:),option,data);                tempY(i,:)=y(i);                y(i)=option.fobj(x(i,:),option,data);                if tempY(i,:)<y(i)                    for j=1:dim                        r1=randi(option.numAgent);                        r2=randi(option.numAgent);                        v(i,j)=rand.*(x_m(r1,j)-x_m(r2,j))*-sign(y_m(r1)-y_m(r2));                        if std(x_m(:,j))<=exp(-20*iter/option.maxIteration)*(option.v_ub(j)-option.v_lb(j))/2                            if v(i,j)==0                                v(i,j)=randn*(option.v_ub(j)-option.v_lb(j))/2;                            else                                v(i,j)=rand.*sign(x_m(r1,j)-x_m(r2,j))*-sign(y_m(r1)-y_m(r2))*(option.v_ub(j)-option.v_lb(j))/2;                            end                        end                    end                end            else                g0=randn(size(At_c));                r1=randi(option.numAgent);                r2=randi(option.numAgent);    end    if count>L        for i=1:option.numAgent            x(i,:)=(option.ub-option.lb)*rand+option.lb;            y(i)=option.fobj(x(i,:),option,data);            if y(i)<y_m(i)                y_m(i)=y(i);                x_m(i,:)=x(i,:);                if y_m(i)<y_c                    y_c=y_m(i);                    x_c=x_m(i,:);                    At_c=At(i,:);                end            end        end        count=0;    end    %% 更新记录    recording.bestFit(1+iter)=y_c;    recording.meanFit(1+iter)=mean(y_m);%     recording.std(1+iter)=mean(std(x_m));%     recording.DC(1+iter)=norm(x_m-repmat(x_c,option.numAgent,1));%     recording.x1(1+iter,:)=x(1,:);endbestY=y_c;bestX=x_c;end%%

3 仿真结果

4 参考文献

[1]芮钧, 陈守伦. MATLAB粒子群算法工具箱求解水电站优化调度问题[J]. 中国农村水利水电, 2009(1):3.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
67 1
|
2月前
|
存储 缓存 算法
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
|
2月前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
13天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
1天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
1天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
6天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
9天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
5天前
|
算法
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。

热门文章

最新文章