在虛幻引擎4和5中創建機器學習AI代理
思想製造者概論:https://www.youtube.com/watch?v=mer_pzhapia
藍圖概述:https://youtu.be/tuo423nujek
Discord組:https://discord.gg/shxfwtmsha
Mindmaker AI插件是一個開源插件,可在UE4和UE5中的遊戲和仿真充當培訓自動駕駛機器學習劑的OpenAI健身環境。該插件促進了包含學習環境的不真實引擎項目與一個Python ML庫之間的網絡連接,該項目將來自虛幻引擎的數據接收到來自自定義的OpenAI健身房環境中,以培訓代理商。如果您使用Mindmaker的遠程ML Server創建自己的ML工具,則獨立的機器學習庫可以是自定義的Python腳本,或者它可以是預編譯的學習引擎,例如Mindmaker的DRL引擎(穩定的Baselines3算法)。無論您選擇哪種選項,使用Mindmaker AI插件開發人員和研究人員都可以輕鬆培訓2D,3D和VR項目的機器學習代理。
可能的應用程序將超越遊戲設計擴展到各種科學和技術努力。這些包括機器人模擬,自動駕駛,生成架構,程序圖形等。該API提供了一個中心平台,從該平台中,機器學習的進步可以到達許多這些領域。對於遊戲開發人員而言,用於自優化劑的用例包括控制NPC行為(在多種設置中,例如多代理和對抗性),原型遊戲設計決策以及對遊戲構建的自動測試。
DRL學習引擎包含在示例項目的鏈接中,以及用於修改它的Python源代碼,在內容 MindMaker source Directory中找到。 DRL學習引擎目前支持的算法包括:演員評論家(A2C),帶有經驗重播的樣本高效批評(ACER),使用Kronecker-Facter-Factored Trust地區(ACKTR),深Q網絡(DQN),近端政策優化(PPO),軟演員(SACER CLAINTIND),TWIN DELWIND DDDDD DD DD DDD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD, ient(ddpg)。該插件在功能上與Unity的ML代理相似,具有一些優勢 - 而不是為每個應用程序創建自定義的OpenAI健身房環境,而是使用一個環境,只需選擇代理的觀察值和操作即可暴露於ML算法。瞧,讓學習開始!
與Mindmaker插件合作時,您將使用兩個主要組件,一個包含學習環境的虛幻工程項目,以及代理使用的獨立機器學習庫來優化嘗試學習的任何內容。在您使用Mindmaker的遠程ML Server創建自己的ML工具的情況下,獨立的機器學習庫可以是自定義的Python腳本,或者它可以是預編譯的學習引擎,例如Mindmaker DRL引擎(穩定的基線算法)。
要與Mindmaker結合使用不同的ML庫進行實驗,請使用Mindmaker遠程ML Server。使用它,您可以自定義自己的Python學習引擎,而不是使用預先編譯的Mindmaker DRL引擎。要使用遠程ML Server,請按照以下步驟:
如果您想使用多個將連接到單個學習環境的ML客戶端,例如在多代理方案中,可以使用MindMaker服務器和插件來完成。
要創建多個學習代理,請首先設置學習代理,如示例藍圖之一所示。對於每個新的學習代理,您需要將新的AI控制器中的套接字端口設置增加1。在啟動服務器時,將自動為您啟動的MindMaker.exe的每個新實例創建新服務器端口號,從3000開始,從那裡開始,從那裡開始,總共需要100個。
例如,如果您將第二個學習代理添加到地圖中,則需要在第一個學習代理(啟動Mindmaker blueprint節點等)中使用的所有相同功能,但是您不必為端口3000分配此功能,而是將其分配給blueprints中的端口3001。除了更改藍圖中的Socketio端口設置外,您還需要更改以更改連接socketio藍圖函數,將“地址”和“在地址”和“端口”修改為您創建的“ http:// localhost:3001”的新數字。
完成此操作後,您只需要創建一個將連接到第二個學習代理的MindMaker_Client.py文件的第二個實例即可。可以同時進行培訓。您需要對MindMaker_Client.py進行的唯一修改是在文件底部更改sio.connect('http:// localhost:3000')to sio.connect('http:// localhost:3001')或您正在與之合作的新學習者的數量是什麼。如果您有五個學習代理人,那麼您將擁有五個客戶端的實例,每個實例都將擁有一個新的端口號,直至3005
使用穩定的baselines模仿學習3可以修改Mindmaker Python來源以使用支持的穩定baselines模仿學習算法來支持模仿學習
要保存訓練有素的模型,請在啟動Mindmaker功能中設置“訓練後保存模型”複選框。您將需要確保您的培訓劇集數量是一個非零號碼。培訓完成後,該模型將節省。要加載訓練有素的型號,請取消選中“訓練後保存模型”複選框,然後將啟動Mindmaker功能中的“負載預先訓練的模型”複選框設置為TRUE。您還需要將培訓情節的數量設置為零,因為不會進行任何培訓。確保評估發作的數量是一個非零整數,因為這將是預訓練的模型如何證明學習的方式。模型在您的計算機的“ AppData漫遊”文件夾中保存,例如C: Users Leon appdata roaming
默認情況下,MindMaker僅保存到Windows機器上的AppData/漫遊目錄。要啟用張板記錄,請按照以下步驟操作。
這是一個三個步驟,您需要確定代理商可以採取的行動,其獎勵標準是什麼以及代理商將需要對其環境進行的觀察,才能成功地學習獲得獎勵。
啟動Mindmaker -------->接收操作-------->進行OBS ----->檢查獎勵--------->發送OBS並將RWRD發送給Mindmaker --------------------------------------------
在學習過程中,必須首先使用代理使用的觀察空間以及代理可用的操作總數配置。您不需要提供任何獎勵信息在初始化時,只會在培訓期間遇到。
學習的總體過程是,一旦啟動並連接到虛幻引擎,Mindmaker Learning Engine將開始為不真實的發動機代理提供隨機的動作,並且為了響應,使用UE的經紀人還將發送一旦採取了該動作的觀察列表,此外,除了收到的任何獎勵之外,它都將進行。參見上圖。在許多情節中,Mindmaker使用的算法將根據從UE獲得的觀察結果和獎勵來優化代理的行動。無論是哪種機器學習算法選擇與Mindmaker一起使用,此過程都是相同的。有了這些信息,學習算法將開始優化代理的行動決策,理想情況下發現始終獲得獎勵所需的順序。隨機動作與故意動作之間的權衡是在您選擇的ML庫的探索/開發參數中控制了與Mindmaker一起使用的,例如穩定的基準。每個訓練的每集都重複此過程。經過固定數量的培訓情節後,您可以完全切換到使用算法來預測“最佳”動作,而不是隨機採取行動。
Mindmaker通過以Openai Gym兼容的格式包裝不真實的環境來發揮功能,以便任何旨在與OpenAI健身房合作的ML庫都可以在您的虛幻發動機環境中部署。使用開放AI健身房的目的是標準化學習的相關因素,即接受代理觀察,獎勵和行動的格式,以便任何ML AlgorityHM都可以訪問無需為每個特定任務進行翻新的相關學習變量。與OpenAI健身房合作的算法比使用使用標準化OpenAI協議的任何環境和代理人都可以使用。
一開始就配置Mindmaker學習引擎,您需要為您的學習代理配置啟動Mindmaker功能。這是通過在Mindmaker中設置Action_Space變量來等於代理可用的操作總數來完成的。您還需要配置Observation_Space變量,以匹配您的代理商將嘗試使用的獎勵的數量和類型。默認情況下,觀察值是從虛幻的數組傳遞的,請參見示例項目。根據您的代理商發現使用必要的觀測值的數量,Observation_space的大小將會改變。
獎勵 - 獎勵是根據您選擇的特定標準為代理人學習或優化的變量。在UE4藍圖中,您將使用分支節點來確定必須實現哪些環境條件和代理操作才能激活獎勵。這比Socketio連接傳遞給Mindmaker。請參閱項目示例。操作 - 這是一個包含代表代理商採取的任何操作的整數值的變量。您還需要確定代理可用的操作總數,並將最大值設置為MindMaker等於此數字。觀察 - 終止您將要處理的最棘手的變量。正確設置此設置的關鍵是要了解,除了在獎勵功能中引用的任何其他環境標準外,代理行動本身必須包括在觀測變量中。代理需要知道採取了哪些行動或行動,影響獎勵以及任何變化的環境變量。這些被傳遞給Mindmaker學習引擎作為數組,並在其中的觀測變量中進行了更新。
在這裡,我們將討論LaunchMindMaker藍圖節點的各個參數,這是Mindmaker藍圖功能的主要組成部分。
RL算法 - 這是可以選擇RL算法的風味的地方。下拉菜單中有十個選項,每種算法都有自己的優點和缺點。可以在此處找到有關相關算法及其用例的可用討論。 https://spinningup.openai.com/en/latest/spinningup/rl_intro2.html
NUM Train EP - 這是一個整數輸入,代表人們希望進行的培訓發作的數量。訓練發作的數量越大,代理商在過渡到訓練過程中獲得的戰略行為之前所做的探索越多。代理商試圖學習的動作的複雜性通常確定所需的訓練發作的數量 - 更複雜的策略和行為需要更多的培訓情節。
NUM ADER EP-這也是一個整數輸入,代表了訓練後代理商將進行的評估發作的數量。這些是代理商展示其學到的行為的情節。
連續的動作空間 - 這是一個布爾值輸入,它決定了代理是否使用連續的動作空間。連續的動作空間是代理可以採取的無限數量的動作,例如,如果它正在學習引導汽車,而轉向柱可以更改的角度範圍是0到180之間的小數點值,而不是在該範圍內的無限值,例如.12和.12和145.77744454。如果您的代理商具有無限數量的操作或有限的數字操作,則需要在使用開始時識別使用。動作空間必須是連續的或離散的,它不能兼具。
離散的動作空間 - 這是一個布爾值輸入,它決定了代理是否使用離散的動作空間。離散的動作空間是代理可以採取的有限動作的空間,例如AI只能移動一個空間或留下一個空間。在這種情況下,它只有兩個可用的操作,並且動作空間是離散的。用戶在使用MindMaker之前確定代理商將使用哪種操作空間並相應地設置這些值。
動作空間形狀 - 這定義了代理可用的動作的下部和上限。如果您使用的是離散的動作空間,那麼這僅僅是代理可用的操作總數,例如2或8。如果您使用的是連續的動作空間,則情況更為複雜,必須定義動作空間的低和高界限。這樣做的格式如下:低= lowboundary,高= highboundary,shape =(1,)在這種情況下,lowboundary是-100.4之類的值,而highboundary是一個值,例如298.46。然後,這些邊界之間的所有小數值將表示代理可用的操作。如果您有一系列此類操作,則可以更改形狀部分以反映這一點。
觀察空間形狀 - 正確地說,此輸入是開放AI自定義環境類的Python導數,並在採取行動後定義了觀測值的下部和上限。這樣做的格式如下:low = np.Array([[lowboundary]),high = np.Array([[Highboundary]),dtype = np.float32。想像一下,一個需要連續採取三個特定動作才能獲得獎勵的代理商,其觀察空間將需要包括對這三個動作的訪問,每三個動作都由獨特的觀察來表示。因此,一系列觀測值必須包括三個不同的值,每個值都有獨特的邊界。例如,這樣一個動作空間可以定義為:低= np.array([0,0,0]),高= np.array([[100,100,100]),dtype = np.float32,如果要觀察的代理所需的每個動作中的每個行為都需要在某些情況下進行獎勵,那麼它的行為是獎勵的,如果某些情況下的行為是獎勵的,則需要觀察到一個值對該值的引用。如果必須滿足五個條件才能獲得獎勵,那麼這五個條件中的每一個都必須是代理觀察空間的一部分。
負載預訓練的模型 - 這是一個布爾值,它確定您是否想讓代理商加載一些以前保存的預訓練的行為。如果將其設置為true,則需要在“保存 /加載模型名稱輸入框”中指定文件名。默認情況下,所有模型都保存到計算機的應用數據漫遊目錄,例如C: Users Username username AppData roaming
訓練後保存模型 - 這是一個布爾值,它確定您是否要向代理商保存訓練後學到的行為。如果將其設置為true,則需要在“保存/加載模型名稱輸入框”中指定文件名。默認情況下,所有模型都保存到計算機的應用數據漫遊目錄,例如C: Users Username username AppData roaming
保存/加載模型名稱 - 這是代表您要保存或加載的模型名稱的字符串。文件保存到計算機的應用數據漫遊目錄中
使用自定義參數 - 這是布爾值,它確定是否要使用已選擇或希望修改其參數的算法的庫存版本。如果您希望使用自定義參數,則可以通過自定義參數結構變量訪問這些參數。如果單擊它們,例如A2CPARAMS,您將看到這些結構中可以設置的所有值。可以在此處找到每種算法的參數的詳細分解:https://stable-baselines.readthedocs.io/en/master/
下面介紹了示例項目的功能示例列表,以了解如何在Mindmaker和Unreal Engine之間傳遞信息,所有與玩具問題相關的UE資產都包含在資產/深度LarearningNPC文件夾中。尤其重要的是藍圖在AI_CHARACTER_CONTROLER_BP藍圖中稱為AI_CHARACTER_CONTROLER_BP,所有環境變量均配置用於傳遞到MindMaker獨立應用程序。這些包括以下基本功能
負載感官輸入函數 - 導入AI可以訪問或操縱其環境控制功能的對象
定義動作空間函數 - 將所有可能的代理操作編碼為單個數字值,該值可以傳遞給獨立應用程序以通過RL算法評估
啟動mindmaker函數 - 在開始遊戲開始時,請調用獨立應用程序,以便它可以從UE環境開始評估數據。啟動此操作後,RL應用程序開始使用它會產生的隨機操作來探測環境,就像一個在黑暗中搜索光的盲人一樣。光是獎勵,它在UE功能檢查獎勵功能中指定。啟動LearlearningEngine還將一些基本的UE環境信息傳遞給獨立應用程序,例如代理商可以採取的動作數量,要訓練的情節總數以及在培訓後顯示代理商獲得的策略的情節數量。展示所有代理商隨機培訓將花費太長時間。
應收功能 - 在啟動學習引擎功能開始後,下一個要發射的功能是recieveaintion。這將收到由獨立應用程序選擇的操作,並對它進行許多後續過程,例如更新環境中的代理位置,檢查新操作是否滿足獎勵條件,如果我們通過培訓進行了訓練,並更新了對環境的訓練,則可以在下一情節中傳遞給代理的觀察。
使觀察功能函數 - 目的是在其剛採取的措施之後更新代理觀察到其環境的觀察。例如,這些將包括具有環境的代理位置以及自上次採取行動以來發生的任何其他環境數據。這些存儲在自定義結構變量中。
CheckReward - 這指定了環境中代理商的獎勵條件。如果在執行訴訟的代理之後滿足了此獎勵條件,則此信息將傳遞給隨後的發送觀測值函數中的獨立應用程序。發送觀察功能 - 獲取代理商進行的新觀察以及任何獎勵信息,並將其傳遞給獨立應用程序。這就是RL算法將能夠評估其剛剛採取的動作的方式,並相應地更新其策略。在此功能啟動之後,遊戲的一個迭代或情節已經完成,並且該過程重複AD Infinitum。
某些任務可能需要長時間的訓練,在這些任務中可以看到代理動作會非常耗時。因此,在某些示例中可視化代理人的運動已被禁用,但是一旦示例運行並完成後,培訓就在後台進行,代理將演示獲得的策略。
在這種情況下,隨機是意味著代理使用隨機數生成器在訓練過程中可用的操作之間進行選擇。然後,RL算法觀察這些隨機操作的結果以及收到的任何獎勵,並使用此信息在“剝削”階段選擇更好的動作。這就是學習策略的製定方式。
學習期間的信息收集採用了每個代理人隨機操作後生成的一系列觀察結果的形式。如果使用MindMaker插件,則在啟動Mindmaker藍圖功能的觀察大小屬性中定義了數組的確切形狀,並將取決於代理在該特定遊戲或學習任務中觀察的必要變量。它將根據學習任務或遊戲而改變。
代理只感知遊戲設計師暴露於環境的環境部分。使用Mindmaker插件時,這些觀察值在Make觀測值中填充了虛幻引擎中的藍圖函數。這將生成由啟動Mindmaker藍圖功能的觀察尺寸屬性定義的形狀的數組。應選擇觀察結果,以便它們僅構成代理商學習所需的數據,否則培訓可能會過時耗時。
在香草Q學習中 - 不需要神經網絡,學習以表格格式存儲。當使用Mindmaker深入強化學習時,可以在包括RNN,CNN等各種神經網絡體系結構之間進行選擇。可以將它們設置在每種算法的啟動Mindmaker blueprint功能調用的自定義屬性中。
創建自定義深入的增強學習環境
簡介。為視頻遊戲AI進行加強學習
強化學習 - 這是諾言和危險
穩定的基線文檔