18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码Word文档格式.docx
《18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码Word文档格式.docx(6页珍藏版)》请在冰点文库上搜索。
![18基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/71337f29-0bce-4cb2-8dc8-5a589c72ff3e/71337f29-0bce-4cb2-8dc8-5a589c72ff3e1.gif)
% GreenSim团队——专业级算法设计&
代写程序
% 欢迎访问GreenSim团队主页→
%%整理输出结果Best_a=(BESTX{K})'
;
%方向向量d=zeros(n,p);
Djmax=max(D);
Djmin=min(D);
fori=1:
n
d(i,:
)=(D(i,:
)-Djmin)./(Djmax-Djmin);
endZ=zeros(n,1);
Z(i)=abs(sum(Best_a.*d(i,:
)));
endZ=abs(Z);
figure%投影散布图plot(abs(Z),'
bd'
'
LineWidth'
1,'
MarkerEdgeColor'
k'
MarkerFaceColor'
b'
MarkerSize'
5);
第6页
%axis([1,12,0,2.5]);
%图形边界根据需要显示gridon
xlabel('
'
FontName'
TimesNewRoman'
FontSize'
12);
ylabel('
ProjectiveValue'
TimesNewRoman'
Fontsize'
figure
[newZ,I]=sort(Z);
plot(abs(newZ),'
%图形边界根据需要显示
gridon
%%
disp('
最佳投影向量为'
)disp(Best_a);
function[BESTX,BESTY,ALLX,ALLY]=IGAUCP(K,N,Pm,LB,UB,D,Alpha)
%%遗传算法求解投影寻踪模型
%%输入参数列表
%K 迭代次数
%N 种群规模,要求是偶数
%Pm 变异概率
%LB 决策变量的下界,M×
1的向量
%UB 决策变量的上界,M×
%D 原始样本数据,n×
p的矩阵
%Alpha 窗口半径系数,典型取值0.1
%%输出参数列表
%BESTX K×
1细胞结构,每一个元素是M×
1向量,记录每一代的最优个体
%BESTY K×
1矩阵,记录每一代的最优个体的评价函数值
%ALLX K×
N矩阵,记录全部个体
%ALLY K×
N矩阵,记录全部个体的评价函数值
M=length(LB);
%决策变量的个数
%种群初始化,每一列是一个样本farm=zeros(M,N);
fori=1:
M
x=unifrnd(LB(i),UB(i),1,N);
farm(i,:
)=x;
end
%输出变量初始化
ALLX=cell(K,1);
%细胞结构,每一个元素是M×
N矩阵,记录每一代的个体
ALLY=zeros(K,N);
%K×
N矩阵,记录每一代评价函数值
BESTX=cell(K,1);
BESTY=zeros(K,1);
k=1;
%迭代计数器初始化
%%第二步:
迭代过程
whilek<
=K
%%以下是交叉过程
newfarm=zeros(M,2*N);
Ser=randperm(N);
%两两随机配对的配对表A=farm(:
Ser
(1));
B=farm(:
Ser
(2));
P0=unidrnd(M-1);
a=[A(p>
产生子代a
b=[B(p>
产生子代b
newfarm(:
2*N-1)=a;
%加入子代种群newfarm(:
2*N)=b;
(N-1)
A=farm(:
Ser(i));
Ser(i+1));
a=[A(p>
2*i-1)=a;
newfarm(:
2*i)=b;
FARM=[farm,newfarm];
%%选择复制
SER=randperm(3*N);
FITNESS=zeros(1,3*N);
fitness=zeros(1,N);
(3*N)
Beta=FARM(:
i);
FITNESS(i)=FIT(Beta,D,Alpha);
N
f1=FITNESS(SER(3*i-2));
f2=FITNESS(SER(3*i-1));
f3=FITNESS(SER(3*i));
iff1<
=f2&
&
f1<
=f3farm(:
i)=FARM(:
SER(3*i-2));
fitness(:
i)=FITNESS(:
elseiff2<
=f1&
f2<
SER(3*i-1));
else
farm(:
SER(3*i));
fitness(:
%%记录最佳个体和收敛曲线
X=farm;
Y=fitness;
ALLX{k}=X;
ALLY(k,:
)=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:
pos
(1));
BESTY(k)=minY;
%%变异
ifPm>
rand&
pos
(1)~=iAA=farm(:
BB=GaussMutation(AA,LB,UB);
farm(:
i)=BB;
disp(k);
k=k+1;
源代码运行结果展示
-5
-10
值数函
-15
-20
0 50 100 150 200 250 300
迭代次数
6
5
eu 4
laV
v
e 3
t
ice
r
jo
P 2
1
00 10 20 30 40 50 60 70
eu
4
ev
it
3
ce
P
2
10
20
30
40
50
60
70