Anda di halaman 1dari 16

LAPORAN METODE OPTIMASI LANJUT

MENCARI TITIK MINIMUM DARI FUNGSI GRIEWANK DENGAN


MENGGUNAKAN METODE CONJUGATE GRADIENT

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
||∇𝑓(𝑥𝑘 )||

Hitung 𝑝𝑘+1 ← −∇𝑓𝑘+1 + 𝛽𝑘+1 𝑝𝑘


𝑘 ←𝑘+1
end(while)

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)

Algoritma 3: Wolfe Conditions


Langkah 1. Input 𝛼(1), 𝛼 (2), 𝑐1, 𝑐2, dan iterasi
Langkah 2. Evaluasi 𝜑(𝛼𝑖 )
Langkah 3. If 𝜑(𝛼𝑖 ) > 𝜑(0) + 𝑐1 𝛼𝑖 𝜑′ (0) | | [𝜑(𝛼𝑖 ) ≥ 𝜑(𝛼𝑖−1 ) && 𝑖 > 1]
𝛼∗ = 𝑧𝑜𝑜𝑚(𝛼𝑖−1 , 𝛼𝑖 ) dan berhenti
Langkah 4. Evaluasi 𝜑′ (𝛼𝑖 )
If |𝜑′(𝛼𝑖) | ≤ −𝑐2 𝜑′(0) maka 𝛼∗ = 𝑎𝑖
If |𝜑′(𝛼𝑖) | ≥ 0 maka 𝛼∗ = 𝑧𝑜𝑜𝑚(𝛼𝑖−1 , 𝛼𝑖 ) dan berhenti
Langkah 5. Pilih 𝜶𝒊+𝟏 ∈ (𝜶𝒊 , 𝜶𝒎𝒂𝒙 )
Langkah 6. 𝒊 = 𝒊 + 𝟏
ALGORITMA 4: Zoom
Langkah 1. Input 𝑐1, 𝑐2, dan iterasi
𝒂𝒍𝒐 +𝒂𝒉𝒊
Langkah 2. Interpolasi dengan bisection: 𝜶𝒋 = , 𝒂𝒋 ∈ (𝒂𝒍𝒐 , 𝒂𝒉𝒊 )
𝟐

Langkah 3. Evaluasi 𝜑(𝛼𝑗 )


Langkah 4. If 𝜑(𝛼𝑗 ) > 𝜑(0) + 𝑐1 𝛼𝑗 𝜑′ (0) | | 𝜑(𝛼𝑗 ) ≥ 𝜑(𝛼0 )
𝛼ℎ𝑖 = 𝛼𝑗
else
Langkah 5. Evaluasi 𝜑′ (𝛼𝑖 )
Langkah 6. If |𝜑′(𝛼𝑖 ) | ≤ −𝑐2 𝜑′(0)
Langkah 7. Atur 𝛼∗ = 𝑎𝑖 dan berhenti.
Langkah 8. if 𝜑(𝛼𝑗 )𝜑(𝛼ℎ𝑖 − 𝛼𝑙𝑜 ) ≥ 0
Langkah 9. 𝑎ℎ𝑖 = 𝑎𝑙𝑜
Langkah 5. Pilih 𝜶𝒍𝒐 = 𝜶𝒋
II. HASIL DAN PEMBAHASAN
Fungsi Griewank dua dimensi yang digunakan pada laporan ini adalah sebagai berikut,
1 𝑥2
𝑓 (𝑥 ) = 1 + (𝑥12 + 𝑥22 ) − cos(𝑥1 ) cos ( )
4000 √2
dengan −5 < 𝑥1 , 𝑥2 < 5.

III.
IV.
V.
VI.

GAMBAR 1. Grafik Fungsi Griewank GAMBAR 2. Kontur Fungsi Griewank

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 .

1. Fletcher- Reeves (FR-CG)


Dengan menggunakan FR-CG untuk titik awal 𝑥0 = [1, 0.4] , pada Tabel 1 menunjukkan bahwa
titik optimum diperoleh pada iterasi ke-10 dengan 𝑥𝑜𝑝𝑡 = [−7 × 10−6 , −1 × 10−5 ] dengan galat
7 × 10−6 . Berdasarkan pada Tabel 1 dan Gambar 3, terlihat pulan panjang langkah metode ini
cukup besar, sehingga hal ini mepercepat iterasi untuk mencapai titik minimum.
TABEL 1. Conjugate Gradient Fletcher- Reeves (FR-CG) dengan 𝑥0 (1, 0.4)

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 .

TABEL 2. Conjugate Gradient Polek-Riebiere (PR-CG) dengan 𝑥0 (1, 0.4)

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.

Tabel 3. Perbandingan Jumlah Iterasi


Titik Awal (𝒙𝟎 )
Metode
(−3, 2.75) (−3.25, −3) (1, 0.4) (3.25, 2.75) (2.9, −3.25)
FR-CG 7 7 10 10 6
PR-CG 5 5 5 8 7

Tabel 4. Perbandingan Galat


Titik Awal (𝒙𝟎 )
Metode (−3, 2.75) (−3.25, −3) (1, 0.4) (3.25, 2.75) (2.9, −3.25)
FR-CG 0.000008 0.000005 0.000007 0.000006 0.000088
PR-CG 0.000004 0.000003 0.000004 0.000002 0.000000

Tabel 5. Perbandingan Titik Akhir Iterasi ke-𝒌


Titik Awal (𝒙𝟎 )
Metode
(−3, 2.75) (−3.25, −3) (1, 0.4) (3.25, 2.75) (2.9, −3.25)
FR-CG -3.140030 -3.140025, -0.000007, 3.140029, 3.140029,
4.438448 -4.438453 -0.000001 4.438442 -4.438435
FR-CG -3.14002 -3.140025, 0.000000, 3.140024, 3.140023,
4.438444 -4.438443 0.000009 4.438448 -4.438445

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;

disp(' Metode Conjugate Gradient-Wolfe')


disp('==========================================================')

%% 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;

disp(' Tabel Iterasi ')


disp('=======================================================================
===========')
disp(' i x1 x2 pk(1) pk(2) f
Galat ')
disp('=======================================================================
==============')

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

disp(' Metode Conjugate Gradient-Wolfe')


disp('==========================================================')

%% 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;

disp(' Tabel Iterasi ')


disp('=======================================================================
=====================================')
disp(' i x1 x2 pk(1) pk(2) f
Galat ')
disp('=======================================================================
=====================================')

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

disp(' Metode Line Search: Step Length Wolfe, Direction Steepest')


disp('==========================================================')

[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));

if psi_alphaj>(psi_alpha0+c1*aj*psi_aksen0) || psi_alphaj>= psi_alphalo


a_hi=aj;
else
psi_aksenaj=(gradf(f, X1, X2, x1+aj*pk(1), x2+aj*pk(2)))'*pk;
if abs(psi_aksenaj)<=-c2*psi_aksen0
alfa=aj;
cek=false;
end
if psi_aksenaj*(a_hi-a_lo)>=0
a_hi=a_lo;

%psi_alphalo=psi_alphaj;
end
a_lo=aj;
end
end
end

Anda mungkin juga menyukai