本文章主要為了來(lái)記錄我在學(xué)習(xí)復(fù)現(xiàn)多智能體強(qiáng)化學(xué)習(xí)算法中遇到的問(wèn)題。首先我看的是基于值分解的強(qiáng)化學(xué)習(xí)算法,VDN,QMIX,QTRANS。為了更好理解和學(xué)習(xí)算法,我試著跑了基于PYMARL框架和SMAC環(huán)境中的一些算法,中間遇到不少問(wèn)題,同時(shí)代碼能力也不太好,所以記錄下來(lái),方便查看和學(xué)習(xí)。
SMAC環(huán)境安裝
SMAC是WhiRL基于暴雪星際爭(zhēng)霸II RTS游戲的協(xié)作多智能體強(qiáng)化學(xué)習(xí)(MARL)領(lǐng)域的研究環(huán)境。SMAC利用暴雪的StarCraft II機(jī)器學(xué)習(xí)API和DeepMind的PySC2為自主代理提供了一個(gè)方便的界面,以便與StarCraft II進(jìn)行交互,獲取觀察和執(zhí)行操作。與PySC2不同,SMAC專注于分散的微觀管理場(chǎng)景,其中游戲的每個(gè)單元都由單獨(dú)的RL代理控制。
1.SMAC安裝
SMAC官方地址
安裝前要保證有anaconda和pycharm等環(huán)境,smac環(huán)境運(yùn)行也需要各種包的支持,具體安裝要求看官方的文件
官方安裝SMAC的方式在readme文件中有詳細(xì)解釋,可以自行查閱。(嫌麻煩可以看我這個(gè),哈哈哈)首先我們需要下載git工具,記得把git加入環(huán)境變量,然后再進(jìn)行操作,(好像也可以把文件放到本地再安裝,但是我好像有問(wèn)題,沒(méi)成功)
-
運(yùn)用如下命令行直接安裝:
pip install git+https://github.com/oxwhirl/smac.git
這個(gè)好像安裝有點(diǎn)慢,我也沒(méi)弄成
-
用git將文件克隆到本地再安裝
git clone https://github.com/oxwhirl/smac.git
pip install -e smac/
除了安裝,smac環(huán)境還支持?jǐn)U展,具體的東西我也沒(méi)仔細(xì)看。
2.Installing StarCraft
在Windows系統(tǒng)下,直接去官網(wǎng)安裝星際爭(zhēng)霸2就可以了,記得把游戲加入環(huán)境變量中就可以。在Linux的系統(tǒng)下就需要查看文檔自行解決啦。
3.SMAC maps
SMAC由許多帶有預(yù)配置地圖的戰(zhàn)斗場(chǎng)景組成。在使用 SMAC 之前,需要將這些地圖下載到星際爭(zhēng)霸 II 的地圖目錄中。
下載 SMAC 地圖并將其解壓縮到您的 $SC 2PATH/地圖目錄。如果您通過(guò) git 安裝了 SMAC,只需將SMAC_Maps目錄從 smac/env/starcraft2/maps/ 復(fù)制到 $SC 2PATH/Maps 目錄中即可(如果沒(méi)有Maps目錄需要自己創(chuàng)建一個(gè))。地圖下載SMAC maps
下載成功后,可以通過(guò)如下命令查看地圖列表(在smac目錄下)
python -m smac.bin.map_list
查看的結(jié)果應(yīng)該是這樣:
maplist中依次是地圖名字,智能體數(shù),敵方數(shù)量,以及對(duì)戰(zhàn)最長(zhǎng)的時(shí)間步
4.Testing SMAC
安裝完smac后,需要進(jìn)行測(cè)試確保安裝成功,測(cè)試命令如下:
python -m smac.examples.random_agents
結(jié)果應(yīng)該是能把星際爭(zhēng)霸客戶端起起來(lái),并生成如下的結(jié)果:
做到了這里基本的星際爭(zhēng)霸強(qiáng)化學(xué)習(xí)環(huán)境就搭好了,后面就是搭進(jìn)行訓(xùn)練的框架
PYMARL框架實(shí)現(xiàn)和調(diào)試
GitHub鏈接PYMARL框架
PyMARL is WhiRL’s framework for deep multi-agent reinforcement learning and includes implementations of the following algorithms:
QMIX: QMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning
COMA: Counterfactual Multi-Agent Policy Gradients
VDN: Value-Decomposition Networks For Cooperative Multi-Agent Learning
IQL: Independent Q-Learning
QTRAN: QTRAN: Learning to Factorize with Transformation for Cooperative Multi-Agent Reinforcement Learning
PyMARL is written in PyTorch and uses SMAC as its environment.
1.創(chuàng)建PYMARL conda 環(huán)境
conda create _n pymarl python==3.7 -y
conda activate pymarl
安裝需要的包,pymarl的代碼中有一個(gè)requirements.txt的文件詳細(xì)說(shuō)明了各個(gè)包的版本,直接安裝就好了。(注意要進(jìn)入pymarl所在的路徑)自己下的話,就不能保證包的版本等問(wèn)題。
pip install -r requirements.txt
裝好需要的各種包之后就可以開(kāi)始調(diào)試并運(yùn)行代碼了。
2.調(diào)試PYMARL代碼
運(yùn)行pymarl上的實(shí)驗(yàn)可以在anaconda的cmd里用以下的默認(rèn)代碼(如果不是在pymarl的路徑下,main.py要加上文件所在路徑)
python3 src/main.py --config=qmix --env-config=sc2 with env_args.map_name=2s3z
不出意外的話,就會(huì)出意外了,基本是跑不起來(lái)。首先的一個(gè)問(wèn)題是yaml文件加載的問(wèn)題,可能由于這個(gè)環(huán)境寫(xiě)的時(shí)間比較久,yaml需要換其他的用法,具體要上網(wǎng)查找。在main文件中加載default.yaml文件需要用safe_load函數(shù),問(wèn)題就是f的輸入格式和加載格式不一致需要在字符串和字典轉(zhuǎn)換
config_dict = yaml.safe_load(f)
解決這個(gè)問(wèn)題之后應(yīng)該是能把config導(dǎo)入程序中,但是依然有錯(cuò)誤。在sacred包中,需要在環(huán)境中找到這個(gè)包,并進(jìn)入dependencies.py文件,在C:\Users.conda\envs\pymarl\Lib\site-packages\sacred\dependencies.py下。需要在第422行加上
os.environ[“GIT_PYTHON_REFRESH”] = “quiet”
這里引號(hào)格式會(huì)變,需要自己調(diào)整一下
原因好像是git但是也沒(méi)搞清楚具體問(wèn)題,反正git也不影響框架,所以沒(méi)有管它。
弄完這兩步應(yīng)該是沒(méi)有太大的問(wèn)題了,應(yīng)該能起來(lái)客戶端,并把實(shí)驗(yàn)跑起來(lái)了。但是用命令行,我不是很習(xí)慣,在windows下是可以在pycharm里跑起來(lái)的,只需要把參數(shù)的輸入位置改一改就好
params = deepcopy([ ‘main.py’,
‘–config=qmix’,
‘–env-config=sc2’,
‘with’,
‘env_args.map_name=2s3z’
])
在命令中需要注意with是一個(gè)單獨(dú)的參數(shù),在with后可以調(diào)整你想要的各種參數(shù)
3. 運(yùn)行pymarl實(shí)驗(yàn)并保存和查看回放
在運(yùn)行實(shí)驗(yàn)時(shí),如果對(duì)參數(shù)沒(méi)有改變,實(shí)驗(yàn)運(yùn)行的就是默認(rèn)的實(shí)驗(yàn)參數(shù),對(duì)實(shí)驗(yàn)的算法和環(huán)境都沒(méi)有改變,具體的實(shí)驗(yàn)參數(shù)配置在src/config文件配置里。–config配置的文件在src/config/algs中是對(duì)算法的配置,–env_args相對(duì)應(yīng)的配置文件在src/config/envs中。在algs中可以選用不同的算法,并改變算法的參數(shù)配置,在envs中可以選擇不同的實(shí)驗(yàn)環(huán)境和不同的獎(jiǎng)勵(lì)配置。
重點(diǎn)的參數(shù)解釋:
- t_max環(huán)境運(yùn)行的總步數(shù)
- save_model是否保存模型,save_model_interval保存模型間隔
- local_results_path模型結(jié)果存放位置,checkpoint_path模型加載位置
- save_replay保存加載后的模型測(cè)試結(jié)果回放
保存模型
- 可以通過(guò)設(shè)置 save_model = True(默認(rèn)情況下設(shè)置為 False)將學(xué)習(xí)的模型保存到磁盤(pán)。
- 保存模型的頻率可以使用save_model_interval配置進(jìn)行調(diào)整。
- 需要設(shè)置 local_results_path ,模型將保存在設(shè)置的結(jié)果目錄中名為 models 的文件夾下。
- 整個(gè)實(shí)驗(yàn)保存的模型包含了每次運(yùn)行對(duì)應(yīng)的目錄,每個(gè)模型都位于一個(gè)文件夾中,對(duì)應(yīng)于自開(kāi)始學(xué)習(xí)過(guò)程以來(lái)經(jīng)過(guò)的時(shí)間步長(zhǎng)數(shù)。
加載模型
- 通過(guò)checkpoint_path參數(shù)的配置,程序會(huì)加載path下的模型,會(huì)接著對(duì)應(yīng)的時(shí)間步繼續(xù)學(xué)習(xí)。
觀看StarCraft2的回放
save_replay選項(xiàng)允許保存使用checkpoint_path加載的模型的回放。成功加載模型后,將在測(cè)試模式下運(yùn)行test_nepisode集數(shù),并在 .SC2重播文件保存在星際爭(zhēng)霸II的重播目錄中。如果希望保存重播,請(qǐng)確保使用runner=episode。保存的重播文件的名稱以給定的 env_args.save_replay_prefix 開(kāi)頭(如果為空,則為 map_name),后跟當(dāng)前時(shí)間戳,如 3m_2022-11-10-08-57-39文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-420143.html
總結(jié)
基本上完成上面的步驟能把pymarl的框架跑起來(lái)了,后面就是仔細(xì)了解pymarl框架的代碼了,在這個(gè)過(guò)程中也參考了不少博主和網(wǎng)上的資料就不一一列舉了,后面會(huì)繼續(xù)更新PYMARL的框架結(jié)構(gòu)和對(duì)算法的改進(jìn)實(shí)驗(yàn),以及連續(xù)的多智能體強(qiáng)化學(xué)習(xí)算法epymarl框架。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-420143.html
到了這里,關(guān)于WINDOWS系統(tǒng)下PYMARL強(qiáng)化學(xué)習(xí)框架和SMAC環(huán)境安裝及測(cè)試問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!