兼雑記

なにやら先生と紛らわしいそうで生まれてきてすいません。あばうと
<< 2013/05 >>
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

| サイト本体 | 昔の更新履歴兼雑記 | タイトル一覧 |

分類は アーカイブ任せにした方がいいのかも。


 

2013-04-04

104B Hello, world! ELF binary for x86-64 linux 00:33

このサイトを見て、なんとなく書いてみました。

http://shinh.skr.jp/obf/hello_linux_elf_x64.out

アセンブリコード

http://shinh.skr.jp/obf/hello_x64-104.asm

説明はこのへん

https://docs.google.com/spreadsheet/ccc?key=0AolcvzoWgN21dFRvYk0wWmg2bW5aNlN3M01ia01kamc#gid=2

104B てのは 64B の ELF ヘッダと 56B の program ヘッダが 16 bytes 分オーバーラップしていて、それ以上オーバーラップできそうな場所が見つからなくて、現状コードとデータは全部ヘッダに埋まってるんで、まぁ限界かなぁとか。

2013-03-16

Chrome Key と sortable というのを chrome store に 15:19

完全に自分のためだけに作った extension ですが、 chrome store に置いておかないと色々不便ぽいので置いておきました。

Chrome Key の方は捨てたかったんですが、他のキー設定系のやつでやりたいことが全然できなかったので、自分用のをメンテする覚悟をしました… Shortcut Manager は text input してる最中に hjkl してスクロールちゃうとかはきついということと、タブの移動が無くて JS でも書けないぽくて、 Chrome Keyconfig は任意 JS の実行ができないぽいのでダメでした。

https://chrome.google.com/webstore/detail/chrome-key/foacgpiolpmbcodpfipcbpppjiggkbob

sortable ってのは、 に勝手ソートボタンをなんとなくくっつけるものです。なんか数値が大量に入ってる
を眺めることが多くて、そういうテーブルを excel 程度の気軽さでソートしたいので作りましたhttps://chrome.google.com/webstore/detail/sortable/ecpkmknlggnbicmamcfpmpldpjmjhlcn

2013-02-04

puyoai AI vs AI 動画 23:09

http://www.youtube.com/watch?v=kk97-SQhkwA

http://www.nicovideo.jp/watch/sm20002331

適当に上げてみました。私の AI (cpu/hamaji/lps.sh) がたまたま綺麗に勝ってる感じで気分が良いです。ただ連鎖発火検出ミスってるのはおかしな話ですね内部状態使ってるモードなので…

左の AI は私の lps という AI で、 let's puyo sho-bu の略です。ネクネクまでの盤面探索した後の評価値が高いもの採用するっていう普通のものです。連鎖数以外の基本的な評価値は人間ぷよからボナンザ方法を参考にして学習するようにしていて、それに手動で足した調整が少し入っている感じです。

連鎖埋めちゃうのがこわくて折り返しが作れない臆病な子なので、連鎖尾ばっか増やして飽和連鎖数が少ないです。あと序盤のムダ消しが多いのも良くないです。近いうちに方針転換しようと思っています…

右の AI は私が作ったものじゃないです。 GTR + 挟み込みを夢見て頑張る子です。手順が無茶苦茶なので隙だらけですが、都合よくはまると結構早く11連鎖くらいを組む印象です。

ニコ動に上げるにはビットレートを落とせば良いとわかったので、昨日の動画解析のやつもニコ動に上げておきました。

http://www.nicovideo.jp/watch/sm20002401

次は俺 AI vs 俺の試合とか上げれると良いですかね…

2013-02-03

puyoai 23:24

有志でやってた、ぷよ AI 作ったりして遊ぶコードgithub に起きました。 TODO やおかしいところがたくさんありますが、キリがないので、まあとりあえず置いておこうという…

https://github.com/puyoai/puyoai

人類最強を実際のゲーム機上で倒すことを目標として作られてますが、脇道として色んなコードがごちゃごちゃ入っています。 LinuxMac で動作するものが多いです。

duel/duel

トップレベルで make してうまくいくとできる duel/duel は AI vs AI をシミュレータ上で戦わせることができます。例えば

$ ./duel/duel cpu/hamaji/lps.sh cpu/shinyak/run.sh

などとして AI 同士で戦わせることができます。

$ PUYO_REALTIME=1 ./duel/duel cpu/hamaji/lps.sh cpu/shinyak/run.sh

などとすると常識的な速度で対戦させることができ、

$ PUYO_SEED=1 ./duel/duel cpu/hamaji/lps-fast.sh cpu/ichikawa/run.sh

などとすると seed を固定することができます。他のオプションとしては、配ぷよを固定する PUYO_SEQ や、実機同様ネクネクを遅らせて AI に送る PUYO_DELAY_DOUBLE_NEXT (いずれデフォルト挙動にする予定)などがあります。他のオプションは

$ grep PUYO_ duel/*.cc

などとすると見つかるかもしれません。

cpu/*/*.sh

CPU は本体とは独立して実行されます。 CPU は標準入出力を通して AI を走らせるプログラム (duel/duel や後述の capture/connect) と通信します。プロトコル仕様

https://docs.google.com/document/d/1cTIJgRHCBhmxXVtBb45Jm3yAQVaogfVN3oayi-FrA74/edit

にすごく雑に書いてありますが、このドキュメントからではわからない仕様や、不正確な部分も残念ながら多いです。

有志によるそれなりに戦う AI や、作りかけで何がしたいかわからん AI などが各ディレクトリに散らかっています。残念ながら現状だと、強いものでもせいぜい私と互角とかそのくらいの強さしか無い感じです。プロトコル的には言語は何で書いても大丈夫なはずですが、 core/ ディレクトリにある定数やライブラリで使えるものがあるため、 C++ で書くのが無難で、現状では C++ の AI しかありません。

capture/*

実際のぷよぷよゲームと接続するためのあれこれがごちゃっと入っています。 Wii の VCA 上でのぷよぷよと接続していて、その部分のコードは video4linux2 に依存している他、 ffmpeg やら SDL やらが必要です。詳しくは capture/README を参照ください。

capture/parse_bmp は単一の画像を読みます。デバッグ用。

capture/parse_imgs は複数の画像を動画として読みます。矢印の左右でシークができるようになっています。

capture/parse_movie は mpg などの動画を ffmpeg で読みます。

capture/parse_viddev は Linux 上でキャプチャボードから取ってきた絵を見ます。これを使うと人間同士で戦っている時も後述の capture/commentator によって客観的な情報を知ることができます。

これらは、実機で人間と対戦する時以外にも、定石作りや教師データなどにも使おうと考えています。例えば、 ぷよ譜 DB や cpu/hamaji の評価関数パラメータ調整は、このコードの前身 (cpu/hamaji/parse_movie.cc) が使われています。

ちなみに windows のぷよぷよと接続した時の(私以外が書いた)コードもあるにはあるので、そのへんも入れたいところです…

capture/connect

Wii 上の VCA で AI と人間で対戦するためのバイナリです。

$ cd capture
$ ./connect /dev/video0 ../cpu/hamaji/lps-fast.sh - | hidmon-mod/puyo

などとして実行することが想定されてますが、 Wii コントローラと接続するハードウェアが必要なため、実際に実行するのは極めて困難だと思います。余談ですが、このハードウェアは、ある金曜日にハードウェアが得意な人にその話をしたら、「いいですねー」とか言いながら Wii につなぐ GCA コントローラを眺めていて、月曜にはコントローラを持って帰ることもなく完成していて、見積りをお願いしたら納品されてたという感じで、カッコえーと思いました。

一応、

$ cd capture
$ ./connect test.mp4 ../cpu/hamaji/lps-fast.sh -

などとして、動画の状況だと AI はどうするのか…とかを眺めることはできなくはないですが、あまり意味はないかと思います。

capture/commentator

capture/parse_* や capture/connect で表示される現状のぷよ対戦状況に客観的なコメントを追加するためのコードです。 VCA と接続した場合はかなり正確に状況を伝えてくれますが、動画をソースにした場合、発火の検知がうまくできないことが多いので、色々とおかしな感じになります。項目の意味は

本線
4個までぷよを補って発火される連鎖で、だいたい最強のもの(連鎖数の増えない同時消しの増加は考慮しない)ものが表示されてます。赤1緑1などは発火に必要なぷよの種類を示しています。ぷよにオーバーレイされて表示される数字は、連鎖発火中でない時はこの連鎖の経路を示しています。 VCA 接続時も動画再生時も正確なはず、です。
発火可能最大連鎖
ネクネクまで使って発火できる最強の連鎖です。置くべきところに◇が表示されますが、大変わかりにくいです。
発火可能潰し
ネクネクまで使って発火できる潰しっぽい連鎖です。「潰しっぽい」の定義適当です。置くべきところに△が表示されますが、略。
発火中/最終発火
今発火しているか最後に発火した連鎖の威力です。動画をソースにしている場合はおかしいです。
積み込み速度
PPS は Puyopairs Per Second の略で FPP は Frames Per Puyopair の略です。連鎖を発火している最中カウントされちゃっているので、現状では序盤の積み込み速度をなんとなく測るくらいにしかなっていません。
AIによるコメント
AI が MSG= を使ってメッセージを送った場合、表示されます。
下の5列
本線が増えた時は下に記録されて行きます。また、連鎖を発火した時にも記録されていきます。

ゆくゆくはゆっくりに喋らせて自動解説とかできるといいなーと思ってますが、それ以前に色々わかりにくいのと、動画をソースとした場合に色々おかしいです…

とりあえず最初デモとして、 2011年S級の動画に適用した時のものを Youtube にアップロードしておきました。ニコ動にも置こうと思ったけど色んな制限でできなかったのでまた今度…

http://www.youtube.com/watch?v=up6Jt5Isnx0

展望

やりたいことは無数にあって夢いっぱいな感じなんですが、とりあえず

  • duel/duel に必要な修正をする
  • AI を強くする
  • ぷよ譜 DB に 2012 年 S 級の試合を入れる
  • 俺も AI 作ってみたいーという人がいればドキュメントを整備する

あたりが今の私のハイプライオリティタスクです。俺も AI 作ってみたいーという人はなんらかの手段で私に github のアカウント名を教えてくれれば足しますので、ぜひ遊んでみてください。

夢いっぱいの内容としては

などが例としてあります。

daimatzdaimatz 2013/02/04 12:00 Mac でですが、 make だけでは通らず、 make NO_GLOG=1 とすると通りました。

shinichiro_hshinichiro_h 2013/02/04 23:13 あー NO_GLOG 使ってる場所まだ残っていたのですね。下記コミットでおそらく直ったかと思います。

https://github.com/puyoai/puyoai/commit/14c2e572dbcb6ab9bac0ca0060af693fa9ee4aed

2013-01-07

2012年まとめ 00:41

やったことを思い出すと…

ハタから見るとあんまなんもやってない感があるけど、なんか少なくとも一昨年よりは趣味コーディング時間を費していたと思う。割と最近書いてない種類のコードが多くて、なにやらまあまあ楽しかった気がする。なんか微妙に外に出しにくくて、出す価値が思いつかんコードが多い感じではあったけど。

パッとした成果とかは無いんだけど、まぁしかしプログラムばっか書いてたら飽きるに決まってて、特に、やればできると前もって予想がつく作業に対するやりたくない感とかがどんどん強くなっているので、まぁイロモノコーディングしているのは良いのではないかと思う。

ゲームは相変わらず SC2 とぷよぷよが神ゲー。 diablo3 もやってたけどアレはゲームそのものはどうでもいいんだけど、メタな部分が色々面白かった感がある…

1970 | 01 |
2003 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 12 |
2011 | 01 | 02 | 03 | 04 | 06 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 07 | 08 | 09 | 10 | 12 |
2013 | 01 | 02 | 03 | 04 |
(1886359 since 04.04.21)
なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com