Tca55Paras;%预先装载数据
%---------------------------------读取特性图数据----------------------------------%
fileName = '原始数据.xlsx';
sheetName1= 'Sheet1';
Original_data=xlsread(fileName,sheetName1,'B4:J63');%原始数据
Result_data=zeros(60,9);%结果变量
Result_data(:,1)=Original_data(:,1);
Result_data(:,2)=Original_data(:,2);
Result_data(:,8)=Original_data(:,8);
% Press_val=1.34;%压比
% Rev_val=15000;%转速
%决策变量:
% D1t_val=1;%D1t(0.5-1)
% D1h_val=1;%D1h(0-0.5)
% D2_val=1;%D2(0-1)
% A1_val=1;%A1(0-60)
% A2_val=1;%A2(0-50)
for i_temp1=32:1:60%特性图采集60个点
Press_val=Original_data(i_temp1,1);%压比
Rev_val=Original_data(i_temp1,2);%转速
%迭代终止条件,迭代收敛条件
%--定义迭代常量--%
Num_Decision_variables=5;%决策变量维数
MAX_Iteration=30;%算法最大迭代次数
Num_Population=10;%种群数目
MAX_or_MIN=0;%目标函数(适应度函数)类型,0:最小型优化 1:最大型优化
W_pso=0.7;%惯性权重系数
C1_pso =0.1;%粒子自身学习系数
R1_pso=1;%随机数1
C2_pso=0.2;%粒子社会学习系数
R2_pso=1;%随机数1
X_id=zeros(Num_Population,Num_Decision_variables);%第i个种群的第j维决策变量的位置
V_id=zeros(Num_Population,Num_Decision_variables);%第i个种群的第j维决策变量的速度
X_id_MAX=zeros(Num_Population,Num_Decision_variables);%第i个种群的第j维决策变量的位置上限
X_id_MIN=zeros(Num_Population,Num_Decision_variables);%第i个种群的第j维决策变量的位置下限
V_id_MAX=zeros(Num_Population,Num_Decision_variables);%第i个种群的第j维决策变量的速度上限
V_id_MIN=zeros(Num_Population,Num_Decision_variables);%第i个种群的第j维决策变量的速度下限
%--------------------测试段(变量初始化)-----------------%
for temp_i=1:1:Num_Population
X_id(temp_i,1)=rand(1)*0.5+0.5;% D1t_val变量初始位置(0.5-1)
X_id(temp_i,2)=rand(1)*0.5; % D1h_val变量初始位置(0-0.5)
X_id(temp_i,3)=rand(1)*1; % D2_val变量初始位置(0-1)
X_id(temp_i,4)=rand(1)*60; % A1_val变量初始位置(0-60)
X_id(temp_i,5)=rand(1)*50; % A2_val变量初始位置(0-50)
V_id(temp_i,1)=0.01;%D1t_val变量的速度
V_id(temp_i,2)=0.01;%D1h_val变量的速度
V_id(temp_i,3)=0.01;%D2_val变量的速度
V_id(temp_i,4)=0.05;%A1_val变量的速度
V_id(temp_i,5)=0.05;%A2_val变量的速度
X_id_MAX(temp_i,1)=1;%D1t_val位置上限
X_id_MAX(temp_i,2)=0.5;%D1h_val位置上限
X_id_MAX(temp_i,3)=1;%D2_val位置上限
X_id_MAX(temp_i,4)=60;%A1_val位置上限
X_id_MAX(temp_i,5)=50;%A2_val位置上限
X_id_MIN(temp_i,1)=0;
X_id_MIN(temp_i,2)=0;
X_id_MIN(temp_i,3)=0;
X_id_MIN(temp_i,4)=0;
X_id_MIN(temp_i,5)=0;
V_id_MAX(temp_i,1)=0.2;
V_id_MAX(temp_i,2)=0.2;
V_id_MAX(temp_i,3)=0.2;
V_id_MAX(temp_i,4)=1;
V_id_MAX(temp_i,5)=1;
V_id_MIN(temp_i,1)=-0.2;
V_id_MIN(temp_i,2)=-0.2;
V_id_MIN(temp_i,3)=-0.2;
V_id_MIN(temp_i,4)=-1;
V_id_MIN(temp_i,5)=-1;
end
%----------------------------------------%
%--定义迭代变量--%
P_i=zeros(Num_Population,Num_Decision_variables);%第i个种群的历史最好位置
X_id_History=zeros(Num_Population,Num_Decision_variables,MAX_Iteration);%第i个种群第j维决策变量的历史位置
%第k代的维决策变量位置
P_i_Fit_History=zeros(Num_Population,MAX_Iteration);%第i个种群的历史适应度函数值
Compflux_History=zeros(Num_Population,MAX_Iteration);%第i个种群的历史质量流量值
P_gd=zeros(Num_Decision_variables);%粒子群全局最优位置
V_id_temp=V_id;%V_id迭代的中间变量,初始化
X_id_temp=X_id;%X_id迭代的中间变量,初始化
Min_Fit_temp=0;%P_i_Fit_History的中间变量
Max_Fit_temp=0;%P_i_Fit_History的中间变量
Index_Iteration=0;%当前迭代数
Stop_Flag=0;%迭代停止条件标志位,0:迭代停止条件不满足 1:迭代停止条件满足
Convergence_Flag=zeros(Num_Population);%迭代收敛标志位,0:种群i迭代不收敛 1:种群i迭代收敛
while (Index_Iteration<MAX_Iteration && Stop_Flag==0)
%................迭代次数小于迭代次数上限.....迭代停止条件满足
Index_Iteration=Index_Iteration+1;
for i=1:1:Num_Population
for j=1:1:Num_Decision_variables
V_id_temp(i,j)=V_id(i,j);
V_id(i,j)=W_pso*V_id_temp(i,j)+C1_pso*R1_pso*(P_i(i,j)-X_id(i,j))+C2_pso*R2_pso*(P_gd(j)-X_id(i,j));
if V_id(i,j)>V_id_MAX(i,j)
V_id(i,j)=V_id_MAX(i,j);
elseif V_id(i,j)<V_id_MIN(i,j)
V_id(i,j)=V_id_MIN(i,j);
else
end
X_id_temp(i,j)=X_id(i,j);
X_id(i,j)=X_id_temp(i,j)+V_id(i,j);
if X_id(i,j)>X_id_MAX(i,j)
X_id(i,j)=X_id_MAX(i,j);
elseif X_id(i,j)<X_id_MIN(i,j)
X_id(i,j)=X_id_MIN(i,j);
else
end
X_id_History(i,j,Index_Iteration)=X_id(i,j);
end
% P_i_Fit_History(i,Index_Iteration)=输入适应度函数f(X_id(i,j));
%---------第i个种群的历史适应度函数值---------%
clear compflux;
D1t=X_id(i,1);
D1h=X_id(i,2);
D2=X_id(i,3);
A1=X_id(i,4);
A2=X_id(i,5);
sim('NewLossCompressor_T', 50, []);%进行simulink仿真
P_i_Fit_History(i,Index_Iteration)=(compflux(1,1)-Original_data(i_temp1,8))^2;
Compflux_History(i,Index_Iteration)=compflux(1,1);
%------------------------------------------%
% P_i_Fit_History(i,Index_Iteration)=TestFunction(X_id(i,1));
%---------更新第i个种群的历史最好位置---------%
if MAX_or_MIN==0
Min_Fit_temp=min(P_i_Fit_History(i,1:Index_Iteration));
I_J_TEMP=find(P_i_Fit_History(i,1:Index_Iteration)==Min_Fit_temp);
for temp_j=1:1:Num_Decision_variables
P_i(i,temp_j)=X_id_History(i,temp_j,I_J_TEMP(1));
end
else
Max_Fit_temp=max(P_i_Fit_History(i,1:Index_Iteration));
I_J_TEMP=find(P_i_Fit_History(i,1:Index_Iteration)==Max_Fit_temp);
for temp_j=1:1:Num_Decision_variables
P_i(i,temp_j)=X_id_History(i,temp_j,I_J_TEMP(1));
end
end
%-------------------------------------------%
end
%---------更新所有种群的全局历史最好位置---------%
if MAX_or_MIN==0
Min_Fit_temp=min(min(P_i_Fit_History(:,1:Index_Iteration)));
for temp_i=1:1:Num_Population
for temp_j=1:1:Index_Iteration
if P_i_Fit_History(temp_i,temp_j)==Min_Fit_temp
I_J_TEMP(1)=temp_i;
I_J_TEMP(2)=temp_j;
end
end
end
for temp_j=1:1:Num_Decision_variables
P_gd(temp_j)=X_id_History(I_J_TEMP(1),temp_j,I_J_TEMP(2));
end
else
Max_Fit_temp=max(max(P_i_Fit_History(:,1:Index_Iteration)));
for temp_i=1:1:Num_Population
for temp_j=1:1:Index_Iteration
if P_i_Fit_History(temp_i,temp_j)==Max_Fit_temp
I_J_TEMP(1)=temp_i;
I_J_TEMP(2)=temp_j;
end
end
end
for temp_j=1:1:Num_Decision_variables
P_gd(temp_j)=X_id_History(I_J_TEMP(1),temp_j,I_J_TEMP(2));
end
end
%-------------------------------------------%