Altın Oran Arama Metodu(Golden Search) Bir f(x) (tek değişkenli) fonksiyonunu ele alalım. [Bazı x ler için f (x) bulunamayabilir.] Aşağıdaki DOP modelini çözmek istediğimizi var sayalım. Max f(x) a x b f (x) bulunamayabilir veya f (x) = 0 denklemini çözmek çok zor olabilir. Bu konuda, f(x) eğer özel bir tür fonksiyon ise (unimodal fonksiyon) optimum(en iyi) değerinin nasıl bulunabileceği ele alınacaktır. Tanım: Şayet [a, b] aralığındaki bazı xx değerleri için f(x) [a, xx ] aralığında keskin bir şekilde artıyor ve [xx, b] aralığında ise keskin bir şekilde azalıyorsa f(x) fonksiyonu [a, b] aralığında unimodaldır. Yani bu aralıkta sadece tek bir tepe noktası bulunmaktadır. Eğer f(x) [a, b] aralığında unimodal ise [a, b] aralığında sadece bir yerel maksimum (xx ) değeri vardır ve yukarıda verilen DOP modeli ile çözülür. [a, b] aralığında unimodal bir fonksiyon xx = yerel maksimum değeri [a, b] aralığında unimodal olmayan bir fonksiyon xx bu modelin [a, b] aralığındaki optimum çözümüdür. [a, b] aralığında iki nokta olan x1 ve x2 noktalarında (x1 < x2) f(x) fonksiyonunu incelediğimizde çözümü bulana kadar aralığı daraltabiliriz. f(x1) ve f(x2) incelendiğinde aşağıdaki üç durumdan biri meydana gelir. Her üç durumda da optimum çözümün [a, b] aralığında olacağını gösterebiliriz.
Durum 1: f(x1) < f(x2). f(x), [x1, x2] aralığının en azından bir kısmında artmakta olduğu için f(x) in unimodal olmasından dolayı optimum çözüm [a, x1] aralığında oluşamaz. Bu sebeple Durum 1 de f(x1) < f(x2) için xx (x1, b] dir. Eğer f(x1) < f(x2) ise xx (x1, b] Durum 2: f(x1) = f(x2) ise [x1, x2] aralığının bir kısmında f(x) azalıyordur ve optimum çözüm a < x2 kısmındadır. Bu sebeple Durum 2 de f(x1) = f(x2) ise xx [a, x2) dir. Eğer f(x1) = f(x2) ise xx [a, x2) Durum 3: f(x1) > f(x2). Bu durumda f(x), x x2 ye ulaşmadan önce azalmaya başlayacaktır. Bu sebeple Durum 3 de f(x1) > f(x2) ise xx [a, x2) dir. Eğer f(x1) > f(x2) ise xx [a, x2) xx nin [a, x2) veya (x1, b] aralıklarından hangisinde bulunacağına belirsizlik aralığı denir. Bu belirsizlik aralığını azaltmak için çok sayıda arama algoritması bahsedilen bu fikirleri kullanmaktadır. Bu algoritmaların birçoğu aşağıdaki adımları kullanır:
Adım 1: x için belirsizlik aralığı olarak [a, b] aralığı ile başla. Makul bir şekilde seçilmiş x1 ve x2 noktaları için f(x) i incele. Adım 2: Durum 1, 2 veya 3 ten hangisine uyduğunu belirle ve belirsizlik aralığını buna göre azalt. Adım 3: İki yeni nokta için f(x) i incele (algoritma, bu iki yeni noktanın nasıl seçileceğini belirtmektedir). Belirsizlik aralığı yeterince küçük oluncaya kadar Adım 2 ye dön. Burada bu algoritmalardan biri olan Altın Oran Arama Algoritması ele alınacaktır. Bu algoritmaya göre unimodal f(x) fonksiyonunu çözerken, Adım 3 te iki yeni noktayı seçtiğimizde noktalardan biri daima daha önce f(x) i incelediğimiz noktalardan biri olarak seçilecektir. r karesel r 2 + r = 1 denkleminin pozitif bir kökü olsun. Karesel formülden şu elde edilir: rr = 55 11 22 = 00, 666666 Bu değer Altın oran olarak bilinir. Altın oran arama algoritması x1 ve x2 noktalarında f(x) in incelenmesi ile başlar. x1 = b r(b a) x2 = a + r(b a) Şekilden de anlaşılabileceği gibi x1 i bulmak için aralığın son noktasından aralık uzunluğu ile r nin çarpımı kadar sola gelinir. Benzer şekilde x2 yi bulmak için aralığın başlangıç noktasından aralık uzunluğu ile r nin çarpımı kadar sağa gidilir. Altın oran arama algoritması iki yeni nokta bulmuştur. Bu noktalarda f(x) yeniden incelenmelidir. Durum 1, 2 ve 3 te bahsedildiği üzere biliyoruz ki eğer f(x1) < f(x2) ise xx (x1, b], eğer f(x1) f(x2) ise xx [a, x2) dir. Eğer f(x1) < f(x2) ise azaltılmış belirsizlik aralığı b x1 = r(b a) uzunluğundadır. Eğer f(x1) f(x2) ise azaltılmış belirsizlik aralığı x2 a = r(b a) uzunluğundadır. Bu sebeple f(x1) ve f(x2) incelendikten sonra belirsizlik aralığı r(b a) uzunluğuna indirgenmiş olur. f(x) iki noktada incelenip belirsizlik aralığı azaltıldığında Altın Oran Arama Algoritmasının bir iterasyonu tamamlanmış olur. Lk = algoritmanın k iterasyonu tamamlandığında belirsizlik aralığının uzunluğu Ik = k iterasyonu sonundaki belirsizlik aralığı
Buna göre Lk = r(b a) ve I1 = [a, x2) veya (x1, b] olur. Aşağıdaki prosedürü kullanarak iki yeni x3 ve x4 noktaları üretilir ve bu noktalarda f(x) incelenir. Durum 1: f(x1) < f(x2). Yeni belirsizlik aralığı (x1, b] alınır. Uzunluğu b x1 = r(b a) olacaktır. x3 = b r(b x1) = b r 2 (b a)= x2 x4 = x1 + r(b x1) Yeni bulunan x3 noktası, daha önce bulunan x2 noktasına eşit olacaktır. Bunu r 2 = 1 r gerçeğinden hareketle ispatlayabiliriz. x3 = b r 2 (b a) = b (1 r)(b a) = a + r(b a) = x2 Durum 2: f(x1) f(x2). Yeni belirsizlik aralığı [a, x2) alınır. Uzunluğu x2 a = r(b a) olacaktır. x3 = x2 r(x2 a) x4 = a + r(x2 a) = a + r 2 (b a)= x1 Yeni bulunan x4 noktası, daha önce bulunan x1 noktasına eşit olacaktır. Bunu r 2 = 1 r gerçeğinden hareketle ispatlayabiliriz. x4 = a + r 2 (b a) = a + (1 r)(b a) = b r(b a) = x1 Şimdi f(x3) ve f(x4) fonksiyonları belirsizlik aralığını azaltmak için kullanılabilir. Bu aşamada Altın Oran Arama Algoritmasının iki iterasyonu tamamlanmıştır. Yukarıdan anlaşıldığı gibi Altın Oran Arama Algoritmasının her iterasyonunda f(x) sadece bir yeni noktada incelenecektir. L2 = rl1 = r 2 (b a) olacaktır. Genel ifadesiyle; Lk = rlk-1 = r k (b a) yazılabilir.
Bulunacak son belirsizlik aralığı < ɛ olmalıdır. Bu sebeple kaç iterasyon Altın Oran Arama Algoritması işletileceği, aşağıdaki formülden k değeri elde edilerek bulunur. r k (b a) < ɛ Örnek: Aşağıdaki modeli, nihai belirsizlik aralığı uzunluğu 0,25 den küçük olacak şekilde Altın Oran Arama Algoritması ile çözelim: Max f(x) = x 2 1 Arama aralığı: (a) 1 x 0,75(b) Bu aralık değerlerine göre Altın Oran Arama k İterasyon sayısını bulalım: a = 1 b = 0,75 b a = 1,75 (ilk aralık uzunluğu) r k (b a) < ɛ => 0,618 k * 1,75 < 0,25 => 0,618 k < 1/7 k * ln (0,618) < ln (1/7) k * (-0,48) < -1,95 =>> negatiflikten pozitif değerlere geçilirse: k * (0,48) > 1,95 Buradan İterasyon sayısı k > 4,06 = 5 olmalıdır. Öyleyse 5 iterasyon(adım) Altın Oran Arama Algoritması işletilecektir. 1.İterasyon: Önce x1 ve x2 bulunur. x1 = b r(b a) x2 = a + r(b a) den: x1 = 0,75 0,618 * 1,75 = 0,3315 x2 = 1 + 0,618 * 1,75 = 0,0815 f(x1) = ( 0,3315) 2 1 = 1,1099 f(x2) = (0,0815) 2 1 = 1,0066 f(x1) < f(x2) olduğu için yeni belirsizlik aralığı (x1, b] = ( 0,3315, 0,75] ve daha önce ıspatlandığı üzere x3 = x2 olacaktır. Yeni aralık büyüklüğü: L1 = b - x1 = 0,75 ( 0,3315) = 1,0815 (işlemlerin sona ermesi için)
2.İterasyon: Yeni x3 ve x4 noktalarını bulacak olursak: x3 = x2 = 0,0815 x4 = x1 + r * (b - x1 ) = 0,3315 + 0,618 * 1,0815 = 0,3369 f(x3) = f(x2) = 1,0066 f(x4) = (0,3369) 2 1 = 1,1135 f(x3) > f(x4) olduğu için yeni belirsizlik aralığı [x1, x4) = [ 0,3315, 0,3369) ve daha önce ispatlandığı üzere x6 = x3 olacaktır. Yeni aralık büyüklüğü: L2 = 0,3369 ( 0,3315) = 0,6684 3.İterasyon: Yeni x5 ve x6 noktalarını bulacak olursak: x5 = 0,3369 0,618 * 0,6684 = 0,0762 x6 = x3 = 0,0815 f(x5) = ( 0,0762) 2 1 = 1,0058 f(x6) = f(x3) = 1,0066 f(x5) > f(x6) olduğu için yeni belirsizlik aralığı [x1, x6) = [ 0,3315, 0,0815) ve x8 = x5 olacaktır. Yeni aralık büyüklüğü: L3 = 0, 0815 ( 0,3315) = 0,4130 4.İterasyon: Yeni x7 ve x8 noktalarını bulacak olursak: x7 = 0, 0815 0,618 * 0,4130 = 0,1737 x8 = x5 = 0,0762 f(x7) = ( 0,1737) 2 1 = 1,0302 f(x8) = f(x5) = 1,0058 f(x7) < f(x8) olduğu için yeni belirsizlik aralığı (x7, x6] = ( 0,1737, 0,0815] ve x9 = x8 olacaktır. Yeni aralık büyüklüğü: L4 = 0,0815 ( 0,1737) = 0,2552 5.İterasyon: Yeni x9 ve x10 noktalarını bulacak olursak: x9 = x8 = 0,0762 x10 = 0,1737 + 0,618 * 0,2552 = 0,016
f(x9) = f(x8) = 1,0058 f(x10) = (0,016) 2 1 = 1,0003 f(x9) < f(x10) olduğu için yeni belirsizlik aralığı (x9, x6] = ( 0,0762, 0,0815] olacaktır. Yeni aralık büyüklüğü: L5 = 0,0815 ( 0,0762) = 0,1577 < 0,25 olduğu için işlemler sonlandırılır. Sonuç olarak; Max f(x) = x 2 1 1 x 0,75 modelinin çözümü ( 0,0762, 0,0815] aralığında olacaktır. (Tabi ki gerçek maksimum xx = 0 da oluşacaktır.) Altın Oran Arama Algoritması, Minimizasyon problemlerinde de kullanılabilir. Bunun için amaç fonksiyonu 1 ile çarpılır. Bulunan çözüm aralığı geçerlidir. f(x) in değeri için ilk fonksiyon kullanılmalıdır. Ödev: 1. Altın Oran Arama Algoritmasını Excel de hazırlayın. 2. Altın Oran Arama Algoritmasının MATLAB kodlarını yazın. 3. Altın Oran Arama Algoritmasını bildiğiniz bir programlama dili ile yazın. Sorular 1. Aşağıdaki modelin optimum çözümünü 0,8 belirsizlik aralığı için çözünüz. Max. x 2 + 2x - 3 x 5 2. Aşağıdaki modelin optimum çözümünü 0,6 belirsizlik aralığı için çözünüz. Max. x e x 1 x 3
Altın Oran Arama Algoritması MATLAB Uygulaması fonksiyonunun optimum noktasını [0 10] aralığında altın oran arama algoritmasının MATLAB kodları ile bulalım. Önce bu fonksiyonu tanımlayacağımız fx.m isimli dosyayı aşağıdaki gibi hazırlarız. Fonksiyon minimizasyon olduğu için 1 ile çarpıldığına dikkat edin. function g = fx(c) g = -(2*c./(4+0.8*c+c.^2+0.2*c.^3)); Daha sonra yukarıda tanımlan fonksiyonu çağırarak çalışan altın oran arama algoritmasının kodları altin.m dosyasında oluşturulur. Bu kodlar aşağıda verilmiştir. function [p, yp]=golden(func,a,b,eps,delta) % verilen argüman (girdi) sayısına göre eps/delta değerlerini otomatik al if (nargin<5) delta = 1.0e-10; end if (nargin<4) delta = 1.0e-10; eps = 1.0e-10; end r=(sqrt(5)-1)/2; h=b-a; c=b-r*h; d=a+r*h; ya=feval(func,a); yb=feval(func,b); yd=feval(func,d); yc=feval(func,c); maxit=200; k=1; while (abs(yb-ya) > eps & (h > delta) & (k < maxit)) k=k+1; if (yc < yd) b = d; yb = yd; d = c; yd = yc; h = b - a; c = b - r*h; yc = feval(func,c); else a = c; ya = yc; c = d; yc = yd; h = b - a; d = a + r*h; yd = feval(func,d); end end dp = abs(b-a); dy = abs(yb-ya); p = a;
yp = ya; if (yb < ya) p = b; yp = yb; end if (k > maxit) uyari = 'Maksimum iterasyon aşıldı. Sonuç doğru olmayabilir' end Yukarıdaki iki.m dosyası hazırlandıktan sonra MATLAB komut ekranında aşağıdaki gibi altın oran arama algoritması çalıştırılır ve sonuç elde edilir. >> [x fdeg]=altin(@fx, 0, 10) x = 1.5679 fdeg = -0.3696 Kaynak (---1.soru Ödev..1.öğr.ler..25.02.2013.) 1. Wayne Winston, Operations Research Applications and Algorithms 4th. Edition, 2003 2. MATLAB: Yapay Zekâ ve Mühendislik Uygulamaları, Prof. Dr. C. Kubat, Beşiz Yayınları- 1.Basım, Aralık 2012.