Diska Armeina
NIM. 20119005
Institut Teknologi Bandung
2020
I. PENDAHULUAN
Metode conjugate gradient menrupakan metode pencarian arah selain steepest descent dan trust
region yang dipelajari pada laporan sebelumnya. Untuk kasus linear, metode ini sebagai metode
iterative untuk menyelesaikan persamaan berikut
𝐴𝑥 = 𝑏
dimana 𝐴 matrik berukuran 𝑛 × 𝑛 yang simetris dan definit positif, yang mana persamaan ini
ekuivalen dengan masalah minimimasi berikut.
1
𝜙 (𝑥 ) = 𝑥 𝑇 𝐴𝑥 − 𝑏𝑇 𝑥
2
∇𝜙(𝑥 ) = 𝐴𝑥 − 𝑏 ≈ 𝑟(𝑥)
Dengan menggunakan metode conjugate gradient ini akan menghasilkan himpunan conjugate
vector dimana vector 𝑝𝑘 diperoleh dari 𝑝𝑘−1 . Suatu himpunan vector taknol {𝑝0 , 𝑝1 , … , 𝑝𝑛 }
dikatakan conjugate terhadap matriks yang simteris dan definit postif 𝐴 apabila,
𝑝𝑖𝑇 𝐴𝑝𝑗 = 0, 𝑖≠𝑗
Masing-masing 𝑝𝑘 yang dipilih meupakan kombinasi linear dari arah steepest descent −∇𝜙(𝑥𝑘 ) =
−𝑟𝑘 dan arah sebelumnya 𝑝𝑘−1 yang dapat dituliskan sebagai berikut.
𝑝𝑘 = −𝑟𝑘 + 𝛽𝑘 𝑝𝑘−1
Dengan 𝛽𝑘 scalar yang membuat 𝑝𝑘−1 dan 𝑝𝑘 conjugate terhadap A. Dengan mengalikan dengan
𝑇 𝑇
𝑝𝑘−1 𝐴 dan karena 𝑝𝑘−1 𝐴𝑝𝑘 = 0, maka diperoleh
𝑟𝑘𝑇 𝐴𝑝𝑘−1
𝛽𝑘 = 𝑇 𝑇
𝑝𝑘−1 𝐴𝑝𝑘−1
Untuk kasus nonlinear, 𝑟𝑘+1 = ∇𝑓(𝑥𝑘+1 ) dan dengan melakukan manipulasi, diperoleh 𝛽𝑘+1
sebagai berikut.
Fletcher- Reeves (FR-CG)
2
||∇𝑓(𝑥𝑘+1 )||
𝛽𝑘+1 = 2
||∇𝑓(𝑥𝑘 )||
Polek-Riebiere (PR-CG)
𝑇
∇𝑓𝑘+1 (∇𝑓𝑘+1 − ∇𝑓𝑘 )
𝛽𝑘+1 = 2
||∇𝑓(𝑥𝑘 )||
Pada laporan ini, akan mencari titik minimum fungsi griewank dua dimensi dengan menggunakan
metode pencarian arah conjugate gradient dan untuk panjang langkah dengan wolfe conditions
yang didefinisikan sebagai berikut
Bactracking condition: 𝑓 (𝑥𝑘 + 𝛼𝑘 𝑝𝑘 ) ≤ 𝑓(𝑥𝑘 ) + 𝑐1 𝛼𝑘 ∇𝑓𝑘𝑇 𝑝𝑘
Curvature Condition: ∇𝑓 (𝑥𝑘 + 𝛼𝑘 𝑝𝑘 )𝑇 𝑝𝑘 ≤ 𝑐2 ∇𝑓𝑘𝑇 𝑝𝑘
Berdasarkan [1], PR-CG dengan wolfe conditions tidak menjamin bahwa 𝑝𝑘 selalu descent
directiom. Oleh karena itu didefinisikan parameter berikut
+ 𝑃𝑅
𝛽𝑘+1 = max{𝛽𝑘+1 , 0}
yang akan menjamin penurunan dengan wolfe conditions. Ini disebut sebagai PR-CG+.
Berikut ini algoritma yang digunakan dalam penyelesaian masalah ini. Pada laporan ini dibantu
oleh aplikasi Matlab R2017a.
Algoritma 1: FR-CG
Langkah 1. Input 𝑥0 , 𝑘 = 0, error = 10−5
Langkah 2. Evaluasi ∇𝑓(𝑥0 )
Langkah 3. Atur 𝑝0 = − ∇𝑓(𝑥0 )
Langkah 4. While ||∇𝑓𝑘 || < 10−5
Langkah 5. Hitung 𝛼𝑘 dengan wolfe
Langkah 6. 𝑥𝑘+1 ← 𝑥𝑘 + 𝛼𝑘 𝑝𝑘
Langkah 7. Evaluasi ∇𝑓𝑘+1
2
||∇𝑓(𝑥𝑘+1)||
Hitung 𝛽𝑘+1 ← 2
||∇𝑓(𝑥𝑘 )||
Algoritma 2: PR-CG+
Langkah 1. Input 𝑥0 , 𝑘 = 0, error = 10−5
Langkah 2. Evaluasi ∇𝑓(𝑥0 )
Langkah 3. Atur 𝑝0 = − ∇𝑓(𝑥0 )
Langkah 4. While ||∇𝑓𝑘 || < 10−5
Langkah 5. Hitung 𝛼𝑘 dengan wolfe
Langkah 6. 𝑥𝑘+1 ← 𝑥𝑘 + 𝛼𝑘 𝑝𝑘
Langkah 7. Evaluasi ∇𝑓𝑘+1
𝑇
∗ ∇𝑓𝑘+1 (∇𝑓𝑘+1−∇𝑓𝑘 )
Hitung 𝛽𝑘+1 = 2
||∇𝑓(𝑥𝑘 )||
∗
Atur 𝛽𝑘+1 = max(𝛽𝑘+1 , 0)
Hitung 𝑝𝑘+1 ← −∇𝑓𝑘+1 + 𝛽𝑘+1 𝑝𝑘
𝑘 ←𝑘+1
end(while)
III.
IV.
V.
VI.
Dalam mencari titik minimum Fungsi Griewank dengan menggunakan metode pencarian arah
Fletcher- Reeves (FR-CG) dan Polek-Riebiere (PR-CG+) dan dengan penentuan panjang langkah
wolfe conditions, pada laporan ini diambil lima titik awal sebarang yaitu (−3, 2.75), (−3.25, −3),
(1, 0.4), (3.25, 2.75) dan (2.9, −3.25) dengan parameter 𝑐1 = 10−4 , 𝑐2 = 0.1, 𝛼0 = 0, 𝛼1 = 1,
𝛼max = 10 dan dengan nilai toleransi 10−5 .
GAMBAR 3. Kontur Fungsi Griewank :Conjugate Gradient Fletcher- Reeves (FR-CG) dengan 𝑥0 (1, 0.4)
2. Polek-Riebiere (PR-CG+)
Dengan menggunakan FR-CG untuk titik awal 𝑥0 = [1, 0.4] , pada Tabel 2 menunjukkan bahwa
titik optimum diperoleh pada iterasi ke-5 dengan 𝑥𝑜𝑝𝑡 = [0, 9 × 10−5 ] dengan galat 4 × 10−6 .
GAMBAR 4. Kontur Fungsi Griewank :Conjugate Gradient Polek-Riebiere (PR-CG+) dengan 𝑥0 (1, 0.4)
Berdasarkan Tabel 2, iterasi yang dihasilkan oleh PR-CG+ lebih sedikit dibandingkan dengan FR-
CG artinya PR-CG+ lebih cepat mencapai titik optimum dengan galat yang lebih kecil pula. Dari
Tabel 1 dan Tabel 2 dapat dilihat pula penurunan oleh PR-CG+ lebih besar dibandingkan dengan
𝑇
FR-CG. Hal ini dikarenakan pengurangan ∇𝑓𝑘 ∇𝑓𝑘+1 memberikan penurunan nilai 𝛽𝑘 pada metode
PR-CG+ sehingga dapat memberikan penurunan arah dan langkah yang lebih besar dibandingkan
FR-CG.
Selanjutnya, metode ini juga diuji pada empat titik lain yaitu (−3, 2.75), (−3.25, −3),
(1, 0.4), (3.25, 2.75) dan (2.9, −3.25). Pada tabel 5-7 diperlihatkan hasil-hasil yang diperoleh
dengan menggunakan FR-CG, dan PR-CG+ berdasarkan pada banyaknya iterasi, galat dan titik
optimum yang diperoleh berdasarkan parameter-parameter yang ditentukan sebelumnya.
Berdasarkan Tabel 3, dari pengujian dengan 5 titik, 4 dari 5 pengujian diperoleh bahwa metode
PR-CG+ menghasilkan lebih sedikit iterasi dibandingkan dengan FR-CG. Pada titik (1, 0.4)
bahkan iterasi yang dihasilkan dari PR-CG+ dua kali dari FR-CG. Artinya, metode PR-CG+ lebih
cepat mencapai ke titik minimum pada Tabel 5. Namun, dapat dilihat dari tabel 5 pula, kedua
metode ini masih terjebak ke dalam minimum lokal. Oleh karena itu, pemilihan titik awal juga
perlu diperhatikan. Dari galat yang dihasilkan pula metode PR-CG+ menghasilkan galat yang lebih
kecil dibandingkan deng PR-CG+. Artinya akurasi PR-CG+ lebih baik dibandingkan dengan FR-
CG. Perilaku dari masing metode ini juga ditunjukkan pada Gambar 5. Pada gambar 5, metode
FR-CG dan PR-CG+ disandingkan dengan steepest descent.
GAMBAR 5. Kontur Fungsi Griewank :Steepest Descent, FR-CG dan PR-CG+ dengan 𝑥0 (1, 0.4)
VII. KESIMPULAN
Berdasarkan hasil dan pembahasan, dapat disimpulkan bahwa:
Dengan menggunakan metode conjugate gradient, diperoleh pendekatan titik minimum global
fungsi griewank dengan FR-CG pada 𝑥𝑜𝑝𝑡 = [−7 × 10−6 , −1 × 10−5 ] dengan galat 7 × 10−6 dan
dengan PR-CG+ pada 𝑥𝑜𝑝𝑡 = [0, 9 × 10−5 ] dengan galat 4 × 10−6.
Kedua metode ini mampu mereduksi banyak langkah iterasi, oleh karena itu dapat mencapai
titik minimum dengan cepat. Terlebih lagi apabila digunakan untuk 𝑛 −ukuran yang besar.
Metode ini akan lebih efektif digunakan.
Berdarkan analisis perbandingan banyaknya iterasi, galat dan titik minimum dari metode PR-
CG+ dan FR-CG, disimpulkan bahwa cojungate gradient Polek-Rieberie lebih baik
dibandingkan Fletcher-Reeves karena dapat mencapai titik minimum lebih cepat dan galat
yang lebih kecil
Dari hasil yang diperoleh pulas, kedua metode ini masih terjebak dalam minimum lokal. Oleh
karena itu, pemilihan titik awal harus diperhatikan.
VIII. REFERENSI
[1] Nocedal, J., Wright, Stephen J., Numerical Optimization (1999)
IX. LAMPIRAN
FR-CG
clc;
clear all;
tic;
%% Plot Awal
[x1new,x2new] = meshgrid(-5:0.1:5,-5:0.1:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new/2^0.5))+1;
%surf(x1new,x2new,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Grafik Fungsi Griewank')
%% Main code
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2/sqrt(2))))+1;
x1_awal=1;
x2_awal=0.4;
x1 =x1_awal
x2 =x2_awal
pk=-gradd(x1, x2);
error=1;
iter=1;
iter_max=20;
alpha_max=10;
epsilon=10^-5;
X =[x1_awal x2_awal];
%while iter<=iter_max
while error>=epsilon
Bk=eye(2);
gf=gradd(x1, x2);
%alpha=0.9;
alpha=alphak(f, alpha_max, X1, X2, x1, x2, Bk);
x1_new=x1+alpha*pk(1);
x2_new=x2+alpha*pk(2);
gf1 = gradd(x1_new,x2_new);
Beta=((norm(gf1))^2)/((norm(gf))^2);
%Beta= (gf1'*gf1)/(gf'*gf);
pk_new= -gf1+Beta*pk;
dotpr=dot(pk,pk_new);
pk=pk_new;
x1=x1_new;
x2=x2_new;
error= norm(gradd(x1_new,x2_new));
X = [X ; [x1 x2]];
iter=iter+1;
fprintf('%2d\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t
%6.6f\n',iter-1,x1_new,x2_new,pk(1),pk(2),fgriewank(x1_new,x2_new),error);
end
%% Plot titik
hold on
plot(X(:,1),X(:,2),'-r','LineWidth',1.5)
plot(X(:,1),X(:,2),'*r','LineWidth',0.5)
axis equal
toc
function gf=gradd(x1,x2)
gf1=x1/2000 + sin(x1)*cos(x2/sqrt(2));
gf2=x2/2000 + cos(x1)*sin(x2/sqrt(2))/sqrt(2);
gf=[gf1;gf2];
end
PR-CG
clear all;
tic
%% Plot Awal
[x1new,x2new] = meshgrid(-5:0.05:5,-5:0.05:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new/2^0.5))+1;
%surf(x1new,x2new,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Grafik Fungsi Griewank')
%% Main code
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2/sqrt(2))))+1;
x1_awal=1;
x2_awal=0.4;
x1 =x1_awal
x2 =x2_awal
pk=-gradd(x1, x2);
error=1;
iter=1;
iter_max=4;
alpha_max=1;
epsilon=10^-5;
X =[x1_awal x2_awal];
while error>=epsilon
Bk=eye(2);
gf=gradd(x1, x2);
%alpha=0.9;
alpha=alphak(f, alpha_max, X1, X2, x1, x2, Bk);
x1_new=x1+alpha*pk(1);
x2_new=x2+alpha*pk(2);
gf1 = gradd(x1_new,x2_new);
p_new=-gradd(x1_new, x2_new);
BetaK=((gf1)'*(gf1-gf))/((norm(gf))^2); %pr-cg
Beta=max(BetaK,0);
%Beta=((norm(gf1))^2)/((norm(gf))^2); %FR-CG
%Beta= (gf1'*gf1)/(gf'*gf);
pk_new= -gf1+Beta.*pk;
dotpr=dot(pk,pk_new);
pk=pk_new;
x1=x1_new;
x2=x2_new;
error= norm(gradd(x1_new,x2_new));
X = [X ; [x1 x2]];
iter=iter+1;
fprintf('%2d\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t
%6.6f\n',iter-1,x1_new,x2_new,pk(1),pk(2),fgriewank(x1_new,x2_new),error);
end
%% Plot titik
hold on
plot(X(:,1),X(:,2),'-m','LineWidth',1.5)
plot(X(:,1),X(:,2),'*r','LineWidth',0.5)
axis equal
toc
function gf=gradd(x1,x2)
gf1=x1/2000 + sin(x1)*cos(x2/sqrt(2));
gf2=x2/2000 + cos(x1)*sin(x2/sqrt(2))/sqrt(2);
gf=[gf1;gf2];
end
Steepest Descent
clear all;
tic
[x1new,x2new] = meshgrid(-5:0.5:5,-5:0.5:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new/2^0.5))+1;
%surf(x1,x2,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Kontur Fungsi Griewank')
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2/sqrt(2))))+1;
x1_awal=-3;
x2_awal=2.75;
x1=x1_awal
x2=x2_awal
error=1;
iter=0;
iter_max=30;
alpha_max=100;
epsilon=10^-5;
disp(' Tabel Iterasi ')
disp('=======================================================================
==================')
disp(' i x1 x2 alpha pk(1) pk(2) f
Galat ')
disp('=======================================================================
==================')
%Bk=1;
X =[x1_awal x2_awal];
while error>=epsilon
iter=iter+1;
Bk=eye(2);
pk=-Bk*gradf(f, X1, X2, x1, x2);
alpha=alphak(f, alpha_max, X1, X2, x1, x2, Bk);
x1_new=x1+alpha*pk(1);
x2_new=x2+alpha*pk(2);
error= norm(gradf(f, X1, X2, x1_new,x2_new));
x1=x1_new;
x2=x2_new;
X = [X ; [x1 x2]];
fprintf('%2d\t %6.6f\t %6.6f\t %6.6f\t %6.6f %6.6f\t %6.6f\t
%6.6f\n',iter,x1,x2,alpha,pk(1),pk(2),fgriewank(x1,x2),error);
end
hold on
plot(X(:,1),X(:,2),'-k','LineWidth',1.5)
plot(X(:,1),X(:,2),'*','LineWidth',1)
plot(X(:,1),X(:,2),'*r','LineWidth',0.5)
plot(x1_awal,x2_awal,'*r','LineWidth',2)
toc
Wolfe Conditions
function alpha=alphak(f, alpha_max, X1, X2, x1, x2, Bk) %line search
algorithm
alpha = 1;
alpha_0=0;
alpha_1=alpha;
alpha_max=10;
pk=-Bk*gradf(f, X1, X2, x1, x2);
%cek=true;
c1=10^(-4);
c2=0.1;
i=1;
psi_aksen0=(gradf(f, X1, X2, x1, x2))'*pk;
while 1
psi_alphai=fgriewank(x1+alpha_1*pk(1), x2+alpha_1*pk(2));
psi_alphamin1=fgriewank(x1+alpha_0*pk(1), x2+alpha_0*pk(2));
psi_alpha0=fgriewank(x1,x2);
if psi_alphai>(psi_alpha0 + c1*alpha_1*psi_aksen0) || ((psi_alphai >=
psi_alphamin1) && (i>1))
alpha=wolfezoom(f, alpha_0,alpha_1, X1, X2, x1, x2, Bk);
break;
end
psi_akseni=(gradf(f, X1, X2, x1+alpha_1*pk(1), x2+alpha_1*pk(2)))'*pk;
if abs(psi_akseni)<=-c2*psi_aksen0
alpha=alpha_1;
break;
end
if psi_akseni>=0
alpha=wolfezoom(f, alpha_1, alpha_0, X1, X2, x1, x2, Bk);
break;
end
alpha_0=alpha_1;
alpha_1 = min(alpha_max, alpha_1*3);
%alpha(i+1)=alpha(i)+0.5*(alpha_max-alpha(i));
i=i+1;
end
end
Zoom
function alfa=wolfezoom(f, w1, w2, X1, X2, x1, x2, Bk)
if w1<w2
a_lo=w1;
a_hi=w2;
else
a_lo=w2;
a_hi=w1;
end
pk=-Bk*gradf(f, X1, X2, x1, x2);
c1=10^(-4);
c2=0.1;
psi_aksen0=(gradf(f, X1, X2, x1, x2))'*pk;
cek=true;
while cek
aj=(a_lo+a_hi)/2; %bisection
psi_alphaj=fgriewank(x1+aj*pk(1), x2+aj*pk(2));
psi_alpha0=fgriewank(x1,x2);
psi_alphalo=fgriewank(x1+a_lo*pk(1), x2+a_lo*pk(2));
%psi_alphalo=psi_alphaj;
end
a_lo=aj;
end
end
end