2016-01-08 65 views
-2

例如,0 < = x < = 31,二進制形式31的長度是5,因爲31 = 11111在基數2中。 然而,如何處理,比如說,0 < = x < = 25 if我保留長度5,可能會生成11110(30)等數字,超過11001(25)。 我想知道是否有映射可以解決這個問題。 非常感謝!在遺傳算法中,如何處理函數約束的二元表示?

+3

你的問題很不清楚。您能否擴展它以清楚地解釋您希望達到的目標以及您的問題是什麼? –

+0

@AndrasDeak很抱歉讓您困惑。我的問題是:如果x屬於[0,25],通常,因爲基數2中的25 = 11001,並且11001的長度爲5,我將隨機生成一些長度爲5的向量,使用1和0。在域[0,25]中以二進制表示x;然而,由於25不是2^k-1的形式,(與31 = 11111不同),生成的數字可能會落在域之外,比如26 = 11010。我的問題是:是否有一個一對一的映射,可以解決這個困境:) –

+0

是否有一個原因爲什麼你不生成整數高達25,*然後*將其轉換爲二進制? –

回答

0

如果我的理解正確,那麼您正在詢問如何處理自動生成的解決方案,這些解決方案超出了您的約束範圍。在這種情況下,您有幾種選擇,首先,您可以簡單地殺死這些無效的解決方案,並生成更多內容,直到您的約束條件滿足爲止更好的選擇是在指定範圍內規範化所有值,例如0到31或0到64等

我在這個例子的Evaluate Fitness函數中有這種類型的規範化的例子。

http://johnnewcombe.net/blog/gaf-part-2/

的代碼是根據各地的遺傳算法框架對於.NET但該技術可以應用到任何圖書館或本地增長算法。

+0

感謝您的回覆!規範化是一個好主意! –

+0

爲了澄清'正常化'的方法,我在這裏增加了一個關於這個主題的帖子:[http://johnnewcombe.net/blog/gaf-part-9/](http://johnnewcombe.net/blog/gaf-部分-9 /)。 –