2016-01-01から1年間の記事一覧
zshからpyvenvをactivateしようとすると $ source bin/activate deactivate:2: _OLD_VIRTUAL_PATH: parameter not set というエラーになることがあります。これはzshでno_unsetオプションを設定していると起こります。no_unsetオプションを設定したままこれ…
OpenAI GymのPong-ram環境用のメモ。 とりあえずメモリアドレスを軽く調べました(趣旨的には解析とか一切なしで解くことが求められているのでしょうけど)。なお、Atari2600は $80-$FF の128 バイトがRAMとなっています(参考: Atari 2600 Specifications)。 a…
OpenAI GymのAtariゲーム環境の中にPong-ramというのがあって、ゲーム画面ではなくメモリ内容を直接見られるようなので、Stellaで動かしながらメモリアドレスなどを調べています。 幸いAtari 2600はNESと同じでCPUが6502(正確には機能削減版の6507)なので、…
前回は単純パーセプトロン(SLP)でAND, ORを学習し、XORは学習に失敗することを確認しました。今回は多層パーセプトロン(Multi Layer Perceptron, MLP)を使ってXORも含めて学習してみます。内容的には高卒でもわかる機械学習の第3回以降に相当します。 相変わ…
今更感漂うネタですが簡単なパーセプトロンのコードを書いてみたいと思います。高卒でもわかる機械学習というシリーズが非常にわかりやすかったのですが、動くコードがなかったのでそこだけ補完してみようという感じです。 今回は単純パーセプトロン(Single …
別に上手くなくていいので普通プレイができるAIがあるとTAS制作が色々捗るんだろうなぁと思ったりしてます(まぁ、それが難しいんでしょうけど)。AIだけで人間が作ったTASを超えるのは(ゲームにもよるでしょうが)難しいんじゃないかなと思いますが、逆にテク…
前回はFrozenLakeを自前のアルゴリズムで解いてみました。今回はQ学習をやってみようと思います。 その前に、前回変な結論を出してたので訂正しておきます。前回8x8が通らなかったのは明らかに試行回数不足だと思います。1エピソードあたりの成功報酬が1なの…
OpenAI Gymなる強化学習用プラットフォームを触ってみました(参考: PyConJPのプレゼンテーション)。 インストール自体はpip install gymで一発です(Atariゲームなどを扱いたい場合はpip install gym[atari]のようにサブパッケージをインストールする必要があ…
FCEUXではフレーム境界がline240(post-render)となっていますが、この理由がよくわかりませんでした。しかし考えてみると、入力更新タイミングとしてはここが適切なのではないかと思いました。 NESゲームの入力処理はNMIルーチン(line241で呼び出される)内で…
まだgithubには反映されてませんが、手元のブランチで主にPPUをFCEUXと一致させる作業中です。とりあえず以下のムービーはsyncするようになりました: HappyLee's NES Super Mario Bros "warped" in 04:57.31 t3h Icy's NES Urban Champion in 00:26.97 アス…
以前SDL2でのコールバック方式オーディオ再生について書きましたが、同様のコードをpysdl2で試してみました(全コードを置いておきます)。 スレッド間のやりとりには標準のqueue.Queueを使っていますが、これが最適かどうかはよくわかりません。 動かしてみる…
どうにか全チャネルがそれなりに鳴ってくれるようになりました(DMCは以前作ったPCM再生ROMでテストしましたが、本来の使い方であるDelta PCMについてはまだテストしてません)。ただ、ほとんどFCEUXのパクリなので理解度は半分以下です。 NesDevWikiの記述通…
とりあえず矩形波と三角波はそれっぽく鳴るようになったので一応リポジトリを作ってみました。ノイズとDMCは未実装です。 まだエミュレーション精度はガバガバです。最終的にはFCEUX互換にしたいですが…。 なお、このプロジェクトはとにかくシンプルでわかり…
NESエミュレータはどうにか三角波がまともに鳴るようになりました。どうもSDL_QueueAudio()を使っていたのが良くなかったようで、従来のコールバック方式にしたら改善しました。そこで一応コールバック方式での再生について書いてみます(知識ゼロから調べた…
いきなりですがMarkdownを使いたかったので移転してみました。なんか横幅の狭いデザインばっかりなのが気になりますが…。スマホの影響なんですかね?
とりあえず三角波だけ実装してみたけど音がおかしい(;´Д`) 音のタイミング自体は正しそうなんだけど凄く耳障りな感じになる…。エミュレーションがおかしいのかWAVEへの変換がおかしいのかよくわからないんですよねー。固定周波数の正弦波を出力する仮想チャ…
元リポジトリのソースはそのままだとDebian stableでビルドが通らなかったので、一応修正版を置いておきます。ビルドシステムをwafからsconsに変更した*1ので、sconsのインストールが必要です。まあLinuxならパッケージがあるでしょうから許してくださいとい…
APUが1割くらい理解できた(NesDevWikiを読んだだけですが)ので、既存のエミュレータの実装も合わせて少し書いてみます。まずAPUはフレームカウンタを内蔵しており、フレームカウンタはCPUサイクルに連動するシーケンサを持ちます。このシーケンサの動作サイ…
C++ではテンプレートを使ってビットフィールドを実現するというテクニックがあるようです(検索すると色々出てきます)。しかしこれは注意して実装しないとハマるであろう落とし穴があった(私もハマりました)のでメモしておきます(gcc 4.9.2, clang 3.5.0で検…
$EA-$EC が乱数、$87D9 が乱数生成器のようです。 $87D9 は乱数更新後に1Pおよび2P入力($10, $11)を加えた値を結果として返すので、適切に2P入力を行うことでかなり自由に乱数調整ができると思われます。ただし乱数が1Fで複数消費される場合は完璧とまではい…
なぜかYouTubeの一覧に出なかったので一応こっちに貼り。超適当プレイです。 地味に良ゲーだけどTASだとどうにも段差の待ち時間がダレるんですよね…。あと最適化を真面目に考えると氏ねそう\(^o^)/たまにスクロールが追いつかなくなって画面ズレが発生する…
submission movie: nicovideo | youtube4-2はHIO無理でした\(^o^)/ エンコードについて 今回はL-SMASHでmuxしましたが、FPSを手で指定する必要があったり、ストリーミング向けの場合 --optimize-pd を付けた方がいいという話があったり少々ややこしいです(…
この局面のCOM玉の詰み判定がおかしい件について調べ中です(再現用ムービーと棋譜を置いておきます)。まだ思考ルーチンの評価ロジックまでは完全にはわかってませんが、コード自体は大体読めたのでLuaスクリプトでこの局面の思考ログをとってみました。ログ…
思考ルーチンを少しずつ読んでます。以下の要素はだいたい読めた感じです: 局面の特徴量計算 候補手生成(1手読み) PLAYER玉詰み判定 後は評価部だけと思われますが、結構いろいろな要素を評価してるのでもう少しかかりそうです。以前COM玉の詰み判定がおかし…
以前アップされた8面までのスコアアタックTASを引き継ごうかと思って色々調べ中です。今のところコードを読んでるだけですが、気になった点について少しメモ。 CHRバンク切り替え ; マッパー3 CHRバンク切り替え 9F88 : BD 44 D0 lda $D044,x 9F8B : 9D 44 D…
http://tasvideos.org/5083S.html これ1-5と1-9でHIOが取れなくて投げたんですよね…。やっぱりこのムービーでもできてないようです。 1-5は頑張ればギリギリ近くまでは行けるんですが無理でした。1-9は以前手でプレイしたとき壁と遮断機の間に打ち込むことで…