2011-06-17 68 views
5

我在Matlab中構建遺傳算法的約束矩陣時遇到了問題。我要導入GA功能這些矩陣爲具有以下約束的問題:如何設置Matlab遺傳算法約束?

a1<a2<a3...an-1<an , 0<ai<90, n=number of variables. 

Matlab的文件並沒有幫助我,因爲它僅是指簡單的公式,而不是這種限制。

我是GA的新手,每一次幫助都可以接受!

回答

1

matlab提供的默認約束不適合您的需求。

你可以試着翻譯你的約束,並添加一種懲罰狀態,就像這樣:

goalfunction value = Inf if conditions are not fulfilled 

但是,這將無法找到最佳的,那麼什麼是我的解決方案

您也可以嘗試翻譯問題和,而不是找你的價值觀,只要找到這個:

b(1), b(2), ... b(n), where bi = a(i)-a(i-1) and b(i) > 0 for each i 

所以,你只能找到每個初始變量之間的距離,並提供他們是積極的,你會發現monotically icreasing序列,這就是你需要的。告訴我,如果它滿足你。

PS。優化中的約束是很好的解決方法,並不總是直截了當地如何將每個真實世界的約束轉換爲aX > b :)

1

也許您可以提供以下選項來定義5參數問題的不等式約束。

Aineq = [1 -1 0 0 0; 0 1 -1 0 0; 0 0 1 -1 0; 0 0 0 1 -1; ] 

b = [0 0 0 0] 

這將轉化爲以下約束:

a1<a2 
a2<a3 
a3<a4 
a4<a5 

這相當於a1<a2<a3<a4<a5