ご質問がある場合、または単にチャットしたい場合は、Discord にご参加ください。
RL エージェントをトレーニングしてポケットモンスター 赤をプレイする | あらゆるゲームを巻き戻します | |
クラシックをプレイする | 独自の AI を作成する | AI で世界記録を破る |
手順は簡単です。
$ pip install pyboy
詳細については、インストール手順を参照してください。
これで準備は完了です。ターミナルから直接 PyBoy を使用する
$ pyboy game_rom.gb
または、Python スクリプトで使用します。
from pyboy import PyBoy
pyboy = PyBoy ( 'game_rom.gb' )
while pyboy . tick ():
pass
pyboy . stop ()
ボットや AI の作成を検討している場合は、次のリソースから始めるのが良いでしょう。
エミュレーターの実行中は、PyBoy の API に簡単にアクセスできます。
pyboy . set_emulation_speed ( 0 ) # No speed limit
pyboy . button ( 'down' )
pyboy . button ( 'a' )
pyboy . tick () # Process at least one frame to let the game register the input
value_of_interest = pyboy . memory [ 0xC345 ]
pil_image = pyboy . screen . image
pil_image . save ( 'screenshot.png' )
Wiki には、独自のプロジェクトから PyBoy とインターフェースする方法が示されています。
PyBoy では、AI トレーニングとスクリプトをできるだけ高速にするためにパフォーマンスが最優先されます。
パフォーマンスを向上させる最も簡単な方法は、不要なフレームのレンダリングをスキップすることです。キャラクターが移動するのに X フレームかかることがわかっている場合、またはゲームがフレームごとに入力を受け付けないことがわかっている場合は、それらをスキップしてパフォーマンスを 3 倍にすることができます。すべてのゲームロジックなどは引き続き処理されます。
ここでは、すべてのフレームをレンダリングする場合、15 フレームごとにレンダリングする場合、およびフレームをレンダリングしない場合 (高いほど良い) の単純な比較を示します。仕組みについては、 pyboy.tick
参照してください。あなたのパフォーマンスはゲーム次第です。
完全なレンダリング | フレームスキップ 15 | レンダリングなし |
x124リアルタイム | x344リアルタイム | x395リアルタイム |
for _ in range ( target ):
pyboy . tick () | for _ in range ( target // 15 ):
pyboy . tick ( 15 ) | pyboy . tick ( target , False ) |
ゲームボーイはもともと 1 秒あたり 60 フレームで動作していたため、リアルタイムで 100 倍にスピードアップすると、1 秒あたり 6,000 フレームになります。上の表から明らかなように、395 時間のゲームプレイのシミュレーションは、レンダリングなしで 1 時間で完了できます。
PyBoy の複数のインスタンスを並行して実行することもお勧めします。 8 コア マシンでは、1 時間で 3,160 時間のゲームプレイを実行できる可能性があります。
あらゆる貢献を歓迎します。現在既知の問題は、[問題] タブで追跡されます。どれでもお気軽にスイングしてみてください。何か独創的なことを考えている場合は、Discord で議論してください。
より主要な機能については、次のようなものがありますので、試してみてください。これらについては、Wiki のプロジェクト リストでも詳しく説明されています。
api
またはゲーム ラッパーを使用してニューラル ネットワークをトレーニングしますリストにないものを実装したい場合は、とにかく自由に実装してください。それを私たちのリポジトリにマージしたい場合は、プルリクエストを送信してください。私たちがそれを確認します。