一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

給大家推薦一名網(wǎng)友開源的Python庫

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-11-05 15:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:近年來,雖然關(guān)于強(qiáng)化學(xué)習(xí)進(jìn)展的新聞屢見報端,對強(qiáng)化學(xué)習(xí)感興趣的人也很多,但對普通學(xué)習(xí)者來說,真正做一個自己感興趣的強(qiáng)化學(xué)習(xí)項(xiàng)目還是太麻煩了。今天論智給大家推薦的是一名網(wǎng)友開源的Python庫,它提供了一個可以玩任何舊版街機(jī)游戲的API,操作方式非常親民。

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

安裝

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

你可以用pip安裝這個庫,只需運(yùn)行以下命令:

pip install MAMEToolkit

演示示例:街霸

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

import random

fromMAMEToolkit.sf_environment importEnvironment

roms_path = "roms/"

env = Environment("env1", roms_path)

env.start()

whileTrue:

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!訓(xùn)練:

什么是hogwild!?Niu等人引入了一個叫做 Hogwild! 的更新策略,可以使 SGD 可以在多 CPU 上并行更新。處理器在無需對參數(shù)加鎖的情況下就可以訪問共享內(nèi)存。但僅在輸入的是稀疏數(shù)據(jù)時才有效,因?yàn)槊看胃聝H修改所有參數(shù)的一小部分。他們展示了在這種情況下,更新策略幾乎可以達(dá)到一個最優(yōu)的收斂率,因?yàn)樘幚砥鞑惶赡芨采w掉有用的信息。

from threading importThread

import random

fromMAMEToolkit.sf_environment importEnvironment

def run_env(env):

env.start()

whileTrue:

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)境

這個工具包之所以易于上手,是因?yàn)樗?a href="http://www.www27dydycom.cn/analog/" target="_blank">模擬器本身不需要太多交互,只需注意兩點(diǎ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

你可以通過運(yùn)行以下代碼找到游戲的ID:

fromMAMEToolkit.emulator importEmulator

emulator = Emulator("env1", "", "", memory_addresses)

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

內(nèi)存地址

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

fromMAMEToolkit.emulator importEmulator

fromMAMEToolkit.emulator importAddress

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)程時暫停。

分步運(yùn)行仿真器

連接工具箱后,你可以分步運(yù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ù)值。

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

fromMAMEToolkit.emulator importAction

insert_coin = Action(':INPUTS', 'Coin 1')

data = emulator.step([insert_coin])

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

fromMAMEToolkit.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幀,可以輸入以下代碼:

fromMAMEToolkit.emulator importEmulator

emulator = Emulator(roms_path, game_id, memory_addresses, frame_ratio=3)

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

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

ConvNet智能

為了確保工具包能夠訓(xùn)練算法,作者還設(shè)置了一個簡單的5層ConvNet,只需少量調(diào)整,你就可以用它進(jìn)行測試。在街霸實(shí)驗(yà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í)率,它是用每一局智能體所造成的凈傷害和所承受的傷害來計(jì)算的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7653

    瀏覽量

    167435
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86777
  • 強(qiáng)化學(xué)習(xí)

    關(guān)注

    4

    文章

    269

    瀏覽量

    11604

原文標(biāo)題:MAME:在這里,你可以用Python玩任何街機(jī)游戲

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何成為一名嵌入式C語言高手?

    如何成為一名嵌入式C語言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語言則是嵌入式系統(tǒng)開發(fā)中最常用的編程語言之。成為一名嵌入式C語言高手需要長時間的學(xué)習(xí)和實(shí)踐。下面將介紹些方法和
    發(fā)表于 03-25 14:12

    如何成為一名嵌入式C語言高手?

    如何成為一名嵌入式C語言高手? 嵌入式系統(tǒng)是當(dāng)今科技領(lǐng)域的核心,而C語言則是嵌入式系統(tǒng)開發(fā)中最常用的編程語言之。成為一名嵌入式C語言高手需要長時間的學(xué)習(xí)和實(shí)踐。下面將介紹些方法和
    發(fā)表于 04-07 16:03

    菜鳥一名,求教問題

    本帖最后由 gk320830 于 2015-3-9 00:26 編輯 我是一名大學(xué)新生,想學(xué)下電路設(shè)計(jì),電路板的元件總是焊不好,用萬用表測總是短路,求大神指教?。。。。。。?!
    發(fā)表于 10-23 22:04

    大家好,我是一名大四學(xué)生,有些問題想咨詢大家

    本帖最后由 eehome 于 2013-1-5 09:53 編輯 我是一名大四的學(xué)生,剛?cè)ズMP試過,那邊承諾的是很好啦,我也是對軟件方面很感興趣。想問下現(xiàn)在嵌入式這方面在國內(nèi)人員的需求
    發(fā)表于 11-27 18:01

    我是一名小白

    各位友人大家好我是一名在職員工由于向提升自己想學(xué)習(xí)電氣自動化相關(guān)的知識可是我不知道從哪學(xué)期本人零基礎(chǔ) 希望有前輩能指導(dǎo)一二 十分感激
    發(fā)表于 09-22 14:43

    一名電子初學(xué)者

    大家好,本人是一名電子初學(xué)者,平時會根據(jù)些學(xué)習(xí)資料做個小電路,苦于身邊沒有良師益友,看著書上的原理也是半知半假迷迷糊糊,為了更好的學(xué)習(xí)于是加了幾個電子討論QQ群.....天吶,怎么
    發(fā)表于 12-02 17:15

    怎樣做好一名大神

    沒想到上班了還能跟總經(jīng)理(大神)起回味大學(xué)上論壇的時光。我現(xiàn)在剛出來的只能看看別人發(fā)的求助信息,置頂信息,從別人獲取些東西。。。而大神呢?他剛開始也是這樣的。。。后面就是那種上論壇別人回答的,因?yàn)樗鉀Q不了的問題,論壇也解
    發(fā)表于 01-30 15:04

    一名數(shù)據(jù)挖掘工程師新人整理的入門資料

    一名數(shù)據(jù)挖掘工程師新人整理的入門資料四年前我次聽說數(shù)據(jù)挖掘這個詞,三年前我學(xué)習(xí)了數(shù)據(jù)挖掘理論知識,兩年前我做了幾個與數(shù)據(jù)挖掘有關(guān)的項(xiàng)目,年前我成為
    發(fā)表于 09-01 11:05

    想要成為一名鴻蒙開源開發(fā)者,要如何做呢?

    展開正面競爭,當(dāng)然這也僅僅只是理論上可能。隨著鴻蒙系統(tǒng)的免費(fèi)開源,廣大開發(fā)者帶來了機(jī)會,那么要怎么才能成為一名鴻蒙開源開發(fā)者呢?大家可以提
    發(fā)表于 09-18 10:28

    如何成為一名電源設(shè)計(jì)師?

    成為一名電源設(shè)計(jì)師的7個跡象
    發(fā)表于 03-11 06:02

    祝賀 | 鵬城實(shí)驗(yàn)室開源 EDA 團(tuán)隊(duì)勇奪 ICCAD 競賽第一名

    一名的成績。四、iEDA 課題組介紹 課題組主要圍繞開源EDA工具、智能化的芯片設(shè)計(jì)方法、開源EDA系統(tǒng)平臺、開源 EDA 基準(zhǔn)測試集等內(nèi)容開展研究,打造四維
    發(fā)表于 12-13 18:29

    一名開發(fā)工程師轉(zhuǎn)型管理的經(jīng)驗(yàn)分享

    我是一名新手項(xiàng)目經(jīng)理,轉(zhuǎn)項(xiàng)目管理崗1年半。在做管理之前,我是一名開發(fā)。也就是說,我是最常見的技術(shù)轉(zhuǎn)管理了。表
    的頭像 發(fā)表于 10-16 10:16 ?7924次閱讀

    八個常用的Python GUI

    Python GUI 有很多,下面大家羅列常用的幾種 GUI 。下面介紹的這些GUI框架,能滿足大部分開發(fā)人員的需要,你可以根據(jù)自己的
    的頭像 發(fā)表于 08-26 14:52 ?2874次閱讀

    Python能否成為編程語言榜單的第一名?

    Python 在不久的將來或?qū)⒊紺語言成為榜單的第一名
    的頭像 發(fā)表于 06-15 09:31 ?2135次閱讀
    <b class='flag-5'>Python</b>能否成為編程語言榜單的第<b class='flag-5'>一名</b>?

    成為一名電源設(shè)計(jì)師的7個跡象

    成為一名電源設(shè)計(jì)師的7個跡象
    發(fā)表于 10-31 08:23 ?1次下載
    成為<b class='flag-5'>一名</b>電源設(shè)計(jì)師的7個跡象