基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型MATLAB源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于遗传算法(粒子群算法、人工鱼群算法等)的投影寻踪模型

MATLAB源代码

投影寻踪是一种处理多因素复杂问题的统计方法,其基本思路是将高维数据向低维空间进行投影,通过低维投影数据的散布结构来研究高维数据特征,可用于聚类、分类、综合评价、预测等。投影寻踪模型最终可归结为一个非线性连续函数优化模型,可以采用遗传算法、粒子群算法、人工鱼群算法或人工免疫克隆优化算法等进行求解,得到最优的投影向量。

%% 第一步:仿真参数设置

clc

clear

close all

load data1.txt

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团队主页→

%% 整理输出结果

Best_a=(BESTX{K})';%方向向量

d=zeros(n,p);

Djmax=max(D);

Djmin=min(D);

for i=1:n

d(i,:)=(D(i,:)-Djmin)./(Djmax-Djmin);

end

Z=zeros(n,1);

for i=1:n

Z(i)=abs(sum(Best_a.*d(i,:)));

end

Z=abs(Z);

figure%投影散布图

plot(abs(Z),'bd','LineWidth',1,'MarkerEdgeColor','k','MarkerFac eColor','b','MarkerSize',5);

%axis([1,12,0,2.5]);%图形边界根据需要显示

grid on

xlabel(' ','FontName','TimesNewRoman','FontSize',12);

ylabel('Projective Value','FontName','Times New Roman','Fontsize',12);

figure

[newZ,I]=sort(Z);

plot(abs(newZ),'bd','LineWidth',1,'MarkerEdgeColor','k','Marker FaceColor','b','MarkerSize',5);

%axis([1,12,0,2.5]);%图形边界根据需要显示

grid on

xlabel(' ','FontName','TimesNewRoman','FontSize',12);

ylabel('Projective Value','FontName','Times New Roman','Fontsize',12);

%%

disp('最佳投影向量为')

disp(Best_a);

function

[BESTX,BESTY,ALLX,ALLY]=IGAUCP(K,N,Pm,LB,UB,D,Alpha)

%%遗传算法求解投影寻踪模型

% GreenSim团队——专业级算法设计&代写程序

% 欢迎访问GreenSim团队主页→

%% 输入参数列表

% K 迭代次数

% N 种群规模,要求是偶数

% Pm 变异概率

% LB 决策变量的下界,M×1的向量

% UB 决策变量的上界,M×1的向量

% D 原始样本数据,n×p的矩阵

% Alpha 窗口半径系数,典型取值0.1

%% 输出参数列表

% BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体% BESTY K×1矩阵,记录每一代的最优个体的评价函数值

% ALLX K×1细胞结构,每一个元素是M×N矩阵,记录全部个体

% ALLY K×N矩阵,记录全部个体的评价函数值

%% 第一步:

M=length(LB);%决策变量的个数

%种群初始化,每一列是一个样本

farm=zeros(M,N);

for i=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);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值

k=1;%迭代计数器初始化

%% 第二步:迭代过程

while k<=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;

for i=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);

for i=1:(3*N)

Beta=FARM(:,i);

FITNESS(i)=FIT(Beta,D,Alpha);

end

for i=1:N

f1=FITNESS(SER(3*i-2));

f2=FITNESS(SER(3*i-1));

f3=FITNESS(SER(3*i));

if f1<=f2&&f1<=f3

farm(:,i)=FARM(:,SER(3*i-2));

fitness(:,i)=FITNESS(:,SER(3*i-2)); elseif f2<=f1&&f2<=f3

相关文档
最新文档