基于蜜蜂算法的资源受限项目优化调度(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码实现

💥1 概述

     资源受限项目调度问题(Resource-constrained Project Scheduling Problem,RCPSP)是项目管理领域的一类重要问题,是指在满足项目资源约束以及活动时序约束的条件下,通过合理分配资源,为项目中的每一个活动安排起始时间,从而实现项目管理目标的最优化。RCPSP问题广泛存在于各个生产领域,对于企业缩短项目工期、降低生产成本具有重要的经济意义同时对于社会节约资源、减少浪费具有显著的生态意义。此外,RCPSP在理论上属于组合优化问题,具有NP-hard性为求解该问题学者进行了大量的研究,主要提出精确算法和启发式算法两类方法但现有求解方法和实际应用之间仍然有较大差距。因此,本文研究资源受限项目调度问题具有重要的理论价值和实际意义。

📚2 运行结果

部分代码:

clc;
clear;
close all;
global NFE;
NFE=0;

%% Problem 
model=CreateModel2();
CostFunction=@(x) MyCost(x,model);        % Cost Function
nVar=model.N;             % Number of Decision Variables
VarSize=[1 nVar];   % Size of Decision Variables Matrix
VarMin=0;         % Lower Bound of Variables
VarMax=1;         % Upper Bound of Variables

%% DE Parameters
MaxIt = 100;      % Maximum Number of Iterations
nPop = 20;        % Population Size
beta_min = 0.2;   % Lower Bound of Scaling Factor
beta_max = 0.8;   % Upper Bound of Scaling Factor
pCR = 0.2;        % Crossover Probability

%% Start
empty_individual.Position = [];
empty_individual.Cost = [];
empty_individual.Sol = [];
BestSol.Cost = inf;
pop = repmat(empty_individual, nPop, 1);
for i = 1:nPop
pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
[pop(i).Cost pop(i).Sol] = CostFunction(pop(i).Position);
if pop(i).Cost<BestSol.Cost
BestSol = pop(i);
end
end
BestCost = zeros(MaxIt, 1);

%% DE
for it = 1:MaxIt
for i = 1:nPop
x = pop(i).Position;
A = randperm(nPop);
A(A == i) = [];
a = A(1);
b = A(2);
c = A(3);

% Mutation
%beta = unifrnd(beta_min, beta_max);
beta = unifrnd(beta_min, beta_max, VarSize);
y = pop(a).Position+beta.*(pop(b).Position-pop(c).Position);
y = max(y, VarMin);
y = min(y, VarMax);
% Crossover
z = zeros(size(x));
j0 = randi([1 numel(x)]);
for j = 1:numel(x)
if j == j0 || rand <= pCR
z(j) = y(j);
else
z(j) = x(j);
end
end
NewSol.Position = z;
[NewSol.Cost NewSol.Sol] = CostFunction(NewSol.Position);
if NewSol.Cost<pop(i).Cost
pop(i) = NewSol;
if pop(i).Cost<BestSol.Cost
BestSol = pop(i);
end
end
end
% Update Best Cost
BestCost(it) = BestSol.Cost;
nfe(it)=NFE;
% Show Iteration Information
disp(['Iteration ' num2str(it) ': DE Best Cost = ' num2str(BestCost(it))]);
end

🎉3 参考文献

[1]刘燕. 基于改进遗传算法的资源受限项目调度优化研究[D].南京财经大学,2019.DOI:10.27705/d.cnki.gnjcj.2019.000090.

👨‍💻4 Matlab代码实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝科研社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值