欢迎访问GreenSim团队主页→/greensim邮箱:****************
第1页
基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型
MATLAB源代码
投影寻踪是一种处理多因素复杂问题的统计方法,其基本思路是将高维数据
向低维空间进行投影,通过低维投影数据的散布结构来研究高维数据特征,可用
于聚类、分类、综合评价、预测等。投影寻踪模型最终可归结为一个非线性连续
函数优化模型,可以采用遗传算法、粒子群算法、人工鱼群算法或人工免疫克隆
优化算法等进行求解,得到最优的投影向量。
%%第一步:仿真参数设置
clc
clear
cloall
D=data1;%导入D矩阵
[n,p]=size(D);
K=300;%迭代次数
N=100;%种群规模
Pm=0.3;%变异概率
LB=-ones(1,p);%决策变量的下界
UB=ones(1,p);%决策变量的上界
Alpha=0.1;%窗口半径系数,典型取值0.1b
%%调用遗传算法
[BESTX,BESTY,ALLX,ALLY]=GAUCP(K,N,Pm,LB,UB,D,Alpha);
%GreenSim团队——专业级算法设计&代写程序
%欢迎访问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);
end
Z=zeros(n,1);
fori=1:n
Z(i)=abs(sum(Best_a.*d(i,:)));
欢迎访问GreenSim团队主页→/greensim邮箱:****************
第2页
end
Z=abs(Z);
figure%投影散布图
plot(abs(Z),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);
%axis([1,12,0,2.5]);%图形边界根据需要显示
gridon
xlabel('','FontName','TimesNewRoman','FontSize',12);
ylabel('ProjectiveValue','FontName','TimesNewRoman','Fontsize',12);
figure
[newZ,I]=sort(Z);
plot(abs(newZ),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFaceColor','b','MarkerSize',5);
%axis([1,12,0,2.5]);%图形边界根据需要显示
gridon
xlabel('','FontName','TimesNewRoman','FontSize',12);
ylabel('ProjectiveValue','FontName','TimesNewRoman','Fontsize',12);
%%
disp('最佳投影向量为')
disp(Best_a);
function[BESTX,BESTY,ALLX,ALLY]=IGAUCP(K,N,Pm,LB,UB,D,Alpha)
%%遗传算法求解投影寻踪模型
%GreenSim团队——专业级算法设计&代写程序
%欢迎访问GreenSim团队主页→/greensim
%%输入参数列表
%K迭代次数
%N种群规模,要求是偶数
%Pm变异概率
%LB决策变量的下界,M×1的向量
%UB决策变量的上界,M×1的向量
%D原始样本数据,n×p的矩阵
%Alpha窗口半径系数,典型取值0.1
%%输出参数列表
%BESTXK×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体
%BESTYK×1矩阵,记录每一代的最优个体的评价函数值
%ALLXK×1细胞结构,每一个元素是M×N矩阵,记录全部个体
%ALLYK×N矩阵,记录全部个体的评价函数值
%%第一步:
M=length(LB);%决策变量的个数
%种群初始化,每一列是一个样本
farm=zeros(M,N);
fori=1:M
x=unifrnd(LB(i),UB(i),1,N);
farm(i,:)=x;
end
欢迎访问GreenSim团队主页→/greensim邮箱:****************
第3页
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体
BESTY=zeros(K,1);%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(1:P0,:);B((P0+1):end,:)];%产生子代a
b=[B(1:P0,:);A((P0+1):end,:)];%产生子代b
newfarm(:,2*N-1)=a;%加入子代种群
newfarm(:,2*N)=b;
fori=1:(N-1)
A=farm(:,Ser(i));
B=farm(:,Ser(i+1));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];
b=[B(1:P0,:);A((P0+1):end,:)];
newfarm(:,2*i-1)=a;
newfarm(:,2*i)=b;
end
FARM=[farm,newfarm];
%%选择复制
SER=randperm(3*N);
FITNESS=zeros(1,3*N);
fitness=zeros(1,N);
fori=1:(3*N)
Beta=FARM(:,i);
FITNESS(i)=FIT(Beta,D,Alpha);
end
fori=1:N
f1=FITNESS(SER(3*i-2));
f2=FITNESS(SER(3*i-1));
f3=FITNESS(SER(3*i));
iff1<=f2&&f1<=f3
farm(:,i)=FARM(:,SER(3*i-2));
fitness(:,i)=FITNESS(:,SER(3*i-2));
eliff2<=f1&&f2<=f3
欢迎访问GreenSim团队主页→/greensim邮箱:****************
第4页
farm(:,i)=FARM(:,SER(3*i-1));
fitness(:,i)=FITNESS(:,SER(3*i-1));
el
farm(:,i)=FARM(:,SER(3*i));
fitness(:,i)=FITNESS(:,SER(3*i));
end
end
%%记录最佳个体和收敛曲线
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;
%%变异
fori=1:N
ifPm>rand&&pos(1)~=i
AA=farm(:,i);
BB=GaussMutation(AA,LB,UB);
farm(:,i)=BB;
end
end
disp(k);
k=k+1;
end
源代码运行结果展示
欢迎访问GreenSim团队主页→/greensim邮箱:****************
第5页
250300
-20
-15
-10
-5
函
数
值
迭代次数
070
0
1
2
3
4
5
6
P
r
o
j
e
c
t
i
v
e
V
a
l
u
e
欢迎访问GreenSim团队主页→/greensim邮箱:****************
第6页
070
0
1
2
3
4
5
6
P
r
o
j
e
c
t
i
v
e
V
a
l
u
e
本文发布于:2022-11-14 03:12:37,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/15002.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |