【智能优化算法】基于帝国竞争算法求解单目标优化问题附matlab代码

1 简介

帝国竞争算法(imperialist competitive algorithm,ICA)是Atashpaz-Gargari和Lucas于2007年提出的一种基于帝国主义殖民竞争机制的进化算法,属于社会启发的随机优化搜索方法。目前,ICA已被成功应用于多种优化问题中,如调度问题、分类问题和机械设计问题等。

帝国主义竞争算法,借鉴了人类历史上政治社会殖民阶段帝国主义国家之间的竞争、占领、吞并殖民殖民地国家从而成为帝国国家的演化,是一种全局性的优化算法。该算法把所有初始化的个体都称作国家,按照国家势力分成帝国主义国家及殖民地两种,前者优势大于后者。

其实,从另一个角度来看,ICA可以被认为是遗传算法(GA)的社会对应物。ICA是基于人类社会进化的过程,而GA是基于物种的生物进化过程。二者其实有异曲同工之妙。

2 部分代码

%

clc;

clear;

close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);        % Cost Function

nVar=5;             % Number of Decision Variables

VarSize=[1 nVar];   % Decision Variables Matrix Size

VarMin=-10;         % Lower Bound of Variables

VarMax= 10;         % Upper Bound of Variables

%% ICA Parameters

MaxIt=1000;         % Maximum Number of Iterations

nPop=50;            % Population Size

nEmp=10;            % Number of Empires/Imperialists

alpha=1;            % Selection Pressure

beta=1.5;           % Assimilation Coefficient

pRevolution=0.05;   % Revolution Probability

mu=0.1;             % Revolution Rate

zeta=0.2;           % Colonies Mean Cost Coefficient

%% Globalization of Parameters and Settings

global ProblemSettings;

ProblemSettings.CostFunction=CostFunction;

ProblemSettings.nVar=nVar;

ProblemSettings.VarSize=VarSize;

ProblemSettings.VarMin=VarMin;

ProblemSettings.VarMax=VarMax;

global ICASettings;

ICASettings.MaxIt=MaxIt;

ICASettings.nPop=nPop;

ICASettings.nEmp=nEmp;

ICASettings.alpha=alpha;

ICASettings.beta=beta;

ICASettings.pRevolution=pRevolution;

ICASettings.mu=mu;

ICASettings.zeta=zeta;

%% Initialization

% Initialize Empires

emp=CreateInitialEmpires();

% Array to Hold Best Cost Values

BestCost=zeros(MaxIt,1);

%% ICA Main Loop

for it=1:MaxIt


    % Assimilation

    emp=AssimilateColonies(emp);


    % Revolution

    emp=DoRevolution(emp);


    % Intra-Empire Competition

    emp=IntraEmpireCompetition(emp);


    % Update Total Cost of Empires

    emp=UpdateTotalCost(emp);


    % Inter-Empire Competition

    emp=InterEmpireCompetition(emp);


    % Update Best Solution Ever Found

    imp=[emp.Imp];

    [~, BestImpIndex]=min([imp.Cost]);

    BestSol=imp(BestImpIndex);


    % Update Best Cost

    BestCost(it)=BestSol.Cost;


    % Show Iteration Information

    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);


end

%% Results

figure;

%plot(BestCost,'LineWidth',2);

semilogy(BestCost,'LineWidth',2);

xlabel('Iteration');

ylabel('Best Cost');

grid on;

3 仿真结果

4 参考文献

[1]曲倩雯. 基于ICA和GA混合算法的装配序列规划研究. Diss. 山东大学, 2016.

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

部分理论引用网络文献,若有侵权联系博主删除。完整代码获取关注微信公众号天天matlab

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容