本教學透過添加精英突出顯示、增加障礙複雜性、「達到」計數器和交叉育種等功能來增強遺傳演算法模擬。讓我們來分解一下改進。
第 1 部分:視覺增強與障礙複雜性
模擬升級為透過將精英點(上一代中表現最好的點)著色為藍色來在視覺上區分它們。 這是透過向 is_elite
類別的 Dot
方法添加 draw
布林參數並有條件地應用藍色來實現的。 Population
類別的 draw
方法被修改為根據點是否在 elites
列表中傳遞此佈林值。
障礙生成經過重構,具有更大的彈性。 Obstacle
和 Goal
類別被移到單獨的 obstacles.py
檔案中,從而促進更清晰的程式碼組織。 引入了 constants.py
檔案來保存螢幕尺寸和人口規模等全域變量,從而防止檔案之間出現冗餘。 OBSTACLES0
中定義了多種障礙物配置(OBSTACLES1
、OBSTACLES2
、OBSTACLES3
、OBSTACLES4
、OBSTACLES5
、obstacles.py
),可以在不同的挑戰等級之間輕鬆切換。 主腳本導入這些配置並選擇所需的配置。 新增了檢查以確保目標始終存在,即使使用透過清單理解產生的障礙清單(如 OBSTACLES4
)也是如此。
新增了「已達到」計數器,用於顯示上一代成功達到目標的點數。 這是透過修改 generate_next_generation
類別中的 Population
方法來計數並傳回該值來實現的。 然後主循環在螢幕上顯示此計數。
第 2 部分:實現單點交叉
模擬從複製過渡到單點交叉以產生後代。 crossover
類別方法被加入到 Dot
類別中。此方法將兩個父點作為輸入,選擇一個隨機交叉點,並透過組合每個父點的運動序列的部分(表示為方向向量清單)來建立兩個子代。 generate_next_generation
方法已更新為利用此交叉方法,產生後代對而不是單一克隆。 突變繼續應用於後代。
改進的模擬提供了增強的可視化、可調節的難度和更複雜的育種機制,使其成為更強大和更有洞察力的遺傳演算法範例。提到的未來改進包括保存/加載功能和速度優化。 作者也鼓勵加入他們的 Discord 社群以進行進一步的合作。
以上是使用遺傳演算法進行點模擬 - 第 2 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!