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

這篇部落格文章詳細介紹了一個令人著迷的項目,該項目使用遺傳演算法 (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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python的執行模型:編譯,解釋還是兩者?Python的執行模型:編譯,解釋還是兩者?May 10, 2025 am 12:04 AM

pythonisbothCompileDIntered。

Python是按線執行的嗎?Python是按線執行的嗎?May 10, 2025 am 12:03 AM

Python不是嚴格的逐行執行,而是基於解釋器的機制進行優化和條件執行。解釋器將代碼轉換為字節碼,由PVM執行,可能會預編譯常量表達式或優化循環。理解這些機制有助於優化代碼和提高效率。

python中兩個列表的串聯替代方案是什麼?python中兩個列表的串聯替代方案是什麼?May 09, 2025 am 12:16 AM

可以使用多種方法在Python中連接兩個列表:1.使用 操作符,簡單但在大列表中效率低;2.使用extend方法,效率高但會修改原列表;3.使用 =操作符,兼具效率和可讀性;4.使用itertools.chain函數,內存效率高但需額外導入;5.使用列表解析,優雅但可能過於復雜。選擇方法應根據代碼上下文和需求。

Python:合併兩個列表的有效方法Python:合併兩個列表的有效方法May 09, 2025 am 12:15 AM

有多種方法可以合併Python列表:1.使用 操作符,簡單但對大列表不內存高效;2.使用extend方法,內存高效但會修改原列表;3.使用itertools.chain,適用於大數據集;4.使用*操作符,一行代碼合併小到中型列表;5.使用numpy.concatenate,適用於大數據集和性能要求高的場景;6.使用append方法,適用於小列表但效率低。選擇方法時需考慮列表大小和應用場景。

編譯的與解釋的語言:優點和缺點編譯的與解釋的語言:優點和缺點May 09, 2025 am 12:06 AM

CompiledLanguagesOffersPeedAndSecurity,而interneterpretledlanguages provideeaseafuseanDoctability.1)commiledlanguageslikec arefasterandSecureButhOnderDevevelmendeclementCyclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesandentency.2)cransportedeplatectentysenty

Python:對於循環,最完整的指南Python:對於循環,最完整的指南May 09, 2025 am 12:05 AM

Python中,for循環用於遍歷可迭代對象,while循環用於條件滿足時重複執行操作。 1)for循環示例:遍歷列表並打印元素。 2)while循環示例:猜數字遊戲,直到猜對為止。掌握循環原理和優化技巧可提高代碼效率和可靠性。

python concatenate列表到一個字符串中python concatenate列表到一個字符串中May 09, 2025 am 12:02 AM

要將列表連接成字符串,Python中使用join()方法是最佳選擇。 1)使用join()方法將列表元素連接成字符串,如''.join(my_list)。 2)對於包含數字的列表,先用map(str,numbers)轉換為字符串再連接。 3)可以使用生成器表達式進行複雜格式化,如','.join(f'({fruit})'forfruitinfruits)。 4)處理混合數據類型時,使用map(str,mixed_list)確保所有元素可轉換為字符串。 5)對於大型列表,使用''.join(large_li

Python的混合方法:編譯和解釋合併Python的混合方法:編譯和解釋合併May 08, 2025 am 12:16 AM

pythonuseshybridapprace,ComminingCompilationTobyTecoDeAndInterpretation.1)codeiscompiledtoplatform-Indepententbybytecode.2)bytecodeisisterpretedbybythepbybythepythonvirtualmachine,增強效率和通用性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中