[英]Unity: Machine learning - level solving
最近,我一直在研究機器學習,我想看看是否可以為當前正在制作的游戲創建AI。 人工智能應該能夠為您解決難題。
游戲目前按如下方式工作。 您在網格中有一些圖塊,其中一些是可移動的,有些則不可移動。 您單擊要移動的圖塊,然后將其拖動到一個方向。 然后它將開始移動磁貼,並且還可以移動玩家角色本身。 最終目標是達到最終目標。 關卡示例 , 求解關卡
自己玩游戲:
每當您選擇一個圖塊時(通過單擊即可執行此操作),然后按住鼠標按鈕,並將其拖到希望圖塊向其移動的方向上。 磁磚移動完成后,玩家對象將朝同一方向移動一步。 如果播放器位於您移動的圖塊上方,則它將隨圖塊一起移動。 然后,朝着相同的方向再做一步。
我想知道機器學習是否有可能(如果可以,如何)定義屏幕上的位置,(可選)單擊然后定義移動方向?
請記住,我是機器學習的新手!
進一步說明:
基於您的要點,老實說,我建議您實施A * Pathfinding算法 ,並進行一些修改以模擬機器學習。 A *尋路算法確定從點a
到點b
的網格上的最佳路徑,並且使用巧妙的編程,您可以以合理的開銷獲得所需的結果。
有一系列“請勿觸摸”網格點(死亡陷阱等)的路線, 隨着 AI進入網格點而被填充,因此在下一次迭代中,它知道不走那條路。 這是您的想法的非常基本的抽象,但是很容易獲得。
顯然,我們無法為您編寫代碼,幸運的是,A * Pathfinding上有大量資源可幫助您入門!
假設您實際上想使用機器學習,而不僅僅是路徑系統:
我將列出一些偽代碼,您可以將它們用於AI學習靜態板的基本情況。 您可以使用多種方法編寫和實現此代碼,我僅建議了一種方法。 但是在開始之前,讓我們先全面地討論該項目以及一些建議。
意見建議:
我想說的是,您將要測量棋盤上的游戲狀態,而不是鼠標的移動。 因此,基本上,人工智能正在衡量可以采取的措施。 鼠標移動部分只是玩家與棋盤互動的一種方式,因此AI不需要它。 讓AI直接進行操作會更簡單。
我認為團結不是進行這種實驗的良好平台。 我認為您最好在控制台程序中對此進行編程。 因此,例如在Visual Studio C#控制台程序中或通過CS50 IDE在C控制台程序中使用二維數組(板)(通過edx.org免費注冊CS50 https://manual.cs50.net/ ide )。 我之所以提出這些建議,是因為我認為Unity只會在機器學習實驗中添加不必要的層。
我的假設是,您想學習機器學習,而不僅僅是學習如何解決游戲中的難題。 因為在后一種情況下,更好的選擇將是合適的路徑系統,或者在移動前嘗試幾次自動拼圖並選擇步驟最少的解決方案。
偽代碼:
現在,為您的機器學習程序添加一些偽代碼。
假設:
答:您有一個具有設定尺寸的木板,可以在開始時將其傳遞給Ai。
B.板上有AI無法移動的磚塊(障礙物)。
C.人工智能應該學會解決問題,而不是因為我們設計好的代碼(像一個體面的路徑系統)而在開始時就沒有答案。
D.我們不希望AI在移動之前嘗試十億種不同的組合來強行執行此操作,因為這暗示了對其環境的完全理解。 如果AI對其環境有完全的了解,那么可以,在合理的情況下應使用蠻力。
編碼邏輯:場景1:每次以相同的起始條件在同一塊板上播放AI。
I.您從設置AI移動的離散時間開始。 例如,每1秒移動1次。
二。 擁有一個計數器,用於到達終點磚的移動次數,並記錄與此計數器關聯的移動順序。
三, 如果AI沒有歷史可動,它將沿隨機方向移動。
IV。 如果移動無效,則計數器增加並記錄移動,但AI停留在同一圖塊上。
V.當AI完成拼圖時,計數器和移動順序將存儲起來以備后用。
VI。 在隨后的播放中,AI總是從選擇嘗試次數最少的路徑開始。
七。 人工智能開始移動后,每次移動就有1%的機會嘗試其他操作。 這是一個例子。 當觸發1%時,AI有50%嘗試以下操作之一:
一個 。 50%機會:它會檢查其歷史記錄中的所有序列,以查看過去序列中是否有任何部分的當前圖塊和結束圖塊之間的計數器比其當前路徑短。 如果有多個,則選擇最短的一個。 當AI完成回合后,它會記錄新的總序列。
b 。 50%幾率。 Ai向隨機方向移動。 如果它朝隨機方向移動。 隨后的移動再次遵循50%機會檢查的邏輯,並且50%機會再次隨機移動。 再次完成后,記錄移動順序。
八。 您可以通過使AI在幕后幾秒鍾內將拼圖運行10,000次來播種,然后在您隨后觀察它時,它應該選擇一條合理的路徑。
如果計算機可以在合理時間內蠻力解決問題,則應從此開始。 但是請記住,計算機已經知道所有變量的計算機程序中的機器學習不同於環境中的機器學習,例如,您擁有必須在未知環境中導航的機器人。 上面的代碼應在后一種情況下工作。 您可能還想研究AI繪制整個地形的想法,方法是嘗試移動到每個圖塊並形成對環境的了解,然后在理解變量后就強行使用解決方案。
在非靜態環境中,您將需要增強評估系統。 這個答案已經太長了,因此我不再贅述。
這兩個問題的簡短答案:是的,
您可以創建一個使用游戲狀態的AI(這樣它就可以讀取網格的對象/屬性),也可以將原始屏幕輸入與圖像處理結合使用,這很難創建,而且運行起來很昂貴(計算) 。
在Unity表單上,對“如何模擬鼠標輸入”之類的問題有多個答案。 在這里看看:
https://answers.unity.com/questions/564664/how-i-can-move-mouse-cursor-without-mouse-but-with.html
不幸的是,如果您正在尋找AI的代碼,那么您就不走運了。 在線有大量的AI教程可為此類游戲創建簡單的AI。 我建議不要在奇特的事物(例如神經網絡)中先行學習,並從簡單開始。 我認為,最好的方法是從為您的AI創建一個(類)結構開始,然后開始通過實踐學習AI。 從“ AI”開始,它只是隨機返回一些東西,然后看看您可以在線學習和管理什么以及制作其他版本。
對於第一個AI之一,請看一下目標驅動的AI或狀態機。 考慮到您的gif圖像,我認為他們應該能夠給出不錯的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.