|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 uperrua 于 2021-3-1 09:56 编辑 & U7 E% O$ U G( o# T6 m' q7 R) g
" S" F2 d2 h L" A' x; Z, P( r4 t一、简介9 T& M( Q _# U
本文提出了一种新的基于自然启发的人本优化算法:冠状病毒群免疫优化算法(CHIO)。: n! U: q8 E: s: C) K5 `
; i& v- s2 u# }0 `$ v0 j3 E
In this paper, a new nature-inspired human-based optimization algorithm is proposed which is called coronavirus herd immunity optimizer (CHIO).3 m; X. v0 P h# Y2 s+ J
/ b1 c9 a) N3 W& @CHIO的灵感来源于群体免疫概念,作为应对冠状病毒大流行(COVID-19)的一种方法。# a; s0 Q8 H; q
" w1 @- c) E- n$ K$ ?( \* }The inspiration of CHIO is originated from the herd immunity concept as a way to tackle coronavirus pandemic (COVID-19).
* e6 P2 ~1 p& b! o3 e! h: P5 ]7 G' ^- e o
冠状病毒感染的传播速度取决于感染者如何与其他社会成员直接接触。; z% l2 @6 s3 c$ y [; _ e
7 V8 f ~( H$ u+ a( s, Q
The speed of spreading coronavirus infection depends on how the infected individuals directly contact with other society members.& |& ~. x; { |. b% I8 y. y* p
0 O- Q8 j5 q4 d5 @9 D. X
为了保护其他社会成员免受疾病的侵害,健康专家建议保持社会距离。! v6 \0 M, s. N9 w8 D, |" o5 [
4 E S4 f/ L/ ^: F' `# n" bIn order to protect other members of society from the disease, social distancing is suggested by health experts.
1 j9 c' L* v6 a1 ^, k& B; D: @; F t; }, R, |8 I& C9 _$ E
群体免疫是一种状态,当大多数人免疫时,人群达到这种状态,从而防止疾病传播。% A1 S% D6 j: ^+ V- ~
- D& X, u- ?" HHerd immunity is a state the population reaches when most of the population is immune which results in the prevention of disease transmission.3 A7 C% a/ i/ V2 H
9 o6 w% E0 ^: k) C g* [- {这些概念是根据优化理论建模的。3 N2 }6 L; Q ?
5 G1 C7 H( R0 K6 E/ M5 ~These concepts are modeled in terms of optimization concepts. L1 c( f" H5 y _' o
- R- M. D; y; y
CHIO模仿了群体免疫策略和社会距离概念。$ A/ }6 F; P2 F* N) t+ g8 z
' i% Y1 N; h6 X9 oCHIO mimics the herd immunity strategy as well as the social distancing concepts.
0 O2 A* y/ @' L- X& W9 g- o! p4 \; @" \# a3 p) c: i( y
群体免疫利用了三种类型的个体病例:易感、感染和免疫。4 J( a3 W$ _$ w1 a7 o
# f# D) |1 C" Q/ S9 g' H+ uThree types of individual cases are utilized for herd immunity: susceptible, infected, and immuned.4 Z. D( }5 S+ a& P1 A
& d6 O6 p" h, r( S% C! g
这是为了确定如何用社会距离策略更新其基因产生的解决方案。! L! _4 P* Q/ D" b- I' I& B
# O c" ~1 l+ l7 O; ]( c4 U
This is to determine how the newly generated solution updates its genes with social distancing strategies.6 M* C1 k$ B1 `! r6 u" R2 |
& e3 M8 W$ _1 z
CHIO使用23个著名的基准函数进行评估。
: A! \% M( y4 @* M6 L5 v$ R' O6 g% A
% O" m6 E: [$ k. `CHIO is evaluated using 23 well-known benchmark functions.3 v5 k- Y* K+ T0 s: I% h) r
% N* {: D3 A4 J o7 M首先,研究了CHIO对其参数的敏感性。
$ u6 r5 Y; ]' n0 C; A
9 l7 L0 o3 [) f2 }3 _Initially, the sensitivity of CHIO to its parameters is studied.9 R" g4 N# U% o% U# @. D: A9 A0 H
" h8 R: t4 v2 l% M# g! b" P; D* b在此基础上,对现有的七种方法进行了比较评价。
1 I! |9 J9 M6 F" G& [. u- \& t) m4 W- V2 n9 Z4 n
Thereafter, the comparative evaluation against seven state-of-the-art methods is conducted.
( _' b7 ~+ s6 @* X
m, }5 x: }$ H1 O1 X4 Z通过对比分析,证实了CHIO与其他成熟方法相比,能够产生非常有竞争力的结果。2 d h# V$ b2 i) O. i1 g
' s" M, K0 R- N. H5 `+ c1 I
The comparative analysis verifies that CHIO is able to yield very competitive results compared to those obtained by other well-established methods.
( M0 K7 I+ V+ K: U( e+ ^9 R" g3 u9 c
- Q2 `5 A' X4 P$ J9 y; d, [: `为了进一步验证,使用了从IEEE-CEC 2011中提取的三个实际工程优化问题。
% M5 m1 k- K" S* {2 s
- d; {1 y5 |! J$ I" fFor more validations, three real-world engineering optimization problems extracted from IEEE-CEC 2011 are used.- \1 {* S. R( n
+ E i$ |( R+ y: L( S
同样,CHIO被证明是有效的。
* p$ U/ g2 R* o( K
+ S6 E$ p( T6 nAgain, CHIO is proved to be efficient.& R, `) p2 L" N4 b
; m0 ^& n0 \; j/ ], q总之,CHIO是一个非常强大的优化算法,可以用来解决跨各种优化领域的许多优化问题。# H z, g" M9 [! b& V3 }4 B
4 L' j9 ]! P# M
In conclusion, CHIO is a very poweRFul optimization algorithm that can be used to tackle many optimization problems across a wide variety of optimization domains.
0 j; C! y1 d5 H$ O0 a' B6 s3 o: h4 ~$ S
二、源代码
: ?) X) P0 [0 N" b1 H5 {%=======================================================================
3 F( C' q+ }6 b! v( F8 V4 D% Coronavirus herd immunity optimizer (CHIO)$ d/ Q, x1 M. ^+ q4 a
' n0 W) A& @ r% Z6 j/ A
% All rights reserved.
! C$ o% W8 ~0 P1 q%=======================================================================5 }& ]% b- r, s8 w: e3 y$ e
1 w& h9 ?7 t6 M+ g6 [5 T. H, u
; \/ ]- {8 }5 ^% u. d
clear all y& P& `0 J& i+ c0 B1 c" Y; w7 U- t
close all' [% O/ \0 {# E. J! i
clc1 w. k5 ]" k" C, H) \, ]0 b# `+ [
$ O% ~: b0 p" q* F1 |PopSize=30; %/* The number of Solutions*/
$ V9 ^: r9 r: [" n
* r- \- l/ @) I7 M0 B/ ]8 l9 ^MaxAge = 100;
* P' X6 P5 J1 k9 W" | 4 Q) o3 b$ [! r
C0 = 1; % number of solutions have corona virus9 L* f- \' D- v5 `1 N) Q1 U
0 L; G5 ?" r; CMax_iter=100000; %/*The number of cycles for foraging {a stopping criteria}*/
4 L- M3 n" H# |! B4 M& M/ f- I) g # {$ M* b: o8 c0 A. b3 d
SpreadingRate = 0.05; % Spreading rate parameter
. F/ }; q& V" q' y- Q9 u . r+ C2 U0 F @6 m, Q) W
runs = 1;%/*Algorithm can be run many times in order to see its robustness*/# v$ A3 g" D3 g! w$ p1 g# x {$ E0 n7 @& T
- s/ a) \+ _. j- L5 B6 M- y
ObjVal = zeros(1,PopSize);
0 g3 J7 M. S' W2 Q8 T% e
; x. J _9 z$ iAge = zeros(1,PopSize);
- B" j" W; S9 ^- A- f. g
% r, B# G: }4 G/ hBestResults = zeros(runs,1); % saving the best solution at each run H( S% {+ M! y& v0 j, i4 F* \
" `! U+ I# ^2 K/ M. Tfor funNum=7:7 % fun#1 to fun#23" i/ U- `+ Q/ h
if(funNum==1)
3 P; `7 u- G) n Function_name='F1';
C7 c8 d% d" f; r elseif(funNum==2)$ D3 n/ M0 @6 I5 H5 D
Function_name='F2';/ F+ K2 t( F2 u& w
elseif(funNum==3)
1 X! H1 [- y2 p! q G+ { Function_name='F3';: L# _" M( J7 \
elseif(funNum==4)
g4 h1 m6 G9 Q( z0 p Function_name='F4';
) A" x+ k1 S# }* I7 Z4 @: @ elseif(funNum==5)
( O2 Q3 \/ C' W+ O* T Function_name='F5';8 b; G4 U" \* Y) ~: v& E6 M
elseif(funNum==6)
$ q, \: N3 k1 _ ]' o f Function_name='F6';% ?# I$ P$ U- V w6 Z" a
elseif(funNum==7)) i# B0 R! O0 K# j
Function_name='F7';, D3 o3 `' q" _1 Y! C
elseif(funNum==8)
/ M+ S* ]) W' W+ r' B7 B- q Function_name='F8';- x$ I' D# A1 j2 M. A( ?
elseif(funNum==9)
9 I, W! o! U" u Function_name='F9';/ K$ w' g) d+ D) U& O# `
elseif(funNum==10)
% b9 g# M [* @ U3 `: ] Function_name='F10';% [) v+ o6 ~! X6 t$ K
elseif(funNum==11)
$ [; V8 \4 v- H. L: V Function_name='F11';
/ R% F. X; o% j4 D9 K+ H7 B6 h elseif(funNum==12)% ~& Q2 v/ w% C! R5 `
Function_name='F12';* F1 `: U% K: x! J- N; x
elseif(funNum==13)
- e4 q, @5 h a Function_name='F13';
4 P5 u, n/ z- M, p elseif(funNum==14)
" r: |% S' z2 G* k8 S, ` Function_name='F14';& `( e$ S Y) d3 ^7 n3 z2 @
elseif(funNum==15)) B/ M: ?8 H k& f7 {3 i) c5 S! n! z
Function_name='F15';) S& B9 u0 r: q" C2 l3 q2 g5 _& k
elseif(funNum==16)
6 G1 X3 r' {5 O Function_name='F16';, V: P* `8 p6 ?; u
elseif(funNum==17)
- K: }) K) B! p9 j' A( A Function_name='F17';0 l6 b0 o( p+ }7 l p d' v# W
elseif(funNum==18)% a T( B2 ]& X- A% c
Function_name='F18';
. _, O; Y. D( ~! B9 t/ i% M elseif(funNum==19)4 a* W- a( X$ |; M
Function_name='F19';
( ~$ m; d9 _$ _6 n elseif(funNum==20)% y5 q3 K$ b) {7 V# O
Function_name='F20';4 c# Z4 ~, p# _1 f4 ?# Y0 b4 E9 d
elseif(funNum==21)
( [7 e. e8 K' V! k/ z$ n* q Function_name='F21';
5 f& f6 D) `9 y* ~4 [! H elseif(funNum==22)6 D: w4 N8 h$ Y" w( ^
Function_name='F22';. o. ^: V4 |2 X9 t: |* I
elseif(funNum==23), n3 H! I6 E2 u0 ~4 g- L
Function_name='F23';
8 d/ m! B& D5 o/ e/ w' B( J end
9 J- N, u$ X; ?8 k& W4 b/ d
" I# D$ y( d5 [3 |/ v % Load details of the selected benchmark function+ `* ~# z7 Z* E! O6 z0 Q( V
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);
' A* [# J* e3 t9 [! Z
{( f9 f( `# y" c6 o- a for run = 1: runs
% B! R) v* c7 g6 j7 j1 Y# ], g2 E % Initializing arrays/ I d3 S9 @8 M0 A3 Z1 o% F
swARM=zeros(PopSize,dim); B7 e$ c3 [/ M. z
9 b) ?6 c( f) L$ [6 ^ % Initialize the population/solutions! r* M0 v9 F6 a6 _7 R8 u- c8 w
swarm=initialization(PopSize,dim,ub,lb);- {. d# b6 q! I& i$ \$ v
0 w1 b8 ]% M5 G
for i=1: PopSize,( T! ]( | E$ s/ m6 p3 b' N
ObjVal(i)=fobj(swarm(i,: ));
~9 K/ K% N' o( y4 y/ R end
- o+ l7 ~1 j" r % q' C3 M; U& l+ ^* d
Fitness=calculateFitness(ObjVal);
! l9 X7 l4 a" ]8 l
# Z- f3 j9 w6 R$ u# T. P % g# i9 x( [, B" F
%% update the status of the swarms (normal, confirmed) ( v, J7 O! @: I7 n
%%the minmum C0 Immune rate will take 1 status which means . f3 n! D, W9 E$ V& P8 H, L$ X
%%infected by corona / @- ]2 p, e: |0 w$ v
$ l; Q3 P" I+ q5 S, s8 Q( n' r
Status=zeros(1,PopSize);: s$ e5 {% ]/ o# ~% [ D2 |
, d1 j4 }: k6 E0 @2 d; c7 u
for i=1: C0,$ A) p" P# T! b
Status(fix(rand*(PopSize))+1)=1; " ~1 A) q8 z0 R
end
0 L" a, ]: R4 v7 d4 t 5 R; ~6 y9 L6 Z. a' f: r& ?
%===================== loop ===================================
' l" W5 z, }1 B' f8 B tic: F) i- H4 F3 k3 p0 k1 h8 w. W
) a9 F2 Y. v* `8 w- V4 e itr=0; % Loop counter6 M% ]. {( o& K- G) ~& g' y% y+ D; K" M
9 Z4 Y+ T8 ^4 s+ G/ r
while itr<Max_iter$ S7 g! u$ C( e8 O6 d1 C. g
1 W! Y3 H4 Z) [9 c1 P for i=1: PopSize,9 {1 U( I) V7 ~' S0 I. k7 j
" y/ V1 h) v& N% D# t2 s7 R
%evaluate new solution5 u/ Q6 O- `& P/ B6 w. n* c% o" e
ObjValSol=fobj(NewSol);
9 N/ c. u# i/ F FitnessSol=calculateFitness(ObjValSol);
" R: a, d9 C+ W6 N1 g" X
6 V3 W' b7 S- Y$ G* O % Update the curent solution & Age of the current solution
: A& f7 L5 ~3 x: q if (ObjVal(i)>ObjValSol)
, C: ] ]. K6 Q0 L' V3 Z swarm(i,: )=NewSol;
6 e" Q) w! M/ _; H, y Fitness(i)=FitnessSol;# C! [2 @. @! w' U$ d* f6 M- G
ObjVal(i)=ObjValSol;) T- }/ B! g8 Q; x3 ~0 [5 x
else
2 u8 {5 J% G d% g7 r if(Status(i)==1)& t3 b! z f2 }7 q" t
Age(i) = Age(i) + 1;
" E/ i' ~# J0 v+ O5 Z( ]% j/ f end
/ Q# {0 E* O1 e9 J1 |. } end
+ S K) m0 ?' a4 _ D2 K6 U$ c. s6 @
% change the solution from normal to confirmed
, L: K, n5 E9 D+ K if ((Fitness(i) < mean(Fitness))&& Status(i)==0 && CountCornoa>0)) ?& }' D2 P8 o2 c. g
Status(i) = 1;+ N* V/ T3 i: s0 V3 x" ^% q) t
Age(i)=1; @0 q+ Q& Z3 n( L2 l
end
7 }" y" X& X: _
0 _ `, `# j& j- {6 J+ i# L % change the solution from confirmed to recovered$ Q3 x, C1 l$ D {9 \ |
if ((Fitness(i) >= mean(Fitness))&& Status(i)==1)
0 o6 x' Q n# c; I. V Status(i) = 2; ) u* ~3 H7 X+ I7 l4 x( F
Age(i)=0;
/ w$ I$ l6 Z8 J# A6 ^ end: {. e2 u5 g- c% |
% ^! g, \! \" D4 |7 b: k1 n/ I [
% killed the current soluion and regenerated from scratch
1 c0 f& I. [0 e9 y" d if(Age(i)>=MaxAge)$ y$ X9 x# Q3 e
NewSolConst = initialization(1,dim,ub,lb);; A/ D. i4 T) q
swarm(i,: ) = NewSolConst(: );; Z) d: l- \4 Y- u1 F5 @# A' O
Status(i) = 0;0 e" m5 d3 c! ^
end
( l+ L1 \% |; J' W2 s4 E, _0 H end
# J7 e6 l4 r5 l& B; q4 e( n; M
& }2 e+ V6 Q3 z( m4 b1 ? if(mod(itr,100)==0)
1 O4 l, b, g' Q display(['Fun#',num2str(funNum),' Run#', num2str(run), ', Itr ', num2str(itr), ' Results ', num2str(min(ObjVal))]);
# J* W: Y1 Z3 m( y: ]% j end
% @0 o5 g2 R3 B& S9 ~ 9 D0 i, E1 b" Y9 b, A) d2 l8 L
itr=itr+1;
4 H( @0 V4 }' s end* G( a. S+ @1 Q1 u" X/ L
' C& ]0 [3 Y3 [9 X) X5 I; P$ R$ c
toc;
$ c, R6 k: X( P& F* S$ Z
5 D1 q8 t: d* c! R7 M % Save the best results at each iteration
# p' U8 \. o( c7 c5 i, X2 @ BestResults(run)=min(ObjVal);) V/ ], G1 b% s1 ?8 l
0 `9 k% l" g" ^' z, x% g end % run
$ L5 {9 `; r% S- K1 q: Y; U/ \ _3 E
# x6 O) y+ t" L) h+ n% V4 Y fprintf(1, '\n\n Done \n\n'); 0 k' t6 { m. u5 z E: o
% N1 ?4 \! x- ?( j9 K: R
end
6 x" e/ V N$ j. J! C/ j! S) L三、运行结果+ l8 o2 f9 k* S [- B r! W
|
|