天天看點

基于象鼻蟲損害優化算法的TSP問題求解(Matlab代碼實作)

 📝個人首頁:​​研學社的部落格​​ 

💥💥💞💞歡迎來到本部落格❤️❤️💥💥

🏆部落客優勢:🌞🌞🌞部落格内容盡量做到思維缜密,邏輯清晰,為了友善讀者。

⛳️座右銘:行百裡者,半于九十。

目錄

​​💥1 概述​​

​​📚2 運作結果​​

​​🎉3 參考文獻​​

​​🌈4 Matlab代碼實作​​

💥1 概述

象鼻蟲是一種長着細長鼻子的昆蟲,來自Curculionoide超科,約有97000種。其中大多數認為害蟲會造成環境破壞,但一些種類,如小麥象鼻蟲、玉米象鼻蟲和棉鈴象鼻蟲,以對農作物,尤其是谷物造成巨大破壞而聞名。這項研究提出了一種新的基于群的元啟發式算法,稱為象鼻蟲損傷優化算法(WDOA),該算法模拟了象鼻蟲的飛行能力、鼻部力量和對作物或農産品的損傷能力。用12個基準單峰和多峰人工景觀或優化測試函數對所提出的算法進行了測試。此外,所提出的WDOA被用于五個工程問題,以檢查其解決問題的魯棒性。問題包括旅行推銷員問題(TSP)、n-Queens問題、投資組合問題、最優庫存控制問題(OIC)和裝箱問題(BPP)。所有測試的功能都與廣泛使用的粒子群優化(PSO)、遺傳算法(GA)、和諧搜尋(HS)算法、帝國主義競争算法(ICA)、螢火蟲算法(FA)和差分進化(DE)算法等基準算法進行了比較。此外,所有問題都用DE、FA和HS算法進行了測試,所提出的算法通過提供精确性和合理的速度,在所有函數和問題上表現出魯棒性和速度。

算法文章來源:

基于象鼻蟲損害優化算法的TSP問題求解(Matlab代碼實作)

然後本文基于象鼻蟲損害優化算法的TSP問題求解,用Matlab代碼實作。

📚2 運作結果

基于象鼻蟲損害優化算法的TSP問題求解(Matlab代碼實作)
基于象鼻蟲損害優化算法的TSP問題求解(Matlab代碼實作)

 部分代碼:

%% Problem 

model=MakeModel3();

CostFunction=@(s) CostF(s,model);        % Cost Function

nVar=model.n;             % Number of Decision Variables

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

VarMin=0;                 % Lower Bound of Variables

VarMax=1;                 % Upper Bound of Variables

%% WDOA Parameters

MaxIt = 300;          % Maximum Number of Iterations

nPop = 50;            % Number of weevils 

DamageRate = 0.3;                   % Damage Rate

nweevil = round(DamageRate*nPop);   % Number of Remained weevils

nNew = nPop-nweevil;                % Number of New weevils

mu = linspace(1, 0, nPop);          % Mutation Rates

pMutation = 0.2;                    % Mutation Probability

MUtwo = 1-mu;                       % Second Mutation

SnoutPower = 0.8;                   % Weevil Snout power Rate

FlyPower = 0.03*(VarMax-VarMin);    % Weevil Fly Power Rate

%% Basics

% Empty weevil

weevil.Position = []; 

weevil.Cost = [];

weevil.Sol = [];

% Weevils Array

pop = repmat(weevil, nPop, 1);

% First weevils

for i = 1:nPop

pop(i).Position = unifrnd(VarMin, VarMax, VarSize);

[pop(i).Cost pop(i).Sol] = CostFunction(pop(i).Position);

end;

% Sort 

[~, SortOrder] = sort([pop.Cost]);pop = pop(SortOrder);

% Best Solution

BestSol = pop(1);

% Best Costs Array

BestCost = zeros(MaxIt, 1);

🎉3 參考文獻

​​🌈​​4 Matlab代碼實作

繼續閱讀