欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python玩轉(zhuǎn)街機(jī)游戲,操作親民!-創(chuàng)新互聯(lián)

成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比嶺東網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式嶺東網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋嶺東地區(qū)。費用合理售后完善,10年實體公司更值得信賴。

python玩轉(zhuǎn)街機(jī)游戲,操作親民!

這是一個允許你在幾乎任何街機(jī)游戲中訓(xùn)練你的強化學(xué)習(xí)算法的Python庫,它目前在Linux系統(tǒng)上可用。通過這個工具包,你可以定制算法逐步完成游戲過程,同時接收每一幀的數(shù)據(jù)和內(nèi)部存儲器地址值以跟蹤游戲狀態(tài),以及發(fā)送與游戲交互的動作。

跟大家推薦一下我的Python學(xué)習(xí)交流裙【 784758214 】內(nèi)有安裝包和學(xué)習(xí)視頻資料,零基礎(chǔ),進(jìn)階,,大牛在線解答疑問。希望可以幫助你快速了解Python、學(xué)習(xí)python

安裝

GitHub地址:github.com/M-J-Murray/MAMEToolkit/blob/master/README.md

你可以用pip安裝這個庫,只需運行以下命令:

pip install MAMEToolkit

演示:街霸

python玩轉(zhuǎn)街機(jī)游戲,操作親民!

街霸是史上最經(jīng)典的游戲之一?,F(xiàn)在工具包內(nèi)包含的街霸版本是街頭霸王3:三度沖擊(Japan 990608, NO CD),我們以此為例,用以下代碼寫一個隨機(jī)智能體:

import randomfrom MAMEToolkit.sf_environment import Environment
 
roms_path = "roms/"env = Environment("env1", roms_path)
env.start()while True:
   move_action = random.randint(0, 8)
   attack_action = random.randint(0, 9)
   frames, reward, round_done, stage_done, game_done = env.step(move_action, attack_action)   if game_done:
       env.new_game()   elif stage_done:
       env.next_stage()   elif round_done:
       env.next_round()

支持hogwild!

hogwild!? Niu等人引入了一個叫做 Hogwild! 的更新策略,可以使 SGD 可以在多 CPU 上并行更新。處理器在無需對參數(shù)加鎖的情況下就可以訪問共享內(nèi)存。但僅在輸入的是稀疏數(shù)據(jù)時才有效,因為每次更新僅修改所有參數(shù)的一小部分。他們展示了在這種情況下,更新策略幾乎可以達(dá)到一個最優(yōu)的收斂率,因為處理器不太可能覆蓋掉有用的信息。

from threading import Threadimport randomfrom MAMEToolkit.sf_environment import Environment 
 
def run_env(env):
   env.start()   while True:
       move_action = random.randint(0, 8)
       attack_action = random.randint(0, 9)
       frames, reward, round_done, stage_done, game_done = env.step(move_action, attack_action)       if game_done:
           env.new_game()       elif stage_done:
           env.next_stage()       elif round_done:
           env.next_round() 
 
def main():
   workers = 8
   # Environments must be created outside of the threads
   roms_path = "roms/"
   envs = [Environment(f"env{i}", roms_path) for i in range(workers)]
   threads = [Thread(target=run_env, args=(envs[i], )) for i in range(workers)]
   [thread.start() for thread in threads]


建立自己的游戲環(huán)境


這個工具包之所以易于上手,是因為它和模擬器本身不需要太多交互,只需注意兩點——一是查找你關(guān)注的內(nèi)部狀態(tài)相關(guān)聯(lián)的內(nèi)存地址值,二是用選取的環(huán)境跟蹤狀態(tài)。你可以用MAME Cheat Debugger,它會反饋游戲的內(nèi)存地址值如何隨時間變化。如果要創(chuàng)建游戲模擬,你得先獲得正在模擬的游戲的ROM,并知道MAME使用的游戲ID,比如街霸的ID是'sfiii3n'。

游戲ID

你可以通過運行以下代碼找到游戲的ID

from MAMEToolkit.emulator import Emulator
emulator = Emulator("env1", "", "", memory_addresses)

這個命令會打開MAME仿真器。你可以搜索游戲列表以找到想要的游戲,游戲的ID位于游戲標(biāo)題末尾的括號中。

內(nèi)存地址

如果獲得了ID,也有了想要跟蹤的內(nèi)存地址,你可以開始模擬:

from MAMEToolkit.emulator import Emulatorfrom MAMEToolkit.emulator import Address
 
roms_path = "roms/"game_id = "sfiii3n"memory_addresses = {       "fighting": Address('0x0200EE44', 'u8'),       "winsP1": Address('0x02011383', 'u8'),       "winsP2": Address('0x02011385', 'u8'),       "healthP1": Address('0x02068D0B', 's8'),       "healthP2": Address('0x020691A3', 's8')
   }
 
emulator = Emulator("env1", roms_path, "sfiii3n", memory_addresses)

這會啟動仿真器,并在工具包連接到模擬器進(jìn)程時暫停。

分步運行仿真器

連接工具箱后,你可以分步運行仿真器:

data = emulator.step([])
frame = data["frame"]
is_fighting = data["fighting"]
player1_wins = data["winsP1"]
player2_wins = data["winsP2"]
player1_health = data["healthP1"]
player2_health = data["healthP2"]

step函數(shù)會把幀數(shù)據(jù)作為NumPy矩陣返回,同時,它也會返回該時間步長的所有內(nèi)存地址整數(shù)值。

如果要向仿真器輸入動作,你還需要確定游戲支持的輸入端口和字段。比如玩街霸需要先投幣,這個代碼是:

from MAMEToolkit.emulator import Action
insert_coin = Action(':INPUTS', 'Coin 1')
data = emulator.step([insert_coin])

要確定哪些端口可用,請使用list actions命令:

from MAMEToolkit.emulator import list_actions
roms_path = "roms/"game_id = "sfiii3n"print(list_actions(roms_path, game_id))

下面這個返回的列表就包含街霸環(huán)境中可用于向步驟函數(shù)發(fā)送動作的所有端口和字段:

[
   {'port': ':scsi:1:cdrom:SCSI_ID', 'field': 'SCSI ID'},
   {'port': ':INPUTS', 'field': 'P2 Jab Punch'},
   {'port': ':INPUTS', 'field': 'P1 Left'},
   {'port': ':INPUTS', 'field': 'P2 Fierce Punch'},
   {'port': ':INPUTS', 'field': 'P1 Down'},
   {'port': ':INPUTS', 'field': 'P2 Down'},
   {'port': ':INPUTS', 'field': 'P2 Roundhouse Kick'},
   {'port': ':INPUTS', 'field': 'P2 Strong Punch'},
   {'port': ':INPUTS', 'field': 'P1 Strong Punch'},
   {'port': ':INPUTS', 'field': '2 Players Start'},
   {'port': ':INPUTS', 'field': 'Coin 1'},
   {'port': ':INPUTS', 'field': '1 Player Start'},
   {'port': ':INPUTS', 'field': 'P2 Right'},
   {'port': ':INPUTS', 'field': 'Service 1'},
   {'port': ':INPUTS', 'field': 'Coin 2'},
   {'port': ':INPUTS', 'field': 'P1 Jab Punch'},
   {'port': ':INPUTS', 'field': 'P2 Up'},
   {'port': ':INPUTS', 'field': 'P1 Up'},
   {'port': ':INPUTS', 'field': 'P1 Right'},
   {'port': ':INPUTS', 'field': 'Service Mode'},
   {'port': ':INPUTS', 'field': 'P1 Fierce Punch'},
   {'port': ':INPUTS', 'field': 'P2 Left'},
   {'port': ':EXTRA', 'field': 'P2 Short Kick'},
   {'port': ':EXTRA', 'field': 'P2 Forward Kick'},
   {'port': ':EXTRA', 'field': 'P1 Forward Kick'},
   {'port': ':EXTRA', 'field': 'P1 Roundhouse Kick'},
   {'port': ':EXTRA', 'field': 'P1 Short Kick'}
]

仿真器類還有一個frame_ratio參數(shù),可用于調(diào)整算法所見的幀速率。默認(rèn)情況下,MAME以每秒60幀的速度生成幀,如果你覺得這太多了,想把它改成每秒20幀,可以輸入以下代碼:

from MAMEToolkit.emulator import Emulator
emulator = Emulator(roms_path, game_id, memory_addresses, frame_ratio=3)

python玩轉(zhuǎn)街機(jī)游戲,操作親民!

MAME性能基準(zhǔn)測試

目前這個工具包的開發(fā)和測試已在8核AMD FX-8300 3.3GHz CPU以及3GB GeForce GTX 1060 GPU上完成。在使用單個隨機(jī)智能體的情況下,街頭霸王環(huán)境可以以正常游戲速度的600%+運行。而如果是用8個隨機(jī)智能體進(jìn)行hogwild!訓(xùn)練,環(huán)境可以以正常游戲速度的300%+運行。

ConvNet智能體

為了確保工具包能夠訓(xùn)練算法,作者還設(shè)置了一個簡單的5層ConvNet,只需少量調(diào)整,你就可以用它進(jìn)行測試。在街霸實驗中,這個算法能夠成功學(xué)習(xí)到游戲的一些簡單技巧,比如連擊(combo)和格擋(blocking)。街霸本身的游戲機(jī)制是分成10個關(guān)卡(難度遞增),玩家在每個關(guān)卡都要迎戰(zhàn)不同的對手。剛開始的時候,這個智能體平均只能打到第2關(guān)。但在經(jīng)過2200次訓(xùn)練后,它平均能打到第5關(guān)。

至于智能體的學(xué)習(xí)率,它是用每一局智能體所造成的凈傷害和所承受的傷害來計算的。

跟大家推薦一下我的Python學(xué)習(xí)交流群【 784758214 】內(nèi)有安裝包和學(xué)習(xí)視頻資料,零基礎(chǔ),進(jìn)階,,大牛在線解答疑問。希望可以幫助你快速了解Python、學(xué)習(xí)python

分享名稱:python玩轉(zhuǎn)街機(jī)游戲,操作親民!-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://chinadenli.net/article46/peseg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、企業(yè)建站、關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)、建站公司、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
日本道播放一区二区三区| 国产精品免费视频专区| 成人区人妻精品一区二区三区| 日韩1区二区三区麻豆| 一本色道久久综合狠狠躁| 国产亚洲欧美另类久久久| 欧美韩日在线观看一区| 亚洲天堂一区在线播放| 在线观看视频日韩精品| 亚洲免费黄色高清在线观看| 日韩三极片在线免费播放| 色婷婷视频国产一区视频| 有坂深雪中文字幕亚洲中文| 人妻露脸一区二区三区| 亚洲国产av精品一区二区| 亚洲国产香蕉视频在线观看| 色婷婷视频国产一区视频| 欧美黑人黄色一区二区| 好吊视频有精品永久免费| 在线视频免费看你懂的| 亚洲欧美日韩熟女第一页| 91精品视频全国免费| 国产精品激情对白一区二区| 日本免费一本一二区三区| 国产精品久久男人的天堂| 日本不卡在线视频你懂的| 国产av大片一区二区三区| 亚洲一区二区三区有码| 国产成人精品99在线观看| 亚洲人妻av中文字幕| 日本本亚洲三级在线播放| 国产专区亚洲专区久久| 欧美一级黄片免费视频| 日韩欧美第一页在线观看| 午夜视频在线观看日韩| 国产精品午夜一区二区三区| 国产一区二区三区成人精品| 久久热中文字幕在线视频| 日本男人女人干逼视频| 四十女人口红哪个色好看| 高清免费在线不卡视频|