首頁 > 後端開發 > Python教學 > 使用遺傳演算法進行點模擬 - 第 2 部分

使用遺傳演算法進行點模擬 - 第 2 部分

Barbara Streisand
發布: 2025-01-16 18:58:11
原創
397 人瀏覽過

本教學透過添加精英突出顯示、增加障礙複雜性、「達到」計數器和交叉育種等功能來增強遺傳演算法模擬。讓我們來分解一下改進。

第 1 部分:視覺增強與障礙複雜性

模擬升級為透過將精英點(上一代中表現最好的點)著色為藍色來在視覺上區分它們。 這是透過向 is_elite 類別的 Dot 方法添加 draw 布林參數並有條件地應用藍色來實現的。 Population 類別的 draw 方法被修改為根據點是否在 elites 列表中傳遞此佈林值。

障礙生成經過重構,具有更大的彈性。 ObstacleGoal 類別被移到單獨的 obstacles.py 檔案中,從而促進更清晰的程式碼組織。 引入了 constants.py 檔案來保存螢幕尺寸和人口規模等全域變量,從而防止檔案之間出現冗餘。 OBSTACLES0 中定義了多種障礙物配置(OBSTACLES1OBSTACLES2OBSTACLES3OBSTACLES4OBSTACLES5obstacles.py),可以在不同的挑戰等級之間輕鬆切換。 主腳本導入這些配置並選擇所需的配置。 新增了檢查以確保目標始終存在,即使使用透過清單理解產生的障礙清單(如 OBSTACLES4)也是如此。

新增了「已達到」計數器,用於顯示上一代成功達到目標的點數。 這是透過修改 generate_next_generation 類別中的 Population 方法來計數並傳回該值來實現的。 然後主循環在螢幕上顯示此計數。

Dots Simulation using Genetic Algorithm - Part 2

突出顯示精英和障礙的模擬

Dots Simulation using Genetic Algorithm - Part 2

模擬跑步OBSTACLES0障礙

第 2 部分:實現單點交叉

模擬從複製過渡到單點交叉以產生後代。 crossover 類別方法被加入到 Dot 類別中。此方法將兩個父點作為輸入,選擇一個隨機交叉點,並透過組合每個父點的運動序列的部分(表示為方向向量清單)來建立兩個子代。 generate_next_generation 方法已更新為利用此交叉方法,產生後代對而不是單一克隆。 突變繼續應用於後代。

Dots Simulation using Genetic Algorithm - Part 2

單點交叉

改進的模擬提供了增強的可視化、可調節的難度和更複雜的育種機制,使其成為更強大和更有洞察力的遺傳演算法範例。提到的未來改進包括保存/加載功能和速度優化。 作者也鼓勵加入他們的 Discord 社群以進行進一步的合作。

以上是使用遺傳演算法進行點模擬 - 第 2 部分的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板