帝国竞争算法ICA解决柔性作业车间调度问题FJSP

柔性作业车间

有关于柔性作业车间(FJSP)的问题描述、数学模型、编码解码,请移步我的另一篇博文:麻雀算法SSA解决柔性作业车间调度问题FJSP

下面我们直接进入 帝国竞争算法

帝国竞争算法 ICA

ICA 是一种基于帝国主义和殖民主义竞争的通用搜索算法,于 2007 年提出,该算法模拟帝国主义和殖民主义的社会历史现象,其主要步骤为初始帝国构建、殖民国家(Imperialist)与殖民地的同化和革命以及帝国竞争等行为。目前,该算法已广泛应用于科学理论和工程实践上。
ICA 可以分为初始帝国的构建、同化、革命以及帝国竞争等主要过程。

初始帝国构建

帝国构建
在这里插入图片描述

同化

同化
同化

革命和互换

革命和呼唤

帝国竞争

帝国竞争
帝国竞争

帝国竞争示意图:
在这里插入图片描述

ICA算法求解FJSP问题

部分代码
IAC.m

function ICA_Result = ICA(machineNum, jobNum, jobInfo, operaVec, candidateMachine)
disp('ICA 算法运行中....................');

%% ICA算法部分
nVar = 2 * sum(operaVec);           % 自变量维度
VarSize = [1 nVar];                 % Decision Variables Matrix Size
VarMin = -jobNum;                   % 自变量下界
VarMax = jobNum;                    % 自变量上界
MaxIt = 100;                        % 最大迭代次数
nPop = 100;                         % 种群规模
nEmp = 10;                          % Number of Empires/Imperialists
alpha = 1;                          % Selection Pressure
beta = 1.5;                         % Assimilation Coefficient
pRevolution = 0.20;                 % Revolution Probability
mu = 0.2;                           % Revolution Rate
zeta = 0.2;                         % Colonies Mean Cost Coefficient

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;

global ProblemSettings;
ProblemSettings.nVar = nVar;
ProblemSettings.VarSize = VarSize;
ProblemSettings.VarMin = VarMin;
ProblemSettings.VarMax = VarMax;


%% Initialization
% Initialize Empires
emp = CreateInitialEmpires(machineNum, jobNum, jobInfo, operaVec, candidateMachine);

% Array to Hold Best Cost Values
curve = zeros(MaxIt, 1);


%% ICA Main Loop
for it = 1:MaxIt
    
    % Assimilation
    emp = AssimilateColonies(emp, machineNum, jobNum, jobInfo, operaVec, candidateMachine);
    
    % Revolution
    emp = DoRevolution(emp, machineNum, jobNum, jobInfo, operaVec, candidateMachine);
    
    % 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
    curve(it) = BestSol.Cost;
    
    % Show Iteration Information
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(curve(it))]);
    
end


%% Results
ICA_Result.BestCost = BestSol.Cost;
ICA_Result.BestPosi = BestSol.Position;
ICA_Result.curve_min = curve;
[~, ICA_Result.machineTable] = fitness(ICA_Result.BestPosi, machineNum, jobNum, jobInfo, operaVec, candidateMachine);
end

运行结果
结果

迭代曲线
迭代曲线

甘特图
甘特图

写在最后

本文系本人原创,未经本人允许,严禁盗图、盗文!如需完整MATLAB代码,私戳博主~ ~,亦或(扣)博主 3249992049 ~ ~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值