ALTIN ORAN ARAMA (GOLDEN SECTION SEARCH) METODU Tek değişkenli bir f(x) 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) bulunmayabilir 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ı değerleri için f(x) [a, ] aralığında keskin bir şekilde artıyor ve [, 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 ( ) değeri vardır ve yukarıda verilen DOP modeli ile çözülür. a [a, b] aralığında unimodal bir fonksiyon = yerel maksimum değeri b [a, b] aralığında unimodal olmayan bir fonksiyon bu modelin [a, b] aralığındaki optimum çözümüdür. [a, b] aralığında iki nokta olan x 1 ve x 2 noktalarında (x 1 < x 2 ) f(x) fonksiyonunu incelediğimizde çözümü bulana kadar aralığı daraltabiliriz. f(x 1 ) ve f(x 2 ) 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(x 1 ) < f(x 2 ). f(x), [x 1, x 2 ] 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, x 1 ] aralığında oluşamaz. Bu sebeple Durum 1 de (x 1, b] dir.
Eğer f(x 1 ) < f(x 2 ) ise (x 1, b] Durum 2: f(x 1 ) = f(x 2 ). [x 1, x 2 ] aralığının bir kısmında f(x) azalıyordur ve optimum çözüm a < x 2 kısmındadır. Bu sebeple Durum 2 de [a, x 2 ) dir. Eğer f(x 1 ) = f(x 2 ) ise [a, x 2) Durum 3: f(x 1 ) > f(x 2 ). Bu durumda f(x), x x 2 ye ulaşmadan önce azalmaya başlayacaktır. Bu sebeple Durum 3 de [a, x 2 ) dir. Eğer f(x 1 ) > f(x 2 ) ise [a, x 2) nin [a, x 2 ) veya (x 1, 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ş x 1 ve x 2 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 olana 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: Altın oran arama algoritması x 1 ve x 2 noktalarında f(x) in incelenmesi ile başlar. x 1 = b r(b a) x 2 = a + r(b a) Şekilden de anlaşılabileceği gibi x 1 i bulmak için aralığın son noktasından aralık uzunluğu ile r nin çarpımı kadar sola gelinir. Benzer şekilde x 2 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(x 1 ) < f(x 2 ) ise (x 1, b], eğer f(x 1 ) f(x 2 ) ise [a, x 2 ) dir. Eğer f(x 1 ) < f(x 2 ) ise azaltılmış belirsizlik aralığı b x 1 = r(b a) uzunluğundadır. Eğer f(x 1 ) f(x 2 ) ise azaltılmış belirsizlik aralığı x 2 a = r(b a) uzunluğundadır. Bu sebeple f(x 1 ) ve f(x 2 ) incelendikten sonra belirsizlik aralığı r(b a) uzunluğuna indirgenmiş olur. f(x) iki noktada her incelenip belirsizlik aralığı azaltıldığında Altın Oran Arama Algoritmasının bir iterasyonu tamamlanmış olur. L k = algoritmanın k iterasyonu tamamlandığında belirsizlik aralığının uzunluğu I k = k iterasyonu sonundaki belirsizlik aralığı Buna göre L 1 = r(b a) ve I 1 = [a, x 2 ) veya (x 1, b] olur. Aşağıdaki prosedürü kullanarak iki yeni x 3 ve x 4 noktaları üretilir ve bu noktalarda f(x) incelenir. Durum 1: f(x 1 ) < f(x 2 ). Yeni belirsizlik aralığı (x 1, b] alınır. Uzunluğu b x 1 = r(b a) olacaktır.
x 3 = b r(b x 1 ) = b r 2 (b a) x 4 = x 1 + r(b x 1 ) Yeni bulunan x 3 noktası, daha önce bulunan x 2 noktasına eşit olacaktır. Bunu r 2 = 1 r gerçeğinden hareketle ispatlayabiliriz. x 3 = b r 2 (b a) = b (1 r)(b a) = a + r(b a) = x 2 Durum 2: f(x 1 ) f(x 2 ). Yeni belirsizlik aralığı [a, x 2 ) alınır. Uzunluğu x 2 a = r(b a) olacaktır. x 3 = x 2 r(x 2 a) x 4 = a + r(x 2 a) = a + r 2 (b a) Yeni bulunan x 4 noktası, daha önce bulunan x 1 noktasına eşit olacaktır. Bunu r 2 = 1 r gerçeğinden hareketle ispatlayabiliriz. x 4 = a + r 2 (b a) = a + (1 r)(b a) = b r(b a) = x 1 Şimdi f(x 3 ) ve f(x 4 ) 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. L 2 = rl 1 = r 2 (b a) olacaktır. Genel ifadesiyle; L k = rl k-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ığı 0,25 den küçük olacak şekilde Altın Oran Arama Algoritması ile çözelim: Max x 2 1 1 x 0,75
a = 1 b = 0,75 b a = 1,75 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 k > 4,06 Öyleyse 5 iterasyon Altın Oran Arama Algoritması işletilecektir. Önce x1 ve x2 bulunur. x 1 = 0,75 0,618 * 1,75 = 0,3315 x 2 = 1 + 0,618 * 1,75 = 0,0815 f(x 1 ) = ( 0,3315) 2 1 = 1,1099 f(x 2 ) = (0,0815) 2 1 = 1,0066 f(x 1 ) < f(x 2 ) olduğu için yeni belirsizlik aralığı (x 1, b] = ( 0,3315, 0,75] ve daha önce ispatlandığı üzere x 3 = x 2 olacaktır. L 1 = 0,75 ( 0,3315) = 1,0815 Yeni x3 ve x4 noktalarını bulacak olursak: x 3 = x 2 = 0,0815 x 4 = 0,3315 + 0,618 * 1,0815 = 0,3369 f(x 3 ) = f(x 2 ) = 1,0066 f(x 4 ) = (0,3369) 2 1 = 1,1135 f(x 3 ) > f(x 4 ) olduğu için yeni belirsizlik aralığı [x 1, x 4 ) = [ 0,3315, 0,3369) ve daha önce ispatlandığı üzere x 6 = x 3 olacaktır. L 2 = 0,3369 ( 0,3315) = 0,6684 Yeni x5 ve x6 noktalarını bulacak olursak: x 5 = 0,3369 0,618 * 0,6684 = 0,0762 x 6 = x 3 = 0,0815
f(x 5 ) = ( 0,0762) 2 1 = 1,0058 f(x 6 ) = f(x 3 ) = 1,0066 f(x 5 ) > f(x 6 ) olduğu için yeni belirsizlik aralığı [x 1, x 6 ) = [ 0,3315, 0,0815) ve x 8 = x 5 olacaktır. L 3 = 0, 0815 ( 0,3315) = 0,4130 Yeni x 7 ve x 8 noktalarını bulacak olursak: x 7 = 0, 0815 0,618 * 0,4130 = 0,1737 x 8 = x 5 = 0,0762 f(x 7 ) = ( 0,1737) 2 1 = 1,0302 f(x 8 ) = f(x 5 ) = 1,0058 f(x 7 ) < f(x 8 ) olduğu için yeni belirsizlik aralığı (x 7, x 6 ] = ( 0,1737, 0,0815] ve x 9 = x 8 olacaktır. L 4 = 0,0815 ( 0,1737) = 0,2552 Yeni x9 ve x10 noktalarını bulacak olursak: x 9 = x 8 = 0,0762 x 10 = 0,1737 + 0,618 * 0,2552 = 0,016 f(x 9 ) = f(x 8 ) = 1,0058 f(x 10 ) = (0,016) 2 1 = 1,0003 f(x 9 ) < f(x 10 ) olduğu için yeni belirsizlik aralığı (x 9, x 6 ] = ( 0,0762, 0,0815] olacaktır. L 5 = 0,0815 ( 0,0762) = 0,1577 < 0,25 olduğu için sonlandırılır. Sonuç olarak; Max x 2 1 1 x 0,75 modelinin çözümü ( 0,0762, 0,0815] aralığında olacaktır. (Tabi ki gerçek maksimum = 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.
Ö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 MATLAB Uygulaması ( ) fonksiyonunun optimum noktasını [0 10] aralığında altın oran arama algoritmasının MATLAB kodları ile bulalım. Fonksiyonun grafiği aşağıda görünmektedir. 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 0 1 2 3 4 5 6 7 8 9 10
Önce bu fonksiyonu tanımlayacağımız fx.m isimli dosyayı aşağıdaki gibi hazırlarız. 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. 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. 3. M. Turhan Çoban, Optimizasyon Ders Notları