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

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

Barbara Streisand
發布: 2025-01-08 08:13:46
原創
245 人瀏覽過

這篇部落格文章詳細介紹了一個令人著迷的項目,該項目使用遺傳演算法 (GA) 來模擬點向目標導航,同時避開障礙物。 GA 模仿自然選擇,根據點與目標的接近程度迭代地改進它們。

Dots Simulation using Genetic Algorithm - Part 1

遺傳演算法實作:

GA 遵循以下標準步驟:

  1. 初始化:隨機產生初始的點群。
  2. 評估:適應度函數根據每個點與目標的距離評估其表現。
  3. 選擇:選擇最適合的點作為下一代的父母。
  4. 交叉:來自兩個父母的遺傳訊息(運動方向)結合起來創造後代。 (注意:為了簡單起見,該項目最初使用複製;稍後將添加交叉。)
  5. 突變:將微小的隨機變化引入後代的運動方向以保持多樣性。
  6. 替換:上一代被後代替換。
  7. 精英主義:上一代中表現最好的點被保留在下一代中。
  8. 迭代: 步驟 2-7 重複指定的代數。

模擬概述:

模擬可視化了一群點的演化過程,以達到紅色方形目標。每個點的運動都是由它的「基因」(一系列運動方向)決定的。 透過選擇、突變和複製,族群會適應,提高其在繞過黑色矩形障礙物時到達目標的能力。

關鍵模擬組件:

  1. 點: 具有移動方向(染色體)和基於目標接近度的健身得分的智能體。
  2. 適應度函數:根據到目標的距離計算適應度,獎勵較短的路徑。
  3. 人口:幾代人不斷演變的點的集合。
  4. 遺傳演算法:驅動演化過程,選擇合適的個體並引入變異。
  5. 障礙:黑色矩形挑戰點的導航。
  6. 目標:圓點要達到的紅色方形目標。

專案設定(Python 與 Pygame):

此項目使用 Pygame 進行視覺化。 關鍵的全域變數控制模擬的參數(族群大小、突變率等)。 Dot 類別代表各點,管理它們的位置、運動和適應性。

初始模擬(單點):

初始程式碼模擬單點隨機移動,直到它退出螢幕邊界。這是引入種群和 GA 之前的基礎步驟。

人口模擬:

Population 類別管理點組。 update 方法移動點並檢查與障礙物的碰撞。 模擬現在顯示多個同時移動的點。

增加障礙與目標:

引入

ObstacleGoal 類別來分別表示障礙物和目標。 實施碰撞檢測,導致點在碰撞時「死亡」。模擬現在包括一個紅色目標方塊和一個黑色矩形障礙物。

實作遺傳演算法(複製):

get_fitness類別中的Dot方法計算適應度。 Population 類別獲得 generate_next_generationselect_best_dots 方法來實現選擇、複製(最初而不是交叉)、變異和精英主義。現在,模擬顯示了人口的幾代演變。

未來增強:

未來的部落格文章將涵蓋:

  • 從視覺上區​​分菁英點。
  • 增加更複雜的障礙。
  • 實施交叉以產生更成熟的後代。
  • 當點到達目標時顯示「已達到」訊息。

完整的程式碼(到目前為止)可以在 GitHub 上找到。 嘗試程式碼並分享您的發現! 加入 AICraftsLab Discord 社區,與其他人工智慧愛好者交流。

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

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