Pythonでゲームボーイエミュレーターを作成し、AIモデルをトレーニングする:デンマーク人の大学のプロジェクトが大ヒット

Pythonでゲームボーイエミュレーターを作成し、AIモデルをトレーニングする:デンマーク人の大学のプロジェクトが大ヒット

Atari ゲームを使って人工知能を研究するのは、ちょっと現実的ではないと感じますか?これでゲームボーイエミュレーターが使用できるようになります。

[[322869]]

80 年代や 90 年代に生まれた多くの人々にとって、任天堂のゲームボーイは青春時代の大きな部分を象徴しています。私たちがよく知っているゲームの多くは、有名な「マリオ」や「ゼルダ」シリーズを含め、もともとこの 8 ビット ゲーム コンソールにインストールされていました。国内のプレイヤーにとって、最も多くプレイするゲームはおそらく「ポケモン」シリーズでしょう。

このゲーム機が最初に発売されてから30年が経ちましたが、人々の熱狂はまったく衰えていません。昨日、Python で書かれたゲームボーイ エミュレーターがソーシャル ネットワーク上で大きな注目を集めました。

青春が戻ってきた?著者のRedditへの投稿はすぐに何千ものいいねを獲得した。

プロジェクトの作者の一人である Mads Ynddal 氏が、PyBoy バージョン 1.0 の正式リリースを発表しました。

PyBoyとは何ですか?

つまり、これは Python で完全にゼロから書かれたゲームボーイ エミュレーターであり、API 経由でスクリプトをサポートしています。研究者らは、Cython を使用してソフトウェアをコンパイルできるようにする型定義を追加し、C および C++ で記述されたシミュレーターに匹敵するパフォーマンスを実現しました。

プロジェクトリンク: https://github.com/Baekalfen/PyBoy

特徴

PyBoy は Python 経由でアクセスできるように設計されており、実験研究、ロボット工学、人工知能に取り組む人々をサポートし、奨励します。研究者たちはゲーム固有のラッパーを構築しており、現在、プログラマーはゲームボーイに関する詳細な知識を必要とせずにテトリスやスーパーマリオを操作できるようになっている。ドキュメントを参照できます: https://docs.pyboy.dk。

プロジェクトの作者たちは、より珍しい機能を学び、試してみたかったので、大学のプロジェクトの研究に基づいて、エミュレーターに巻き戻し機能を追加しました。これにより、どのゲームでも時間を巻き戻すことができます。

PyBoy エミュレータのアーキテクチャ

1990年に任天堂はゲームボーイの特許を申請した。次の図は、特許における CPU、RAM、カートリッジ、ディスプレイの統合と接続を示しています。

ゲームボーイの特許からのアーキテクチャ図。

これを基に、PyBoy プロジェクトのメンバーは各コンポーネントのクラスを Python で作成し、「ホスト システム」(Python が実行されるシステム) 上に「クライアント システム」の基盤を構築しました。クライアント システムは仮想 Game Boy ハードウェアであり、理論上は Game Boy 用に作成されたすべてのソフトウェアを実行できます。

次の図は、PyBoy シミュレーター内のすべてのクラスとそれらの関係を示しています。

PyBoy が強化学習にもたらす意味と他の環境との比較

長年にわたり、多くの人がゲームボーイエミュレーターを開発しており、現在ではコンピューターと携帯電話の両方で実行できるツールも存在します。なぜ Python で書くのでしょうか?もちろん、人工知能のトレーニングにも使われます。

[[322871]]

ゲームをプレイしたいですか?ゲームボーイは、現代の人にとってはちょっと「使いにくい」ものかもしれません。

汎用人工知能に最も近いアプローチ - 強化学習

汎用人工知能の概念は、人間が実行できるあらゆる知的タスクを機械がうまく完了できる能力を指します。現時点では、AI に関する研究はまだこの目標からは程遠い。Andrew Ng 氏は以前、ディープラーニングは高次元の「曲線フィッティング」のみを行うと述べていた。

事前に収集されたデータに依存する機械学習アルゴリズム(大量の手動ラベル付けも必要)とは異なり、強化学習は環境報酬のみでトレーニングされるアルゴリズムです。その動作メカニズムは人体のドーパミン システムに似ています。強化学習は現在、経験から学ぶ人間の能力に最も近い機械学習アルゴリズムであり、インテリジェントエージェントが環境に基づいて決定を下す必要があるシナリオに特に適しています。

下の図は、RL エージェントがゲーム画像のみを入力として使用してマリオの制御ポリシーを学習する方法を示しています。

なぜ RL に関する研究が、他のより実用的な問題ではなく Atari でこれほど多く行われているのでしょうか?

  • RL 研究で Atari をベンチマークとして使用する理由はいくつかあります。
  • Atari 環境では、同じアルゴリズムを使用して複数の異なる環境をテストし、RL アルゴリズムの汎用性を検証できます。
  • 入力はゲーム画像のみなので、問題の複雑さが増します。
  • Atari は、さまざまなアルゴリズム間のパフォーマンスを公平に比較​​できる、認められたテスト ベッドを研究者に提供しています。
  • RL の学習には大量のインタラクション データが必要です。実際の環境でのテストの前に、Atari はアルゴリズムの初期検証のために安全で高速、低コストのテスト プラットフォームを提供します。

以下は Atari 環境の例です。

Atari、PySC2、その他の環境とPyBoyとの比較

前のセクションでは、Atari 環境で RL エージェントをトレーニングする多くの利点を紹介しました。ただし、RL の発展に伴い、この比較的単純な環境は徐々に新しい RL 研究には適さなくなっています。少し前、DeepMind が提案した Agent57 は、すべての Atari 環境で人間のプレイヤーの平均レベルを上回りました。これは、Atari 環境での RL 研究が徐々に終わりに近づいていることを示していました。

さらに難しい環境としては、DeepMind と Blizzard のコラボレーションによる PySC2 があり、インテリジェント エージェントが複雑な協力戦略と対立戦略を学習する必要があります。 AlphaStar はこの環境で素晴らしい成果を達成しましたが、解決すべき問題はまだ数多く残っています。以下は PySC2 環境の図です。

PyBoy 環境の難易度は Atari と PySC2 の中間にあると言え、RL パフォーマンスを検証するための新しいベンチマークを提供します。 RL をより複雑な現実世界の問題に適用する前に、この中程度の難しさの環境で低コストで効率的なテストを実施できます。

テスラのAIおよび自動運転ビジョン担当ディレクターのアンドレイ・カルパシー氏は、「バズーカ砲に手を伸ばす前に、必ずBBガンを試してみるべきだ」と語った。

Githubの紹介

インストール方法は?

Python を実行するように設定された環境がすでにある場合は、インストールは非常に簡単です。

  1. パッケージ マネージャーを使用して SDL2 をインストールします (sudo apt install libsdl2-dev または brew install sdl2)
  2. pip install pyboyを使用してPyboyをインストールします。

PyBoy は、ターミナル $ pyboy file.rom から直接使用することも、Python スクリプトで使用することもできます。

  1. pyboyからPyBoyをインポートする
  2. pyboy = PyBoy( 'ROMs/gamerom.gb' )ですが、 pyboy.tick() ではありません:
  3. 合格

このプロジェクトは、macOS、Raspberry Pi (Raspbian)、Linux (Ubuntu)、Windows 10 もサポートしています。

PyBoy API ドキュメント

ユーザーが独自のロボットや AI を作成する必要がある場合、それをサポートするために使用されるすべての外部コンポーネントは PyBoy ドキュメント (https://baekalfen.github.io/PyBoy/index.html) で見つけることができます。さまざまなクラスとその使用方法は非常に詳細なので、ここでは 1 つずつ説明しません。 (構造インデックスは下記参照)

短い例

PyBoy は Python のオブジェクトとして読み込むことができます。したがって、別のスクリプトから初期化し、そのスクリプトによって制御およびプローブすることができます。ゲームとやりとりする粗雑な「ボット」である gamewrapper_tetris.py を見てみましょう。もちろん、すべての外部コンポーネントは PyBoy のドキュメントに記載されています。

Game Boy の一般的なドキュメントについては、すべてのトピックに関する詳細な情報が記載されている Pan Docs をご覧ください。

以下は画面からデータを読み取る簡単なデモンストレーションです。このコードは gamewrapper_mario.py にも記載されています。

  1. osimport sysをインポートする
  2. pyboyからPyBoyをインポートし、WindowEvent
  3. #以下のディレクトリからPyBoyをインポートできるようにします
  4. ファイルパス = os.path.dirname(os.path.realpath(__file__))
  5. sys.path.insert( 0 , ファイルパス + "/.." )
  6. # ROMがargvif len(sys.argv) > 1を通じて与えられているかどうかを確認します:
  7. ファイル名 = sys.argv[ 1 ]そうでない場合:
  8. print( "使用方法: python mario_boiler_plate.py [ROMファイル]" )
  9. 終了( 1 )
  10.  
  11. quiet = sys.argv 内の"--quiet"
  12. pyboy = PyBoy(ファイル名、window_type = "headless"  静かなら  "SDL2" 、window_scale= 3 、debug=not quiet、game_wrapper=True)
  13. pyboy.set_emulation_speed( 0 ) pyboy.cartridge_title() == "スーパーマリオラン"をアサートする 
  14.  
  15. マリオ = pyboy.game_wrapper()
  16. マリオ.start_game()
  17. assert mario.score == 0 assert mario.lives_left == 2 assert mario.time_left == 400 assert mario.world == ( 1 , 1 ) assert mario.fitness == 0 # AI開発のための組み込みフィットネススコア
  18. last_fitness = 0print(マリオ)
  19.  
  20. pyboy.send_input(WindowEvent.PRESS_ARROW_RIGHT) は範囲( 1000 )内の_に対して実行されます:
  21. mario.fitness >= last_fitness であると主張する
  22. last_fitness = マリオフィットネス
  23.  
  24. pyboy.tick()
  25. mario.lives_left == 1 の場合:
  26. assert last_fitness == 27700 assert mario.fitness == 17700 # ライブで負けると、このフィットネススコアリングで10.000ポイント減点されるprint(mario)
  27. その他:
  28. print( "マリオは死ななかった?" )
  29. 終了( 2 )
  30.  
  31. mario.reset_game() がmario.lives_left == 2 であることを確認します 
  32.  
  33. pyboy.stop()

スーパーマリオランド ROM をロードした状態で上記のコードを実行すると、以下のイメージとターミナル出力が得られます。マリオのパターンはインデックス 0、1、16、17 で表示されることに注目してください。

著者について

このプロジェクトの作者であるAsger Anders Lund Hansen氏、Mads Ynddal氏、Troels Ynddal氏はいずれもデンマーク出身です。デンマークのコペンハーゲン大学を卒業したマッズ・インドダル氏は、実はこのゲームボーイエミュレーターは、彼が大学時代に2015年に始めたプロジェクトにまで遡ることができると語った。

[[322874]]

ゲームボーイ エミュレーターのバージョン 1.0 がリリースされましたが、開発者が行うべき作業はまだたくさん残っています。プロジェクト開発者らは、現在進めることができる方向性としては、シミュレーターへのサウンド、カラー、ゲームボーイシミュレーション接続の追加、さらに多くのゲームのパッケージ化、そしてもちろん、シミュレーター上でのニューラルネットワークのトレーニング例などがあると述べた。

皆さんの努力でゲームボーイのゲームも復活できるといいですね。さらに重要なことは、現在では人工知能を訓練するという任務を負っていることです。

<<:  AI を使って「手を洗ってください」を 500 の言語に翻訳する方法

>>:  百度研究所が新しいAIツールを発表:10分以内に記事を自動的に動画に変換可能

ブログ    
ブログ    
ブログ    

推薦する

...

5分でPythonのランダムヒルクライミングアルゴリズムをマスターする

ランダム化ヒルクライミングは最適化アルゴリズムです。検索プロセスの一部としてランダム性を使用します。...

従来のプログラマーはどのように AI を変革し、学習するのでしょうか?アリババは最前線のアルゴリズムチームが開発したコアAI技術をオープンソース化

次のような疑問を持ったことはありませんか?人工知能は非常に人気があります。従来のプログラマーとして、...

弁護士の仕事もAIによって奪われるのでしょうか?ユーザー: 他に何ができますか?

モバイルインターネット時代の到来により、AIは前例のない成果を達成し、人々の生活のあらゆる側面に入り...

2022年の5つの新しいテクノロジートレンド

今日、ビジネスに役立つ新たなテクノロジートレンドが数多く存在します。ビジネスマンとして、新しいトレン...

衝突の火花: ディープ AI とワイヤレス センシング (パート 1)

[[435758]]序文モノのインターネット (IoT) の発展により、さまざまな無線信号 (Wi...

数学的論理とコンピュータプログラムコードの深いつながり:互いの鏡像

DNAの二重らせん構造やブラックホールの存在など、いくつかの科学的発見は何か新しいことを明らかにする...

今後 20 年以内に、完全自動運転のコネクテッドカーが登場するでしょうか?

20 年後の旅行と交通の未来はどうなるでしょうか? おそらく、この質問への答えははるかに複雑です。...

...

スマートテクノロジーは小売業界にどのような影響を与えるでしょうか?

過去数年間、小売業界はテクノロジーによって革命を起こしてきました。店舗の日々の運営方法から、消費者の...

ソフトウェア開発者ガイド: 独自のデータで ChatGPT をトレーニングする

翻訳者 | 李睿レビュー | Chonglou制作:51CTO テクノロジースタック(WeChat ...

CVPR2019で、Baidu Apolloはレベル4自動運転向けの純粋なビジョンソリューションであるApollo Liteを発表しました。

米国現地時間6月16日から20日まで、コンピュータビジョンとパターン認識の分野における世界有数の学術...

「中国の新世代人工知能開発報告書2020」:中国はよりオープンな姿勢で人工知能の発展を推進

「中国の新世代人工知能開発報告書2020」(中国語版と英語版)が本日、浦江イノベーションフォーラムで...

...

AI+クラウドランディングBeifei Technology、Amazon Pollyの助けを借りて教育モードの変化を促進

[51CTO.comより引用] 時代のトレンドである最先端技術として、人工知能はニュースという形で人...