初學編程,如何設計模擬一個螞蟻群體的小程序?求幫助?
初學python編程,想做一個螞蟻群體的計算機模擬的小程序,模擬一窩螞蟻自動築巢,覓食,繁育,死亡,搬家,戰鬥的過程。想先做個基於2D圖形的練練手,思路不太通暢。
我想是這樣的,程序的運行基於對現實螞蟻的計算機模擬,單只螞蟻的行為模式決策應當基於單只螞蟻能夠獲得信息,而不是程序員從上帝視角賦予這隻螞蟻關於全局的信息。比如說覓食時,要模擬螞蟻間的通信,而不是發給全體螞蟻一個坐標。需要仿生學,人工智慧等方面的知識。想到一些問題,尋求各位的幫助,把你們寶貴的經驗和知識分享給我,實現以後我也會分享代碼。1、行為模式——單個蟻是如何決定做什麼任務的?從而實現在覓食,築巢,戰鬥,搬家,後勤等狀態間切換,這個策略涉及到單個蟻與環境交互的問題,以及蟻間通訊的問題,從環境中能獲取哪些信息來支撐單個蟻的自主決策。或者說蟻群當中存在一個管理階級來給每隻螞蟻分配任務,如果有的話,他們的管理策略是什麼。或是兩種模式結合。這個希望得到生物學專業以及人工智慧專業的支持。——蟻巢中一隻螞蟻如何知道他該去哪個房間做什麼事,他的任務是天生的,還是有人分配的,還是無目的遊走碰到什麼做什麼?他能記住房間的路線嗎?他有固定的休息的房間嗎?
——一隻螞蟻如何決定挖掘方向,如何決定挖掘到什麼深度建立蟻巢?通道的挖掘長度如何確定,分支建立的時機如何確定?——螞蟻挖掘時如何判斷挖掘進度,比如寬度深度等怎麼計算呢,還有,需要轉彎該怎麼計算。有兩個思路,一個是演算法生成一個通道地圖,螞蟻按圖挖。另一個思路是,讓螞蟻邊挖邊決策,判斷是否夠寬,夠長,轉彎處形狀,等等。——螞蟻在蟻巢中尋路用什麼計算模型。如何模擬一個任意方向行走的螞蟻遇到障礙時的真實轉彎過程,而不是只能上下左右走。——如何隨機生成一個土壤環境,以及環境對挖掘路線的影響,可能太複雜,模型後期再加吧——建立蟻室的時機、大小、用什麼數據結構描述蟻室呢?——根據蟻室的功能、螞蟻數量確定蟻室的大小,比如棲息、食物儲存2、計算機描述——螞蟻的大小如何描述,矩形還是圓形合適?——土壤如何描述?挖掘的單位、步進。初步設想採用方格簡化描述,把土壤粒子化成一個個小方格,比如大約是一個螞蟻長度的三分之一。每次挖掘,消除一個土壤小方塊。——挖掘通道如何描述,以及如何設計一個根據環境和前進方向的螞蟻能否通過的演算法。
——蟻窩的圖形如何描述?用什麼數據結構存儲?多邊形如何建模?——設計一個螞蟻狀態機,狀態檢測演算法,比如挖通道狀態、挖蟻室狀態,設計狀態跳轉的條件。——由於土塊方格動態被銷毀,如何動態生成導航網格。暫時想這些,隨時補充
謝邀。
雖然我沒有完整的做過大遊戲,但是玩遊戲還是有很多年了。以下是個人粗淺的看法,歡迎斧正:遊戲,最關鍵的是設計核心玩法,有了核心玩法,其他的要圍繞核心來做。1、挖掘策略
——確定挖掘方向,斜面通道與重力夾角是多少?我的看法:你既然確立是是2D,那我猜測多半是垂直切面,水平夾角應該&<=45度,適當在主方向的過程中加入一點隨機數的搖擺,這樣出來的洞穴更加自然一些(當然也可以不考慮隨機搖擺,畢竟是遊戲,一切以照顧核心玩法優先)——通道的挖掘長度如何確定,分支建立的時機如何確定?
我的看法:你可以先網上搜索一下真實的螞蟻巢穴的垂直切面圖,建立一個標準的結構模型,然後挖掘時加入隨機參數進行修正。——如何隨機生成一個土壤環境,以及環境對挖掘路線的影響,可能太複雜,模型後期再加吧
——建立蟻室的時機、大小、用什麼數據結構描述蟻室呢?——根據蟻室的功能、螞蟻數量確定蟻室的大小,比如棲息、食物儲存我的看法:參考真實螞蟻巢穴2、計算機描述
——螞蟻的大小如何描述,矩形還是圓形合適?我的看法:大部分遊戲裡面的:地圖、角色、障礙物、道具,在計算機看來都是矩形的——土壤如何描述?挖掘的單位、步進。初步設想採用方格簡化描述,把土壤粒子化成一個個小方格,比如大約是一個螞蟻長度的三分之一。每次挖掘,消除一個土壤小方塊。
我的看法:給你一個地圖數據:{0:[1,0,1,1,1,1,1,1,1,1], 1:[1,1,0,0,1,1,0,1,1,1], 2:[1,1,1,1,0,0,1,0,1,1],3:[1,1,1,2,2,2,2,0,1,1],
4:[1,1,1,1,2,2,1,0,1,1], 5:[1,1,1,1,1,1,1,1,1,1], 6:[1,1,1,1,1,1,1,1,1,1], 7:[1,1,1,1,1,1,1,1,1,1], 8:[1,1,1,1,1,1,1,1,1,1], 9:[1,1,1,1,1,1,1,1,1,1]}以上字典,key表示從地面到地下的深度,後面的list表示從左邊到右邊的泥土塊,1表示泥土,0表示通道,2表示石頭等障礙物,你把這個數據結構擴大10倍或者更多。
——挖掘通道如何描述,以及如何設計一個根據環境和前進方向的螞蟻能否通過的演算法。
——蟻窩的圖形如何描述?用什麼數據結構存儲?多邊形如何建模?——設計一個螞蟻狀態機,狀態檢測演算法,比如挖通道狀態、挖蟻室狀態,設計狀態跳轉的條件。——由於土塊方格動態被銷毀,如何動態生成導航網格。
我的看法:依然是上面那個數據表,你很容易計算從某一點到另外一個點需要通過哪些為0的坐標位置。——還有通道要支持雙向通行,也就是說螞蟻挖洞時需要挖兩個單位再進行下一步挖掘,這個怎麼計算呢,還有,通道轉彎處怎麼計算呢。有兩個思路,一個是演算法生成一個通道地圖,螞蟻按圖挖。另一個思路是,讓螞蟻邊挖邊決策,判斷是否夠寬,夠長,轉彎處形狀,等等。
我的看法:玩過拼圖么?所有通道默認都是支持雙向通行(你見過只能單向的巢穴?)而且你一個2D遊戲,不要考慮那麼多邊界問題好么。默認Z軸很寬就好。——雙向行走的自動尋路用什麼模型,首先得解決如何生成有向路徑的問題。——如何模擬一個任意方向行走的螞蟻遇到障礙時的真實轉彎過程,而不是只能上下左右走。
我的看法:一個遊戲,重要的是遊戲性,而不是模擬程度,建議觀察一下《紅色警戒》等2D遊戲的單位行動,一般來說設計師會做8個方向的運動效果(左上,上,右上,左,右,左下,下,右下)等。——單個蟻是如何決定做什麼任務的?從而實現在覓食,築巢,戰鬥,搬家,後勤等狀態間切換,這個策略涉及到單個蟻與環境交互的問題,以及蟻間通訊的問題,從環境中能獲取哪些信息來支撐單個蟻的自主決策。或者說蟻群當中存在一個管理階級來給每隻螞蟻分配任務,如果有的話,他們的管理策略是什麼。或是兩種模式結合。這個希望得到生物學專業的支持。我的看法:請觀察真實世界的螞蟻巢穴,很多科普視頻。這個也和你的遊戲核心玩法有關係,先想好你的核心玩法。對於初學者,我建議還是把「生命遊戲」寫寫吧,相對簡單。
就題目里的想法,我不是打擊題主,你的主要問題不在於編程,而是你把自己當成了產品經理,就差個程序員了。太高深了。
我有個類似的主題:WSN的模擬,但是Python在這方面不算很強,一方面GIL限制了多線程。另外一方面速度不佔優勢。我也在找替代的工具。謝邀。我想你是聽說過蟻群演算法然後就誤會了吧?!
蟻群演算法是一種群體計算,用來解決NP問題,通過保留之前搜索狀態空間時的相關信息來提升搜索效率的。這方面有很完整的書籍與演算法介紹,沒必要自己重頭來的。
至於你說的東西,我認為對於一個初學者來說,難度太大了,沒必要。python是腳本級的語言,根本就不需要花費太多的精力,用的時候熟悉一下就可以了。太高大上了。。。。而且就像其它答案里說的,功能太多了。我覺得題主可以選擇一個方面嘗試一下。至於ai方面可以參考fifa這種遊戲的ai,叫啥狀態機?
謝邀!這個提問如此之長,很有意思,你娃多半是要走上編程的不歸路了,哈哈!
提問是一個宏大的構想,但是你必須先把事情簡單化,一步你不可能跳到終點去;其實也沒有終點,很多內容過於精緻、細節化,但一大半的細節內容是在很後期才會出現,等你真走到那兒了,你會發現其實細節是無窮無盡的,永遠都有提升空間。
建議:階段化。你需要設定最初的、版本1的簡單的目標;然後可能版本2、版本3的大致目標,再往後的東西就別去想了。
記住,最開始的重點是實現,不是精緻。要是追求完美,你將一直沒有成品(哪怕是簡單、粗糙的)出來,這會嚴重地打擊你繼續的願望。而一直有階段性的完成,這是很大的自我激勵。對於一個初學者,這個模型顯然是too hard to realize.
這個和python關係不大,主要是數學模型。建議你先看看「種群競爭模型」,看懂這個了,再了解一下「隨機過程」、「馬爾科夫鏈」,基本上可以做一個簡單的蟻群動態模型了。
當然,你要先明確,你是想學數學模型,還是想學python。想學python,就沒必要搞這個。
這是不是需要蟻群演算法?!!!這都是研究生才有的課題。。。你確定你是初學!!!
這也太難了吧,好幾個世界級的難題,真把這些搞定了你估計獲得好幾個諾貝爾獎了
小程序?這簡直是那一個億的小目標啊!
我認為最大的難點不在編程,而在於人類還沒把螞蟻的行為模式研究清楚吶。謝邀。我首先想知道你想解決什麼問題。
我的建議是這樣 你可以試著寫幾個群落 這幾個群落能做的事一樣 但是辦事優先策略不一樣然後這個集群落放在一個環境里 讓他們運行 模擬他們在同一個環境中成長 說白了 就是幾個代碼一起玩dota啊 可以試試 蠻好玩的
開始可以更簡單,土塊和螞蟻都只佔一方格,在地下可以認為四周都是土,都可攀爬,忽略重力,空洞連通就能走過去。如果沒玩過,可以玩一下《Minecraft》、《輻射:避難所》找靈感。
推薦閱讀: