Algoritma Unscented Kalman Filter


Algoritma Unscented Kalman Filter adalah salah satu algoritma yang digunakan untuk memperkirakan hasil berikutnya berdasarkan data-data yang sudah ada sebelumnya. Contoh yang dibahas kali ini adalah mengenai memperkirakan penjualan pada periode berikutnya berdasarkan data penjualan pada periode sebelumnya.
Algoritma ini merupakan pengembangan dari Algoritma Kalman Filter dan memiliki kedekatan dengan Algoritma Extended Kalman Filter yang sudah dijelaskan sebelumnya. Algoritma ini bekerja dengan menggunakan data sample yang disebut dengan sigma yang kemudian akan dilakukan proses transformasi Unscented untuk mendapatkan estimasi rata-rata dan kovarians non-linier. Langkah perhitungan berikutnya adalah melakukan filter menggunakan variabel tersebut.



Diasumsikan ada 4 data barang yang sudah diketahui hasil penjualannya
Masing-masing barang memiliki data penjualan pada 5 periode sebelumnya
Maka tentukan prediksi penjualan untuk 3 periode berikutnya
Diasumsikan data penjualan adalah sebagai berikut:

Nama BarangPeriode1Periode2Periode3Periode4Periode5
Pensil101281120
Penghapus1512131414
Pena97151510
Penggaris1241213

Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:

data=[10 12 8 11 20; ...
      15 12 13 14 14; ...
      9 7 15 15 10; ...
      1 2 4 12 13];



Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan jumlah state yang digunakan
State ini merupakan banyak data yang dimasukkan ke dalam fungsi non linier
Diasumsikan dalam kasus ini, jumlah state ada 3 buah

jumlahState = 3;

Langkah-langkah penggunaan algoritma ini adalah

* Lakukan perhitungan pada masing-masing data (poin 1 – 4)

for i=1:size(data,1)
. . .

1. Hitung rata-rata dan standar deviasi dari data yang sedang dihitung
Rata-rata adalah jumlah semua data dibagi dengan jumlah datanya
Standar deviasi adalah akar dari ((kuadrat dari (jumlah dari (data – rata-rata))) / jumlah data)

rata2 = mean(data(i,:));
stdDev = sqrt(sum((data(i,:) - rata2) .^ 2) / jumlahData);

2. Beri nilai awal untuk setiap variabel yang dibutuhkan
Penjelasan lebih lanjut mengenai masing-masing variabel dapat dilihat pada skrip dibawah ini

2a. Kovarians Noise Proses

Q = stdDev^2 * eye(jumlahState); 

2b. Kovarians Noise Observasi

R = stdDev^2;                    

2c. Persamaan Non-linier State
Jumlah Persamaan Non-linier harus sama dengan parameter jumlah state

f = @(x)[x(2); x(3); sqrt(-0.5*x(1)*x(1) + 0.5*x(2)*x(2) + x(3)*x(3))];  

2d. Persamaan Observasi

h = @(x)x(3);

2e. State awal
Jumlah elemen state awal harus sama dengan parameter jumlah state

s = [-1; -1; -1];

2f. Estimasi Vektor State

x = s;

2g. Kovarians Estimasi Vektor State

P = eye(jumlahState);

3. Lakukan perulangan sebanyak jumlah data yang ada (poin 3a – 3c)

for j=1:jumlahData
. . .

3a. Tentukan data observasi yang akan dihitung

z = data(i,k);
%zV(k)  = z;

3b. Lakukan proses update nilai state yang digunakan

s = [s(2); s(3); z];
sV(:,k)= s;

3c. Lakukan proses perhitungan dengan menggunakan metode Unscented Kalman Filter
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3c1 – 3c10)

[x, P] = ukf(f,x,P,h,z,Q,R);
xV(:,k) = x;

Memasuki perhitungan pada fungsi ukf

3c1. Hitung jumlah elemen dari nilai state dan nilai observasi

L = numel(x);
m = numel(z);

3c2. Tentukan nilai konstanta alpha, beta, dan k1

alpha = 1e-3;
beta = 2;
ki = 0;

3c3. Hitung nilai lambda dan c untuk digunakan sebagai faktor skala

lambda = alpha^2*(L+ki)-L;
c = L+lambda;

3c4. Hitung bobot rata-rata dan bobot kovarians

Wm = [lambda/c 0.5/c+zeros(1,2*L)];
Wc = Wm;
Wc(1) = Wc(1)+(1-alpha^2+beta);

3c5. Lakukan proses perhitungan sigma poin disekitar nilai state
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini

c=sqrt(c);
X=sigmaPoin(x,P,c);

* Gunakan fungsi ini untuk mendapatkan sigma poin disekitar nilai state yang sedang dihitung

function X=sigmaPoin(x,P,c)
Inputs:
  x: nilai state yang akan dicari sigmanya
  P: kovarians estimasi vektor state
  c: faktor skala
Output:
  X: Sigma poin

A = c*chol(P)';
Y = x(:,ones(1,numel(x)));
X = [x Y+A Y-A]; 

3c6. Lakukan proses transformasi Unscented pada state
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini

[x1,X1,P1,X2]=Unscented(fstate,X,Wm,Wc,L,Q);

* Gunakan fungsi ini untuk melakukan transformasi Unscented

function [y,Y,P,Y1]=Unscented(fungsi,X,Wm,Wc,n,R)
Input:
  f: fungsi non-linear
  X: sigma poin
 Wm: bobot rata-rata
 Wc: bobot kovarians
  n: jumlah elemen dalam fungsi
  R: kovarians noise
Output:
  y: transformasi rata-rata
  Y: transformasi poin sampling
  P: transformasi kovarians
 Y1: transformasi deviasi

L=size(X,2);
y=zeros(n,1);
Y=zeros(n,L);
for k=1:L                   
    Y(:,k)=fungsi(X(:,k));       
    y=y+Wm(k)*Y(:,k);       
end
Y1=Y-y(:,ones(1,L));
P=Y1*diag(Wc)*Y1'+R;  

3c7. Lakukan proses transformasi Unscented pada data observasi
Penjelasan tentang fungsi Unscented sudah dijelaskan pada perhitungan sebelumnya

[z1,Z1,P2,Z2]=Unscented(hmeas,X1,Wm,Wc,m,R);

3c8. Hitung nilai Kovarians Silang menggunakan data hasil transformasi pada perhitungan sebelumnya

P12=X2*diag(Wc)*Z2';

3c9. Hitung faktor gain Kalman

K=P12*inv(P2);

3c10. Hitung nilai akhir dari Estimasi Vektor State dan Kovarians Estimasi Vektor State

x=x1+K*(z-z1);
P=P1-K*P12';

4. Nilai prediksi akhir diambil dari nilai Estimasi Transisi State yang sudah dihitung sebelumnya

kf(i) = round(xV(jumlahState, jumlahData),0);

Hasil akhir adalah:

Algoritma Unscented Kalman Filter
Contoh: Memperkirakan penjualan pada periode berikutnya berdasarkan data penjualan pada periode sebelumnya
Diasumsikan ada 4 data barang yang sudah diketahui hasil penjualannya
Masing-masing barang memiliki data penjualan pada 5 periode sebelumnya
Maka tentukan prediksi penjualan untuk 3 periode berikutnya
Diasumsikan data penjualan adalah sebagai berikut: 
Nama Barang, Periode1, Periode2, Periode3, Periode4, Periode5
Pensil     , 10      , 12      , 8       , 11      , 20
Penghapus  , 15      , 12      , 13      , 14      , 14
Pena       , 9       , 7       , 15      , 15      , 10
Penggaris  , 1       , 2       , 4       , 12      , 13


Hasil Perhitungan dengan metode Unscented Kalman Filter
Nama Barang, Periode1, Periode2, Periode3, Periode4, Periode5, Prediksi Periode berikutnya
Pensil     , 10      , 12      , 8       , 11      , 20      , 17
Penghapus  , 15      , 12      , 13      , 14      , 14      , 14
Pena       , 9       , 7       , 15      , 15      , 10      , 11
Penggaris  , 1       , 2       , 4       , 12      , 13      , 12

Contoh modul / source code menggunakan Matlab dapat didownload disini:



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *