utsurigi.net

dvorak練習中: e-typing Good! 284pt 300kpm 3日休んだら大分落ちた

GPちょっとよくなった

2009/7/27 月曜日
カテゴリー: プログラミング — utsurigi @ 1:19:11

部分木の入れ替えミスってた。
直したら3次関数を40回くらいでだいたい同定できるように。


最大ノード長で一律に切ってるので、これ以上続けてもたいして変わらない感じ。

でもsinとかだとなかなか収束しない。84回でこれ。

あとゲーム(ブラフ)のコンピュータ・人対戦を書いた。これってどうやってGPに落とし込めるんだろう…

行動を要素にしてif的に書くか、あるいは可能な行動に対するスコア関数の最適化かで大きく違いそう。ブラフってのはプレーヤ数n人とすると、最大で6*n*5通りくらいしか可能な行動がないのでやりやすいと思っていたんだが、そうでもないかも…

関数の値は行動とする場合だとこんな感じか:
末端ノード: (目, 数)を取り敢えず(x, y)とする, 目を増やす/減らす、数を増やす/減らす
非末端ノード: p人前の宣言した目がxであり自分がxをm個以上持っている, p人前の宣言した目がxであり、自分がx+x’をm個以上持っている、if A then B else C、A then B、…

なんか無茶だ。というかコレで不可能な手を提案されたらやり直すのも困る。やはり可能な行動に対して価値をつける方向でやるべきかな。それなら強化学習で良いような気もするが…

そうすると関数の値はその手を選ぶ価値。
末端ノード: 目、数、定数、p人前の目、p人前の数、p人前のダイス数、自分のダイス数、自分の目xの数、…
非末端:四則演算と、おまけによく使いそうなステップ関数くらい
でいけるかな?

今Pythonで書き殴ったGPライブラリがあまりに非効率かつ汚いので、綺麗にしてから考えよう。

Python+(py)Graphviz+GeneticProgramming

2009/7/26 日曜日
カテゴリー: Linux, Python, プログラミング — utsurigi @ 20:32:03

グラフ描画ライブラリGraphvizの練習中。
dot言語(vimのsyntaxに含まれている!)で簡単にグラフが書ける。


digraph {
graph [bb="0,0,0,0"];
node [label="\N"];
147599756 [label="*"];
147599852 [label=X];
147599756 -> 147599852;
147599820 [label="+"];
147599756 -> 147599820;
147599916 [label=X];
147599820 -> 147599916;
147599884 [label="-"];
147599820 -> 147599884;
147599980 [label="C -3.232840"];
147599884 -> 147599980;
147600204 [label="+"];
147599884 -> 147600204;
147600300 [label="C 5.583178"];
147600204 -> 147600300;
147600268 [label="/"];
147600204 -> 147600268;
147600364 [label="*"];
147600268 -> 147600364;
147600332 [label=X];
147600268 -> 147600332;
147600460 [label=X];
147600364 -> 147600460;
147702604 [label="-"];
147600364 -> 147702604;
147703212 [label="/"];
147702604 -> 147703212;
147703340 [label="C -2.826460"];
147702604 -> 147703340;
147703244 [label=X];
147703212 -> 147703244;
147703276 [label="C -1.359222"];
147703212 -> 147703276;
}

これが

こんなのになる。

ちなみに上のグラフはGraphvizをPythonから操作するpyGraphvizを使って、遺伝的プログラミングでx*x-8*xの関数同定を行った結果を出力したもの。(打ち切りとかはまともにやらずに目算)

木を自動的にGraphvizに落とすには、ノードを一意に識別するためにPythonの組み込み関数idを使う。(要はポインタのアドレス)
今まであまり必要としたことがなかったので、調べるまで知らなかった。

ボードゲームのコンピュータ側の思考をGPで自動化しようと思って書き始めたものの、上の簡単な例でも結構重いので本格的に使うには不安…

だめなのは肉体的背骨だけではなかった

2009/7/22 水曜日
カテゴリー: 雑記 — utsurigi @ 6:24:14

内容自体はわりと普通だけど、まさに今巻き込まれているアカデミックな環境にまつわる話として興味深い。
価値の判断基準が自分の外にある人間は表現者になれない - 発声練習

そうだよねえ。まったく。でも快不快さえも逆転しうる高度な脳味噌を持ってしまった人間が、一貫してる感を持つのは大変なことだとおもう。少なくとも自分は持っていない。周囲のメディアンというのはアウトライアにロバストな感じがするので、立脚しやすいんだろう。(因みに目下ロバスト推定を今更ながら勉強している)
それなら表現者になるなって話なんだろうけど、やってみないことには分からんし、ある程度後天的に修正可能な気もする。

それにしてもコメントや関連エントリでHatena Anonymous Diaryに行くと、やたら高尚なコメントが多く、まさに渦中の人「なるほどこれではいけない」「うるせーばか」とかが少ない。大学に何のために行ってるの?大学院生でそれはありえないよ。云々。

こういう人たちってどこに居るんだろうなあ。実世界であまり見ない気がするのは視野が狭いのか、実はみんな腹の底ではそう思って周囲を軽蔑しているのか。

抽象

2009/7/20 月曜日
カテゴリー: 雑記 — utsurigi @ 0:14:09

論文ばかり書いていると精神がダメになるので、ちょっと息抜きにテンプレート駆使したC++プログラミングでもやってみようかと思っている。
型リストとかModern C++ Designで読んだくらいで実際に使ったことがないのでかなり難航しそう。しかもテンプレートはPythonとかと行き来するのが大変になりそうだから困る。よく使う具体化をSWIGに喰わせるくらいしかないだろうか。
あとはLLの方を完全にくるんでしまって、C++から部分的に呼び出すか。
C++とHaskellとPythonを混ぜて使えるような何かないか探してみよう。ちょっとしたプログラム書く分には楽しそう。もうLLだけってのは年老いて記憶力も低下してきたしいいや…

それにしても暑い。体温計で気温が計れる。

無能の証明

2009/7/18 土曜日
カテゴリー: 雑記 — utsurigi @ 0:01:38

横浜まで出かけて自分の無能さをわかりやすくプレゼンする準備に追われている。
土日潰れるし暑いし研究室の人に迷惑掛けるし、なぜか1万も取られる。

聴衆にも自分にも研究室にもメリットがない。他の人の発表聞くのはためになるかもしれないが…

査読のある学会なら間違いなく落とされる水準だが、当講演会は査読無し誰でもウェルカムなので始末が悪い。

学会には出す、出すとは言ったが、期日までは定めていないことをどうか思い出して欲しい。我々がその気になれば投稿するのが10年20年先も可能だろうということ・・・!

などとも言ってられんので仕方なく書きます。

深夜まとう熱

2009/7/5 日曜日
カテゴリー: 雑記 — utsurigi @ 4:33:57

暑くて眠れん。やはりPC3台体勢は熱的に無理か。

5月くらいから何かと忙しかったような気もしますが、あと2週で多分解放される。何しようかなあ。久々に半田の煙を吸いたい気もするし、作りかけで放置してたがなぜかtumblrに載って一時期アクセスの増えた自作キーボードの続きをやったり、Haskellでボードゲーム書いたり、最近まるで見てないアニメをちゃんと消化したり、タッチスクリーンのプログラム書いたり、…あ、あとは研究も忘れずに。

何が本当にやりたいのか確固とした評価ができないので、何かと色々手を出して結局全部時間の無駄に終わっている気もします。しかも記憶力がないので、昔やっていたこともすぐ忘れてなんら糧になっていない。

人生の1/3がこうだったので、もう残り2/3も変わらないでしょうが… 目的をもって行動できる人が羨ましいなあ。

動画専用ディスプレイ快適です