2014-07-18 59 views
0

在遺傳算法中,對染色體進行編碼是否合適,使得某些位比同一染色體中的其他位更重要?例如,(索引%2 == 0)/(2,4,6,...)位比(索引%2!= 0)/(1,3,5,...)位更重要。例如,如果位2的值在[1,5]範圍內,我們考慮位3的值,並且如果位2的值爲0,則位3的值不起作用。GA遺傳算法的染色體表示

例如,如果問題是我們有一所學校提供多門課程,我們想知道下一學期應該提供哪門課程,哪門課程不應該開設,如果應該開設哪門課程,誰應該教那門課,何時教他。因此,表示問題的一種方法是使用長度爲2n的矢量,其中n是課程的數量。每門課程都由一個2元組(誰,什麼時候)代表,什麼時候什麼時候應該教授課程,誰應該教授課程。第i個位置的元組保存第i個路線的分配。現在可能的值是誰是教師的ID [1-10],以及何時所有可能的時間加0的可能值,其中0意味着任何時候都不應該提供該課程。

現在可以有兩個不同的元組具有相同的健身嗎?例如,(3,0)和(2,0)對於第i個課程而言是不同的值,但它們意味着相同的東西,因此我們不關心如果何時= 0時誰不會提供這個課程。或者我應該給0添加0,這樣0意味着沒有人教導,而元組意味着當且僅當它的值是(0,0)時,不應該提供相應的課程。但是,如何(0,v)和(v,0),其中v> 0?我應該認爲這是否意味着不應該提供課程?我需要幫助。

回答

0

我不確定我完全理解你的問題,但我會盡力回答。

當使用遺傳算法解決問題時,您可以在編碼方式上有很大的靈活性。一般來說,有兩個地方可以使某些比特位更突出:適應性函數或算法的實現(即選擇,交叉和變異)。如果你想改變健身功能中某些位的顯着位置,我會繼續。這會鼓勵你想要的行爲,並且通常會導致某些位更加突出的解決方案。

我已經使用了很多遺傳算法,其中適應度函數給出了一些比特(或比特的分組)比其他更重的遺傳算法。這是相當標準的。

在遺傳算法實現中,在使某些比特比其他比特更顯着時,我會更仔細。我曾與算法,只允許某些位變異,或只能在某些點交叉。有時候他們可以很好地工作(有時他們對於問題是必需的),但是大多數情況下他們很難正確地工作,並且更容易出現早熟收斂等問題。

編輯: 在回答你問題的第二部分,您的意見:

應對哪裏都不應給予一個療程大概是在健身功能的情況下,最好的辦法。簡單地給這些低分(或沒有分數)。這同樣適用於染色體過程中的重複。理論上,這應該阻止他們成爲你人口中的流行部分。或者,你可以在每一代應用一種「剔除」的形式,它可以完全消除人羣中不可行的染色體。你大概可以通過完全排除染色體而不選擇健身得分來混合兩者。

從你對這個問題的描述來看,它似乎具有不可行的染色體可能會很普遍。這不一定是個問題。如果您的健身功能編碼良好,並且您使用了正確的選擇和交叉方法,則不應該成爲問題。只要更可行的解決方案更合適,您應該能夠發展出一個好的解決方案。

在某些情況下,在染色體的某些點停止交叉是一個好主意。這聽起來可能是這樣,但再次,不知道更多關於您的實施,很難說。

如果不知道更多關於計劃實現算法的信息,我無法給出更詳細的答案。我也不是很熟悉這個問題。這不是我曾經做過的事情。如果您在計劃編碼問題和健身功能方面添加更多細節,我可能會提供更具體的建議。

+0

謝謝@onABauer您的答案。從你的GA經驗,你可以給我一些關於我的問題第二部分的建議嗎?如果我代表一門課程(何時,誰),我該如何編碼,不應提供此課程?如果什麼時候可以採取所有可能的時間+ 0意味着在任何時候。什麼時候可以接受所有可能的教師ID + 0這意味着沒有人。然後(0,0)表示不應提供此課程。但是,如果我得到(0,3)或(9,0),我應該認爲這些與(0,0)相同嗎?這意味着不應該提供課程。 – Evan

+0

另一種編碼是讓GA染色體變長。一個染色體由多個課程組成,其中一個課程被表示(courseID,誰,何時),何時可以採取所有可能的時間以及何時可以接受所有可能的教師ID。但是在這種情況下,如果我在一個染色體中獲得課程重複,該怎麼辦?我該如何處理? – Evan

+0

我編輯了我的答案,試圖進一步回答你的問題 – OnABauer