我是靠谱客的博主 无私煎饼,这篇文章主要介绍差分进化算法例题(题目和解答以及Matlab代码),现在分享给大家,希望可以做个参考。

题目:计算函数f(x)= ∑ i = 1 n x i 2 sum_{i=1}^{n}x_i^2 i=1nxi2(-20≤ x i x_i xi≤20)的最小值,其中个体x的维数n=10。
解答:优化结束后,根据所得的图可知,优化后的结果为x=[0.0007 -0.0010 0.0014 -0.0007 0.0015 -0.0005 -0.0001 -0.0008 -0.0019 -0.0011],

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
clear all; %清除所有变量 close all; %清图 clc; %清屏 NP=50; %种群数量 D=10; %变量的维数 G=200; %最大进化代数 F0=0.4; %初始变异算子 CR=0.1; %交叉算子 Xs=20; %上限 Xx=-20; %下限 yz=10^-6; %阈值 %赋初值 x=zeros(D,NP); %初始种群 v=zeros(D,NP); %变异种群 u=zeros(D,NP); %选择种群 x=rand(D,NP)*(Xs-Xx)+Xx; %赋初值 %计算目标函数 for m=1:NP Ob(m)=func1(x(:,m)); end trace(1)=min(Ob); %差分进化循环 for gen=1:G %变异操作 自适应变异算子 lamda=exp(1-G/(G+1-gen)); F=F0*2^(lamda); %r1,r2,r3,m互不相同 for m=1:NP r1=rand(1,1,[1,NP]); while(r1==m) r1=randi(1,1,[1,NP]); end r2=randi(1,1,[1,NP]); while(r2==m)|(r2==r1) r2=randi(1,1,[1,NP]); end r3=randi(1,1,[1,NP]); while(r3==m)|(r3==r1)|(r3==r2) r3=randi(1,1,[1,NP]); end v(:,m)=x(:,r1)+F*(x(:,r2)-x(:,r3)); end %交叉操作 r=randi(1,1,[1,D]); for n=1:D cr=rand(1); if(cr<=CR)|(n==r) u(n,:)=v(n,:); else u(n,:)=x(n,:); end end %边界条件的处理 for n=1:D for m=1:NP if(u(n,m)<Xx)|(u(n,m)>Xs) u(n,m)=rand*(Xs-Xx)+Xx; end end end %选择操作 for m=1:NP Ob1(m)=func1(u(:,m)); end for m=1:NP if Ob1(m)<Ob(m) x(:,m)=u(:,m); end end for m=1:NP Ob(m)=func1(x(:,m)); end trace(gen+1)=min(Ob); if min(Ob)<yz break end end [SortOb,Index]=sort(Ob); x=x(:,Index); X=x(:,1); %最优变量 Y=min(Ob); %最优值 %画图 figure plot(trace); xlabel('迭代次数'); ylabel('目标函数值'); title('DE 目标函数曲线'); %适应度函数 function result=func1(x); summ=sum(x.^2); result=summ; end

最后

以上就是无私煎饼最近收集整理的关于差分进化算法例题(题目和解答以及Matlab代码)的全部内容,更多相关差分进化算法例题(题目和解答以及Matlab代码)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部