拉丁超立方體初始化種群(附Matlab代碼)


拉丁超立方體初始化種群

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;

image

% 拉丁超立方體抽樣函數
x = lhsdesign(30, 2);
% step6:可視化
figure
scatter(x(:,1),x(:,2));
xlim([0, 1]);
ylim([0, 1]);
grid on;

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM