我正在寻找类似于前馈神经网络的认知图的权重,不同之处在于没有自连接(因此对角线 = 0 )。权重矩阵是3*3
,每个粒子代表需要找到(优化)的权重。在我的应用程序中,我需要将权重的值限制在[-1,1].
So 的范围内,当 PSO 更新其速度和位置方程(摘录如下)时,我选择了那些高于 1 和 -1 的索引并将它们设置为阈值。我检查了速度和位置的值。的前 6 行和 6 列Velocity
是
-3.29818766857477e-10 1.06365098218884e-09 1.72718584823501e-08 8.52030002125361e-08 4.24567055691019e-09 1.42682312020373e-10
-0.527487299879998 0.0141963443263498 2 -2 0.0804033989937564 0.0294235685161277
-0.460426149819118 -0.00962472296493386 -0.231141442703638 -0.161996004370743 -0.00140062376098630 -0.0183361675902131
0.490979470234505 -0.150287862753787 -0.453325515475146 1.48710788599919 -2 -0.0168498207544201
-1.49184829189134 0.718322120314944 0.191912248648141 1.67798502924430 -0.811846486653242 -0.00645584872854835
0.0236930729558028 0.725697240982270 -0.571776066383284 -0.481114642909396 -0.623411799726210 0.00226958877218209
前 6 行和Position
6 列的值 =
-7.98664279308835 -3.90744804351231 -6.92609001695919 -6.38057220301763 6.34627589189950 0.515032878765257
-8.23428663786642 -3.91888491694193 -5.06678793435555 -7.66405701509194 6.18465937874726 0.527740403314418
-8.18128160012481 -3.91458365620100 -6.65571517234057 -6.64026727804025 6.46684166489122 0.509478265627388
-7.82297889594148 -3.73466474001669 -6.83434245810552 -5.84907863164857 6.76798656860034 0.497959367071159
-8.65135591544159 -3.40466585557339 -7.11566232657911 -6.09503181101550 5.95791723669973 0.511429259659808
-7.93848660180123 -3.22292763621706 -6.41517926678420 -7.12188582637202 6.18562296678481 0.514711315467883
的值Positions
和因此的权重也Velocity
超出了我提到的范围。应该怎么做才能使位置值和权重矩阵在 [-1,1] 范围内?我哪里错了?请帮忙。
noP = 10;
Dim = 9;
Velocity=zeros(noP,Dim); %Velocity vector
Position=zeros(noP,Dim); %Position vector
weight_min_range = -1;
weight_max_range = 1;
velocity_clamping_factor = 2;
Vmax=weight_max_range*velocity_clamping_factor;
Vmin=-Vmax;
%////////Cognitive component/////////
pBestScore=zeros(noP);
pBest=zeros(noP,Dim);
pBestScore2=zeros(noP);
%Initialization
for i=1:size(Position,1) % For each Particle
for j=1:size(Position,2) % For each dimension
Position(i,j)=rand();
Velocity(i,j)=rand();
end
end
for PSOITER = 1:IterMax
%INSIDE PSO LOOP : DETAILS SKIPPED
.........
............
%Fitness evaluation by each particle for all training set
for i=1:size(pos,1)
for j=1:size(pos,2)
Velocity(i,j)=inertia*vel(i,j)+c1*rand()*(pBest(i,j)-Position(i,j))+c2*rand()*(gBest(j)-Position(i,j));
Vind1 = Velocity<Vmin;
Vind2 = Velocity>Vmax;
Velocity(Vind1) = Vmin;
Velocity(Vind2) = Vmax;
Position(i,j)= Position(i,j)+ Velocity(i,j);
end
end
在所有计算和 PSO 例程结束后,我得到以下权重矩阵,而不是权重矩阵值在 -1 到 1 的范围内。
WeightMatrix =
0 -6.9261 6.3463
-7.9866 0 0.5150
-3.9074 -6.3806 0