拉丁超立方體初始化種群
1.引言
群智能算法一般以隨機方式產生初始化種群的位置,但是這種方式可能導致種群內個體分布不均勻。拉丁超立方體抽樣方法產生的初始種群位置,可以保證全空間填充和抽樣非重疊,從而使種群分布均勻。
2.LHS抽樣過程
step1: 確定抽樣規模\(H\)
step2: 將每維變量\(x^i\)的定義域區間\([x_l^i,x_u^i]\)划分成\(H\)個相等的小區間:
\[x_l^i=x_0^i<x_1^i<x_2^i<....<x_j^i<...<x_H^i=x_u^i \]
這樣就將原來的一個超立方體划分成\(H^n\)個小超立方體。
step3:產生一個\(H\times{n}\)的矩陣\(A\),\(A\)的每列都是數列\({1,2,...,H}\)的一個隨機全排列。
step4:\(A\)的每行就對應一個被選中的小超立方體,在每個被選中的小超立方體內隨機產生一個樣本。
4.Matlab代碼
% ======================================
% 拉丁超立方體初始化種群
% ======================================
% step1:清理運行環境
close all;
clear
clc
% step2:參數設置
n = 30; % 確定抽樣規模
d = 2; % 維數
% step3:划分小超立方體
lb = (0:n-1)./n;
ub = (1:n)./n;
% step4:產生一個H*n的全排列矩陣
A = zeros(n, d);
for i=1:d
A(:,i) = randperm(n);
end
% step5:采樣
H = zeros(n,d);
for i=1:n
for j=1:d
H(i,j) = unifrnd(lb(A(i,j)), ub(A(i,j)));
end
end
% step6:可視化
figure
scatter(H(:,1),H(:,2));
xlim([0, 1]);
ylim([0, 1]);
grid on;
% 拉丁超立方體抽樣函數
x = lhsdesign(30, 2);
% step6:可視化
figure
scatter(x(:,1),x(:,2));
xlim([0, 1]);
ylim([0, 1]);
grid on;