2016-04-01 25 views
0

Bir sinir ağı ve genetik algoritma kullanarak bir optimizasyon yapmaya çalıştım. giriş p (4x72 matris) ve hedef t (2x72 matris) ile bir sinir ağı kurdum. Genetik algoritma kullanarak optimizasyonu yeniden oluşturmak için, nöral ağın fitness fonksiyonu olarak sim işlevini kullandım. Ben, sırasıyla alt sınır ve üst sınır olan LB ve UB sağladıUygunluk fonksiyonunuz bir skaler değer döndürmelidir

[email protected](p) sim(net,p'); 
%'net' is the neural network I created with p as input and t as target 
[xOpt,fVal,exitflag,target]=ga(objFcn,4,[],[],[],[],LB,UB,[],options); 

aşağıdaki gibidir: bunun için kullanılan kod. I sim komutta p' kullanıldığı gibi ve options, I,

Mantıksal
options = gaoptimset('Vectorized','on'); 
% even vectorized off doesnt solve the problem 

ile çalıştı, elde edilen matris GA nüfusun aynıdır 72x2 olacaktır. Ama bir sebepten dolayı, her zaman 'fitness işlevinizin bir skaler değer döndürmesi' hatasıyla karşılaşıyorum.

Lütfen bu sorunu çözmek için bana kılavuzluk edin.

cevap

0

"sim" işlevi, ağınızdaki tüm çıktılarla bir matris döndürür. GA ile en aza indirmek için bir skaler değer sağlamak için karesi hatası hesaplamanız gerekir.

+0

Eğer ortalama karesel hata hesaplamak demek, 1x1 matrisinde sonuçlanacak, ki bu açıkça bir skaler haline geliyor? Sadece 1 çıktı ile denedim ve söylediğim yöntem mükemmel çalışıyor. 3 çıktıyı düşündüğümden, nasıl devam edeceğimi bilmiyorum. –

+0

Kodla bir işlev mse_caseed: işlevi mse_calc = mse_c (net, p, t) y = sim (net, p); mse_calc = sum ((y-t).^2)/uzunluk (y); end Bu işlev 72x1 matrisini döndürür. Ancak bunu GA'da bir fitness fonksiyonu olarak beslemek için bildiğim kadarıyla 1x72 olması gerekiyor. Transpoze işareti, fonksiyonda bir miktar hata verecektir. –

İlgili konular