• Sonuç bulunamadı

5. VOLANLI ENERJİ DEPOLAMA SİSTEMİNİN BENZETİMİ

5.4 Genetik Algoritmalar

5.4.7 Matlab ile Optimizasyon

Matlab programı optimizasyon amaçlı komutlar oluşturmuştur. Bu optimizasyon kullanım komutları ve algoritmaların özellik seçim komutları bulunmaktadır. Bu çalışmada genetik algoritma komutlarından faydalanılarak optimizasyon çalışması gerçekleştirilecektir. Öncelikle bu komutların işlevinin bilinmesi gereklidir. İlk olarak gerçekleştirilecek olan optimizasyon fonksiyonu matlab dosyası içinde tanımlanmalıdır. [x fval] = ga(@fitnessfun, nvars) şeklinde tanımlanan bir GA fonksiyonunda “@fitnessfun” başka bir matlab dosyasında tanımlanan uygunluk fonksiyonudur. “nvars” fonksiyondaki değişken sayısıdır. “x” işleyen GA’ nın değişkenlerinin aldığı en son değer. “fval” x noktasındaki uygunluk fonksiyonun değeridir.

[x fval] = ga(@fitnessfun, nvars,[ ],[ ],[ ],[ ],[ ],[ ],[ ], options) komutu ile GA giriş değerleri üzerinde işlem yapılabilmektedir. Örneğin değişkenlerin sınır değerleri bu komutla girilebilir.

Options = gaoptimset(@ga) komutu ile programın kendi tanımladığı kullanıcı ayarları dışında GA’ yı kullanan kişinin kendi istediği doğrultuda GA’ nın özelliklerini değiştirilebilmesine olanak sağlanmaktadır. Eğer daha önceden tanımlanmış matlab

69

içerisindeki ayarlar kullanılmak istenirse bu komutu yazmak yeterli olacaktır. GA ayarları değiştirilmek istenirse her özellik kendi içerisinde ayrı ayrı tanımlanabilir ve tanımlanmayan ayarlar daha önceden tanımlanmış ayarlar şeklinde kullanılmaktadır.

Options = gaoptimset(‘PopulationSize’,100) GA popülasyon büyüklüğü matlab standart ayarları 5 değişkenin altında 50 ve 5 değişkenin üzerinde 100 olarak belirlenir. Bu değerler belirlenirken popülasyonun kodlama türüne dikkat edilmelidir.

Options = gaoptimset(options,’PopulationType’, ‘doubleVector’) popülasyonun kodlama türünün belirlenmesi gerekmektedir. Matlab standart ayarları doubleVector olarak ayarlanmıştır. İstenildiği takdirde ikili kod sistemimi de seçilebilir.

Options = gaoptimset(options,’Generations’,50) GA’ nın kaç döngü olarak üretileceğinin göstergesidir. Bu değer belirlenirken çok fazla veya çok az olmamasına dikkat edilmesi gerekmektedir. Çok az olunca sonuca yaklaşılamayabilir. Çok fazla büyük olursa çözüm süresini uzatır ve sonuca yaklaştıkça çözüm uzayını fazla daraltır.

Options=gaoptimset(options,’FitnessLimit’, 1e-5) istenildiği takdirde belirlenebilir. Uygunluk fonksiyonunun almış olduğu değere bakarak GA ‘yı sonlandırmak için kullanılır. Burada uygunluk fonksiyonun almış olduğu değer 10-5 değerinden daha az olunca GA

sonlandırılır.

Options = gaoptimset(options,’PopInitRange’, [-999;1001]); bazen bazı uygulamalar sonucunda elde edilmiş değerlerin poülasyonun çözümünün başlangıç uzayını belirlemek çözüm süresini kısaltacaktır. Fakat yanlış belirlenmesi durumunda GA sonuca ulaşamaz çünkü uygunluk fonksiyonun en uygun değeri çözüm uzayının dışında kalabilir.

Options = gaoptimset(options,’CreationFcn’, @gacreationlinearfeasible) bu fonksiyon ile popülasyonun yeniden üretimi için gerekli olan yöntem seçilmektedir. İstenildiği takdirde kullanılabilir veya kullanıcının üretmiş olduğu fonksiyon tipi seçilip dosya olarak girilebilir. Bu fonksiyon kullanılmadığı takdirde matlab standart ayarları olan fonksiyon tipi kullanılmaktadır.

Options = gaoptimset(options,’MigrationDirection’, ‘both’) bu fonksiyon paralel işlem yapan GA’ larda tercih edilir. Alt popülasyonlar oluşturulur ve bunlar bir birey gibi çalıştırılır. Bir alt popülasyondaki en iyi birey ile başka bir alt popülasyondaki en kötü bireyin yer değiştirilmesi olayıdır. ‘forward’ seçildiğinde son iki alt popülasyon arasında göç olayı gerçekleştirilir. ‘both’ seçildiği takdirde bir önceki ve bir sonraki popülasyon arasında göç olayı gerçekleştirilir.

70

Options = gaoptimset(options,’FitnessScalingFcn’, { @fitscalingrank }) burada seçim fonksiyonu bir sonraki nesilde ebeveynleri seçmek için ölçeklendirilmiş uygunluk değerlerini kullanır. Böylece seçim fonksiyonu yüksek değerliğe sahip ölçekli bireylerin seçim olasılığını artırır. Ölçek değerinin aralığı GA’ nın performans değerini etkiler. Eğer ölçek aralığının değişim değeri çok büyük olursa yüksek ölçek değerliği olan bireylerin yeniden üretilmesi çok hızlıca olur, popülasyon gen havuzu çok hızlıca oluşur ve GA’ nın çözüm uzayının diğer bölgelerinde araştırmasına engel olunur. Eğer ölçek aralığının değişim değeri çok küçük olursa bütün bireyler yeniden üretimde yaklaşık aynı değerleri aşırlar ve GA’ nın araştırma işlemi çok yavaş olur. Matlab GA tollbox’ da standart ayar olarak Rank ölçeklendirme seçilmiştir. Rank ölçeklendirme her bireyin derecesine göre sıralama yapmaktadır.

Options = gaoptimset(options,’SelectionFcn’, { @selectionstochunif }) seçim fonksiyonu bir sonraki jenerasyon için uygunluk değeri yüksek olan bireylerin ebeveyn olarak seçilmesini sağlar. Matlab GA toolbox içerisinde tercih edilebilecek stochastic uniform, remainder, uniform, roulette ve tournament gibi seçim fonksiyonları tanımlanmıştır. Bu seçim fonksiyonları dışında tanımlanan bir seçim fonksiyonu da kullanılabilmektedir.

Options = gaoptimset(options,’CrossoverFcn’, @crossovertwopoint) çaprazlama operatörü popülasyon içerisinde rastgele seçilen bireylerden üretilen yeni bireylerin en uygunlarının bir sonraki popülasyona aktarılması için kullanılır. Tek nokta, iki nokta, sezgisel, dağınık ve aritmetik gibi çaprazlama operatörleri tanımlanmakla beraber istenildiği takdirde oluşturulan bir çaprazlama operatörü de kullanılabilir.

Options = gaoptimset(options,’EliteCount’, 2) poülasyondaki en uygun bireylerin bir sonraki popülasyona geçerken kaybolmasının önüne geçer. Bu değer poülasyon büyüklüğüne eşit veya daha küçük herhangi pozitif bir tamsayı olabilir.

Options = gaoptimset(options,’CrossoverFraction’, 0.8) çaprazlama sonrasında oluşan yeni nesilin elit bireyler dışında kalan kısmını belirtir. Standart ayarı 0.8 olmakla beraber 0 ile1 arasında bir değer olarak belirlenebilir.

Options = gaoptimset(options,’MutationFcn’, { @mutationgaussian 0.5 2 }) mutasyon operatörünü kontrol eden bu komut satırında ölçek parametresi birinci nesilde standart sapmayı belirler. Küçültme parametresi nesiller geçtikçe standart sapmadaki küçülmeyi kontrol eder. Burada ölçek parametresi 0.5 ve küçültme parametresi 1 olarak gösterilmiştir ve standart değerleri 1 olarak belirlenmiştir.

71

Options = gaoptimset(options,’HybridFcn’, { @patternsearch [] }) hibrit fonksiyonlar genetik algoritmanın çalışmasının sonlanmasından sonra çalışmaya başlayan uygunluk fonksiyonun minimum değerini araştıran bir diğer algoritmadır. İstenildiğinde kullanılabilen kısıtlı veya kısıtsız problemlere sahip genetik algoritmalarda kullanılabilecek pattersearch, fminsearch, fmincon ve fminunc fonksiyonları tanımlanmıştır.

Doğrudan arama algortimaları optimizasyon algoritmaların içerisinde önemli bir yer tutmaktadır. Pattern Search Algorithm (Desen Arama Algoritması, DAA) doğrudan arama yöntemlerinden önemli bir tanesidir. DAA sürekli fonksiyonların türevlerini kullanmadan fonksiyonun minimum noktalarını araştırır. Sadece türev bilgisini içermediği gibi dolaylı yoldan türev yaklaşımlarını da kullanmamaktadır. DAA klasik optimizsayon yöntemleri dışında kalan çeşitli optimizasyon sorunlarını çözmek için uygun olan evrimsel bir tekniktir. Basit yapısı, kolay geliştirilmesi ve hesaplama yöntemi olarak çok verimli bir algoritmadır. DAA her iterasyonda çözüm noktalarını aramak için kullanılan bir vektörler topluluğudur. DAA mevcut olan vektörler üzerinde işlem yaparak ağ olarak tarif edilen bir alan oluşturur ve bu alanın genişliği her adımda yeniden belirlenir. Yine her adımda ağ alanı içerisinde uygunluk fonksiyonu için yeni noktalar belirler. Daha sonra her adımda mevcut örüntü noktalarının vektörleri için uygunluk fonksiyonunun değerlerini hesaplar ve bu değerleri anket haline dönüştürür. Anketleme işlemi tamamlandığında sonraki iterasyona geçilir. DAA sadece ağ noktalarını hesaplar, uygunluk fonksiyonun değerleri ise anket içerisinde tutulur. Eğer algoritma yeni uygunluk fonksiyonu değerleri üretemezse başarısızlık oluşur ve bir sonraki iterasyona geçer. Böylece bütün ağ noktaları için uygunluk fonksiyonu değerleri hesaplanmış olur. Son olarak mevcut noktadaki en küçük uygunluk fonksiyonu değeri ile önceki ağ noktalarındaki uygunluk fonksiyonu değerleri karşılaştırılır ve belirlenmiş ağ noktalarındaki değer mevcut noktadaki değerden küçükse anketleme işlemi başarılı olarak gerçekleşmiş olur.

Genetik algoritmada hybrid (melez) algoritma çalışması seçilen doğrudan araştırma algoritmasına göre belirlenmektedir. Öncelikle GA çalışır ve belirlenen iterasyon sonunda bulanan uygunluk fonksiyonu değeri bir sonraki adımda çalışacak olan doğrudan araştrıma algoritması için başlangıç değeri olacaktır. Böylece doğrudan arama yönteminin çözüm uzayı özelleştirilmiş olup çözüme daha kısa sürede ve daha az hatayla ulaşması sağlanmış olur. Ayrıca çözüm uzayının başlangıç noktası genetik algoritma ile belirlendiği için, çözüm uzayının çok büyük olmasından kaynaklanabilecek yerel minimum veya yerel maksimum değerlerinin bir kısmı da elimine edilmiş olur.

72

Uygunluk fonksiyonu hata kriterleri ile oluşturulmuştur. Melez GA karmaşık problemlerin çözümünde kullanılan uygunluk fonksiyonunun değerini minimize etmeyi amaçlayan önemli bir optimizasyon yöntemidir. PID parametrelerinin en uygun değerlerini bulmak için Denklem 5.13 ile Denklem 5.17 arasında görülen hatanın mutlak değerinin integrali (IAE), hatanın karesel ortalamasının integrali (MSE), hatanın karesinin integrali (ISE), hatanın mutlak değerinin ve zamanın çarpımının integrali (ITAE) ve hatanın karesi ile zamanın çarpımının integrali (ITSE) hata kriterleri kullanılmaktadır [21].

IAE

e t dt  0 ( ) (5.13) 

  0 2 ) ( 1 t e MSE (5.14) 

 0 2 ) (t e ISE (5.15) ITAE

te t dt 0 ( ) (5.16) ITSE

tet dt  0 2 ) ( (5.17)

Aşağıdaki program satırları ile melez GA kullanılarak fırçasız doğru akım motorunun akım kontrolü için PID parametreleri hesaplanmıştır.

Melez_GA.m

function [x,fval] = melez_GA % GA datalarının belirlenmesi. Generations_Data=30; PopulationSize_Data=20; PopInitRange_Data=[-99999;1000001]; EliteCount_Data=10; CrossoverFraction_Data=0.8; FitnessLimit_Data=1e-5; nvars=3; lb=[0 0 0]; ub=[1500 1 1500]; % GA ayarlamarı options = gaoptimset;

73

options = gaoptimset(options,’PopulationType’, ‘doubleVector’); options = gaoptimset(options,’PopulationSize’, PopulationSize_Data); options = gaoptimset(options,’Generations’, Generations_Data); options = gaoptimset(options,’FitnessLimit’, FitnessLimit_Data); options = gaoptimset(options,’HybridFcn’, { @patternsearch [] }); options = gaoptimset(options,’PopInitRange’, PopInitRange_Data); options = gaoptimset(options,’CreationFcn’, @gacreationlinearfeasible); options = gaoptimset(options,’MigrationDirection’, ‘both’);

options = gaoptimset(options,’FitnessScalingFcn’, { @fitscalingrank }); options = gaoptimset(options,’SelectionFcn’, { @selectionstochunif }); options = gaoptimset(options,’CrossoverFraction’, CrossoverFraction_Data); options = gaoptimset(options,’MutationFcn’, { @mutationgaussian 0.5 2 }); options = gaoptimset(options,’EliteCount’, EliteCount_Data);

options = gaoptimset(options,’PlotFcns’, { @gaplotbestf });

options = gaoptimset(options,’CrossoverFcn’, @crossovertwopoint); options = gaoptimset(options,’Display’, ‘off');

[x,fval] = ...

ga(@bldcmotor,nvars,[],[],[],[],lb,ub,[],options); %Programın sonu.

Burada bldcmotor matlab dosyasının içerisinde motor, filtre, akım algılayıcısı ve PID transfer fonksiyonlarının bulunduğu ve bu fonksiyonların kullanılmasıyla elde edilen uygunluk fonksiyonu bulunmaktadır. Uygunluk fonksiyonu bazı hata kriterleri ile kullanılmaktadır. Bu hata kriterlerinin de program kodları bu dosya içerisinde bulunmaktadır.

bldcmotor.m

function fness=bldcmotor(x)

%LC filtre parametreleri

Lf=109.1e-6; %Kablo ve filtre induktanslarının toplamı Rf=0.146; %Kablo ve filtre dirençlerinin toplamı Cf=1e-6;

74 %LC filtre transfer fonksiyonu

filter=tf([Rd*Cf 1],[Lf*Cf (Rd+Rf)*Cf 1]);

%Motor ve diğer sistem parametreleri Ra=0.061; La=0.00685; J=1.895e-3; b=1.87e-7; kt=5.36e-3; kv=5.36e-3; Kc=9; Tc=2e-5; Ka=1; Ta=2e-5;

%değişkenlerin belirlenmesi ve diğer transfer fonksiyonları Kd=x(3);

Kp=x(2); Ki=x(1);

motor=tf([J 0],[La*J Ra*J kt*kv]); PID=tf([Kd Kp Ki],[1 0]); evirici=tf([0 Kc],[Tc 1]); sens=tf([0 Ka],[Ta 1]); sys=series(evirici,PID); sys1=series(sys,filter); motor_plant=series(sys1,motor);

%kapalı çevrim transfer fonksiyonu ve sistem performans değerleri close_feedback=feedback(motor_plant,sens);

sf=stepinfo(close_feedback) sys3=zpk(close_feedback) dc=dcgain(close_feedback) %Hata kriterlerinin belirlenmesi

75 time=0:0.0001:1;

[y t] = step(close_feedback,time); plot(time,y);

error=[1-y];

%Hatanın mutlak değerinin integrali error_a=abs(error);

error_a=trapz(time,error_a) fness=error_a

End

Eğer program içerisinde bant durduran ve LC filtre kullanılmak istenirse filtrenin transfer fonksiyonu aşağıdaki gibi belirlenebilir.

%bant durduran LC filtre parametreleri L1=100e-6; L2=100e-6; C1=100e-9; C2=1000e-9; R1=1.5; R2=1.8; a1=tf([L1*R1*C1 L1 0],[L1*C1 C1*R1 1]); a2=tf([R2*C2 1],[C2 0]); a3=tf([L2 0],[0 1]); a4=a1+a2+a3; filter=a2/a4;

Diğer hata kriterleri aşağıdaki şekilde kullanılabilir.

%Hatanın karesinin integrali error_a=(error.^2);

error_a=trapz(time,error_a)

76 error_a=abs(error);

error_a=error_a'.*time; error_a=trapz(time,error_a)

% hatanın karesi ile zamanın çarpımının integrali error_a=(error.^2);

error_a=error_a'.*time; error_a=trapz(time,error_a)

LC filtre kullanıldığı zaman, LC filtre ile sönümleme direnci kullanıldığı zaman ve bant durduran LC filtre kullanıldığı zaman akım kontrol sisteminin birim basamak cevapları geleneksel yöntem olan Ziegler-Nichols yöntemi ile melez GA yöntemi incelenecektir.

Benzer Belgeler