これはKAZOONの不定期日記(チラシの裏)の2011年版です。下に行くほど新しいです。 2011/1/17 ちゃんと重みづけしよう,と言う話 ある剣師集合X,剣師A,剣師Bがあるとする。 AのXに対する勝率が(そんなことはまずないが)仮に重みづけの有無に関係なく0.7, BのXに対する勝率が0.6だったとする。 Xに対する高勝率剣師の探索の結果,Aが発見されたとする。 X∪{A}に対するAの勝率は,重みづけをしなければ0.7より少しだけ0.5に近い値になる(1引き分け増えるので)。 一方,ミニマックス解に基づく重みづけをすれば,ちょうど0.5になる。 X∪{A}に対するBの勝率は,重みづけをしなければ0.6より少しだけAに対する勝敗に近い値になる。 一方,ミニマックス解に基づく重みづけをした場合,BがX∪{A}にない系統の剣師なら0.5を超える可能性が高い。 従って,重みづけをしないでXを大きくし続けても,長い間A>Bの状態が続き,探索器はいつまでもBを発見できない。 一方で,ミニマックス解に基づく重みづけをした場合,Aが連続で発見される可能性は低くなり, 比較的早い段階でBが発見されることが期待できる。 2011/1/16 マーガレット2011αに参加しました。 思考ログは ./misc/m2011a.txt に,player.txtは ./misc/player.txt にあります。 2011/1/21 大域的多峰性 mkothaさんの方法[1]でミニマックス解(に近い環境)を作っていく過程で, 既にある程度ミニマックス解に近い環境が存在して, それに対して勝率0.5を超える剣師を探すことを考える。 ここで,マーガット・ハンドレッドを対象としたとき, 探索器が反0や残星を見つけるのが何故困難であるのか,という話である。 なお,特に今回の話は検証を欠いた想像の話である点は注意されたい。 想像にすぎないことはすぎないが,大筋は外していないと信じている。 エンジンやら激怒やら,多くの剣師は,その近傍にも似たような強さの剣師がいることが多い。 私がハンドレッドの強剣師をほとんど把握していないという理由により, 一時的にm100ではなくm15を例に話す。少々混乱を招くと思うが,容赦されたい。 紫電の近くにはヤマハ等の重みが0でない剣師がいて, その外側には重みが0になってしまうが,勝率0.5に近い熱斬系の剣師がいるし, そのさらに外側にはデス剣とか持ってしまってるようなのがいるだろう。 速攻やデス剣師の近傍を延々辿っていけばオランダにもつながっている, ということを想像するのはそう難しくないだろう。 全体として重みが0でない剣師を頂点にした山なりの景観をしていることをイメージしてほしい。 近傍等を適切に設定すれば,ランダム剣師からの局所探索で紫電等を発見することができる。 さて,一方で反0はどうだろうか。 反0の近傍でミニマックス解に参加できるのは同じ反0のみで, 反0を構成しているだけでは引き分けは多くなるが,勝利はなく,勝率はそれほど上がらない。 そして反0が崩れた瞬間とんでもなく弱くなる。 つまり,勾配が非常に急で,反0を頂点とした山は鋭く尖っているのである。 よって,反0にある程度近いランダム剣師が生成されたとしても, 局所探索を適用すると,反0から離れる方向に進んでしまうだろう。 となると,探索器が反0を発見するためには, 初期点であるランダム剣師の時点で反0が構成されているくらい近くから始めなければならない。 先に述べた通り,反0を含む山は非常に細いので,たまたまランダム剣師から反0が出てくる確率は低く, いくら探索を繰り返しても,なかなか反0は発見されない。 残星についても同様であるが,残星は残星が構成されているだけでもある程度勝てる点は少しはましそうだ。 これに対応する方法の一つは, > 0/0/0/1/儀0儀0導0黙/をベースとする剣師については専用ルーチンで探索した。 とある[2]ように,初めから特別扱いをすることである。 今回は反0や残星が強いことが分かっているので,このような方法を取ることができる。 では,反0や残星が強いと分かっていなかったり, 他に似たように細い山の先に未発見の構成があったりする場合はどうすればいいだろうか。 もう「途中から」「自動的に」特別扱いするしかない。 何度も探索を繰り返し,収束するたびに探索した領域を「既探索領域」として除外していき, (エンジンはもう大体探索したからもう加熱剣もつ剣師は探さなくていいよね,等) 反0だけが「未探索領域」として残るのを待つのである。 どうやって「既探索領域」を指定するのかというのは,進化計算の分野で最先端の研究課題である。 つまりこの方法について,枯れた手法はまだ存在しない。(GAはこのような景観に対して有効ではない) 似たようなことを局所的に行うのがタブーサーチであるが,それを大域的に行うことが必要なのである。 領域除外機構を上手く作れれば,0から反0を(現実的な時間で)発見する探索器を作るのも不可能ではないと思われる。 ちなみにどこまで行っても近似探索手法であることは変わらないので, 厳密なミニマックス解に到達したことを証明するためには(自明な例外を除いた)全数探索をやるしかない。 [1] http://www.kotha.net/m100sim/thoughts.txt [2] http://d.hatena.ne.jp/mkotha/20101221/1292924042 補足(2011/2/6) mkothaさんよりtwitterにてreplyがあったので転載する。 > rireki読みました。細かい点ですが、反0の近傍には強い剣師として 5/0/0/1/爆儀0儀0導0黙導0黙従/コヨミちゃん をはじめとする従/コウ系の剣師がいます > 残星については、探索器にMP剣優遇のバイアスを追加すると比較的簡単に見つけてくれました。このバイアスなしでは蒼なども見付からないので使いものになりません。具体的にはMP剣の取得と同時にMPソースを1or2本得る近傍を認めるものです 2011/3/7 欠点 できすぎくんの条件付き集計機能で思いがけず私の麻雀の欠点に気付く。 以下は全て私がまったり麻雀を相手にした640半荘の牌譜データに基づく。 「自分が放縦した次の局」の放縦率が実に17%に達するのだ。 和了素点こそ微増しているものの, (全体に比べて)和了率1%減,放縦率3%増という非常に悪い結果が得られた。 立直のクソ待ち率増加,追っかけ立直率増加と, 押すべきでない局面で押してしまうケースが増大していると思われる。 そこまで無理やりに押しても和了率があがるどころか下がっているのは何とも悲しい事実である。 たとえ一人沈んだとしても通常通りに打てるようにすることが実力向上に肝要だと思われる。 ついでにRubyで特定の条件を満たす半荘を抜き出してできすぎくんで集計もしてみた。 感覚的に苦手な気がした序盤にダントツができてしまったときのラス争いについて調べてみた。 「最初の2局(2局目は東1局1本場か東2局0本場)の何れかで他家の何れかが12000点以上の収入を得た半荘」 を抜き出したところ,順位分布は 9-9-23-18 となり,確かに2位が少ないように思われる。 16000点以上にすると 0-2-3-6 となった。 この場合は件数が少ないので何とも言えないが, 「東1+東2」より「無指定」のほうが放縦率が高いことから, ラス争いから脱出しようとしてかえってダンラスに転じてしまっているのかもしれない。 2011/3/20 http://tenhou.net/0/?log=2011032003gm-00c1-0000-xdcffaa1c20ff&tw=1&ts=3 「まあいい感じの配牌だな」 「おっとミス,第一打は東じゃなくて中だよ。まあいいけど」 「ツモ……,ツモぉ!?地和だとぉ?」 「親が流れて3位と8000点差の東風の東3ですか,半ば終わりだな」 東3局2本場 「親リー入って4向聴だけど全て使い切れそうなドラ4手,完全に降りるわけにはいかないだろ……」 「結局通したど危険牌は2pだけでドラ5張ったぞ,リーチ!」 「出た!これは起死回生の和了だろう」 東4局0本場 「あれ,これもしかしたら四暗刻あるんじゃね」 「まあ58pに受けるけど。先に7pツモったら四暗刻もあるかな」 「ってバカなこと考えてたら4pポンし忘れた……」 「4pスルーしたんだから5p受けくらい残しておくか……」 「リーチかかっちゃったし。振るとほとんどラスだからなあ」 「暗槓とかしてんじゃねえよ……」 「うわ,ほんとに四暗刻張ったし。リーチかける意味はあまりないしダマで1sは当然勝負」 「これツモったら一東風で役満2和了のゴキゲンゲーになるなあ」 「まあそうですよね(聴牌後一牌もツモること無く立直者の自摸和了)」 東4局1本場 「ラス目の暗槓にダブ東ポン……もう対面のトップでいいからさっさと終わってくれえ」 「地和親かぶったときはどうなるかと思ったけど何とかラス回避できました。ありがとうごさいました」 「牌譜見てたら東1局0本場の対面のリーチは四暗刻なんですね。とんだ役満ゲーだわ」 と言うわけで地和親かぶり,リーチに対して4向聴から攻める意思をもって為したラス目脱出になる和了, 逆転なるかの四暗刻聴牌とイベント目白押しの大変印象に残るゲームでした。 こんなに早く地和をお目にかかれる日が来るとは思わなかったなあ。 2011/3/29 更新記録 今日の更新はまったり麻雀の700半荘成績のまとめです。 1000半荘くらいまでやってからやりたかったけど思ったより大変だったので先に上げてみた。 この程度だとあまり細かい場合分けするとかなりデータ不足なんだよなあ。 最初の200半荘で.3あったトップ率は.283まで落ちたが,ラス率は.240とまあ満足。 2位率が低い気がするけどその分トップはとれてるからよしとしよう。 ただ,このトップ偏重っぽい分布は単なる偶然なのか私の打ち方がなにか変なのかは気になる。 まったり麻雀の愚形立直率も愚形1副露聴牌に取ることで減らせるかもしれない。 門前だと立直するしかない愚形聴牌も副露聴牌なら良形変化する可能性もあるし。 多分まったり麻雀がちゃんと副露率を上げてきたらそれだけで私の手には負えなくなるだろうな。 ちなみに私の成績が天鳳のそれよりいい理由の一つに迷ったときにたっぷり時間をかけて考えることがある。 微妙な点差で迎えたオーラスとかも課金してない天鳳だと点差計算間に合わないけど, まったり麻雀なら時間かけて状況を把握してから打ち始めることができる。 それとこの放縦率で何を言うって感じもするけどベタオリ中に(分かりやすい)安牌がなくなったときの判断がまだ微妙で, 特に分かりにくいけど安全度の高い牌があったりするとまったり麻雀で打つときのほうが判断はよくなると思う。 2011/3/30 更新記録 誤記修正。 2011/4/27 更新記録 閉鎖・移転によるリンク切れの修正。 2011/5/7 麻雀の役 役の重要度(覚えるべき順)のランキング。 改行でやや重要度に差があり,空行には越えられない壁がある。 同じ行内で並べるなら左から順に重要。 立直・断幺九・役牌 平和 混一色・対々和・七対子 ドラ 三色同順・一気通貫・混全帯幺九 門前清自摸和・一発・三暗刻・一盃口 清一色・ダブル立直 純全帯幺九 国士無双 四暗刻・大三元 流し満貫 海底摸月・河底撈魚・嶺上開花 槍槓 小三元・三色同刻・三槓子 混老頭・二盃口 その他役満 以下ランク付けの理由等。   第一段 基本役とドラ。基本的にはこれだけ覚えておけばよい。  立直・断幺九・役牌 最重要。なお,タンヤオはクイタンありの場合。 クイタンなしの場合はツモと同じ行か。  平和 重要であるが,基本的に立直を伴う上,打点上昇能力が低いため,一行落としてある。 平和を作って立直を打つのが最初に身につけるべき牌理であるため,ある意味最重要。  混一色・対々和・七対子 特殊な配牌のときに狙うことになる役。 これらの役は概ね専用の牌理をもつ。  ドラ 打点に大きく関わる。 ちなみに天鳳のように赤と裏を別扱いするなら,赤は同列,裏は一発と同列。   第二段 基本役にない役のうち,比較的出現頻度が高く, 戦略上価値を持つことのある役達。  三色同順・一気通貫・混全帯幺九 これらの役を成立させることで鳴くことができる。 鳴きによって門前では遅い手を高速化できる。  門前清自摸和・一発・三暗刻・一盃口 基本的には立直手の打点上昇役。 状況次第で一飜縛り解消役として利用することもある。  清一色・ダブル立直 それぞれ混一色・立直の上位役。 清一色は混一色とまとめて染め手として扱うため, 清一色独自の意味はそれほど大きくないが, 打点が非常に高い点は重要。 ダブル立直はほとんどの手代わりを無視して即リーの価値を高めるという意味で重要。  純全帯幺九 混全帯幺九の上位役。 上位役のランクの違いがそのまま重要度の差になるため, 清一色・ダブル立直より一行下に。 混老頭と違ってそこそこの出現率をもつため第二段に併合した。   第三段 出現頻度が非常に低いが,価値的に第二段に次ぐもの。  国士無双 役満の中でも狙いやすい。 特殊な和了形であるため,他の役との相互の方針転換がほぼない役。 その特殊性と打点の高さから第三段の最上位に。  四暗刻・大三元 三大役満の残り。 それぞれ対々和と役牌の延長として扱えるため,一行下に。  流し満貫 天鳳では流局扱いだが,収入の大きさと特殊性から,並べるならこのあたりか。  海底摸月・河底撈魚・嶺上開花 特殊な状況役。 形聴でも和了資格を満たすという意味でこの位置。  槍槓 特殊な和了方法によって成立する役。 出現率が極めて低いため一行下がってこの位置。   第四段 出現頻度が非常に低い役達。  小三元・三色同刻・三槓子 出現頻度の非常に低い非役満役のうち,下位役が存在しないもの。 小三元は役牌を伴うが,打点は高いために同列とした。  混老頭・二盃口 出現頻度が低い上,下位役が存在するために分けて考える意味が低いもの。  その他役満 全て下位役が存在するし,ここでそれぞれ分けて扱ったり, ランク付けしたりする意味は薄いので一つにまとめた。 関係ないが,まったり麻雀では未だに槍槓・小三元・三槓子・二盃口には遭遇していない。 (三槓子以外は聴牌まで行ったことはあるが) 2011/5/30 http://tenhou.net/0/?log=2011053002gm-0029-0000-xa42c00031e67&tw=2 オーラス。3位と10800点差のラス目。 跳満か64直が必要な点差であり,自然に跳満を狙えない絶望的な配牌である。 最後に残された無理跳満リーヅモチートイ裏裏を狙ってもよいが, 私はこういう時はラス確立直を目指すことが多い。 手なりで進めていくとトップ目の対面から天恵の立直棒が供託される。 これで79ツモか52直と大幅に条件が緩和されるが,眠い私はこれに全く気付いていない。 トップ目の立直により2位の親の連荘がほぼ絶望的になったにもかかわらず, あろうことか聴牌流局を目指しはじめてしまう。 そして聴牌。嵌ドラ待ちとはいえ直ツモ+裏1条件の絶好の聴牌にもかかわらず, 聴牌流局を目指してシャンポン待ちダマにとる。 次巡平和がついて直ツモ+(高目(ドラor赤)一発裏から2飜)に若干条件が緩和。 特に(供託なしでも逆転する)跳ツモが何とか狙えなくもない形になっているにも関わらず, すでに自分の牌姿の点数の確認を行っていないために全く何も考えていない。 (平和が新たについたことには気づいているが, そのことにより跳ツモに必要な条件がどうなったかは眠くて考えられなくなっていた) これにより次巡の高目一発ツモを逃す。 ここでドラを切らずにフリテンに受ける。 和了牌がほとんど残っていないことは把握しているが, わずかに一枚だけ残っていることは確認していない。 最後の一巡,放銃を避けるために1sを切るが, ここでタンヤオがついたことにももちろん気づいていない。 6sが一枚残っていることと自分の手がタンピンドラ1になっていることを確認していれば 跳ツモ確定の立直も打てようものだが,それもせず。 そして海底。海底であることも逆転の満ツモであることも気づかずに流局させる。 今までとんでもないミスをいくつもしてきてはいるが, 逆転確定のツモ和を見逃したのは初めてだ。 これは正着に一切の裏目が存在しないというとんでもないミスである。 最大のミスは眠いときに打ったことであるが,シバ供託を考慮した逆転条件, 特に局中で変化する供託による条件緩和を把握していないのはとんでもないミスである。 打牌上のほかのミスはほぼすべてこの状況把握ミスに起因する。 また,他家が状況判断をして打牌することを考慮しないのも悪い癖である。 対面の立直により,状況的に連荘率が極めて低いことを考えず, 平場無条件と同程度の連荘率を期待していたのである。 これを十分把握していればカンドラ待ちで即リー(一発ツモ裏裏で逆転するつもりで実際は直ツモ+裏1で逆転) できていたはずで,ラス確のつもりで実際は裏1で逆転のツモ和も宣言できたはずであったし, 海底で気づければラス確のつもりで逆転のツモ和も宣言できたはずであった。 そもそも連荘率を考えれば逆転条件をちゃんと確認しないなどということはありえないはずだった。 2011/6/5 Knight Night 以前から名前だけは聞いていたのでやってみた。 なかなか面白かったが,戦闘がぬるすぎるのはどうかとも思った。 キャラクター「勝てるはずがない」 私「この戦闘バランスで負けるはずがないと思うのだが?」 割とメタい視点ではあるが,RPGにおける戦闘の意味とか考えるとどうもな。 やはりストーリー上強い敵はゲームとしても強くあらねばならない。 あと暗い暗い思い出の淵のインパクトは大きかった。 2011/6/26 http://tenhou.net/0/?log=2011062615gm-0029-0000-x07c7425d24bc&tw=0&ts=9 オーラスの押し引き問題。下家の立直直後の対面からの2s,ポンするか。 このケースでは4pはほとんど当たらないと考えていいので少し計算は楽である。 まず,対面との点差は3000点ちょうど。 よって降りたとき,流局時(上家がノーテンの場合)は同点でラスは対面になる。 対面は立直赤の3200点以上が確定している。 トップ目の下家が役ありで立直するとは思えず,ドラの見え方からして高くて2600程度と見積もってよいだろう。 上家はこの状況で押すメリットがほとんどないのでまあ降り切るだろうと考える。 したがって「対面が和了したとき,またそのときに限って私がラス」と考えてよい。 ここで2sをスルーするメリットは安牌として2sを確保できること, すなわち最後まで降り切ることをほぼ確定できることである。 ただしスルーによって自分の和了率はほぼなくなってしまう。 ポンすることにより,自分に和了率が発生し,結果的に対面の和了率を抑制する効果がある。 その代わり自分の放縦率が上昇し,対面の私からのロン和率が上昇する。 簡単のため,ポンした場合は最後までゼンツすると仮定し, 非流局時の対面の和了率をスルーしたときは1/2,ポンしたときは1/3とおこう。 ここで,スルーしたときの流局率をr_h,ポンしたときの流局率をr_oとすると, ポンが有利になる条件は (1-r_h)/2-(1-r_o)/3 > 0 で,r_o について解くと, r_o > (3/2)r_h-1/2 となる。 これから,スルー時の流局率が1/3未満ならポンしたとき流局率が0になってもよいと分かる。 かなり緩い条件であると思われ,ほぼ押し有利であると言える。 ただし実際には聴牌時に切る牌や聴牌後ツモ切る牌の危険度の推定が非常に難しい。 今回の結果は平均的には押し有利と言えるだけであって, 通常押す場合と異なり,このケースでは降りに明確なデメリットは存在しない。 すなわち切る牌が対面に刺さる危険度を正確に測って押し引き判断をする必要があると考えられるのである。 今回のケースでは通ってない萬子を通すのはかなり厳しそうである。 (下家の立直が掛る前は対面の一人聴牌流局でラスるので少なくとも聴牌は目指す必要があった) 2011/10/1 更新記録 拡張の対応を確認したのでFirefoxを3.6から7に更新した。 これに伴ってリンク集の拡張一覧の一部を更新した。 ついでにリンク集の見直しを行った。 2011/12/15 自己展開型魔法陣とマジカルコンピューティング ここで魔法陣とは,記号の集合のうち,適切に魔力を作用させることで魔法を発現できるものである。 例えるなら電気・電子回路のようなもので,機能させるためには電源が必要で,同等の回路は同等の機能を持つ。 回路の規模に応じて要求する電源の規模が異なるように,異なる陣は異なる魔力規模を要求する。 電気でできることと魔法でできることは異なるため,魔法陣は様々な魔法的機能を有する。 ところで,ものを動かす魔法はよく描かれるため,魔法によって魔法陣を描くことも可能なはずである。 よって,小さな陣で発動した魔法により,大きな陣を描くことにより, 小さな労力で大きな陣を形成し,大規模な魔法を発現するといったことも可能ではないかと考えられる。 これは,大きな陣の機能を小さな陣で代替していると考えられ,陣の圧縮を行っていると考えることができる。 ここで注意しなければならないのは,小さな陣の機能は大きな陣を描くことまでで, 大きな陣を起動させるためには新たに描かれた陣に対して魔力を作用させなければならない点である。 つまりこの陣圧縮技法は,永久機関を意味しない。 しかし,一般に人の手で陣を描くには非魔法的な労力(時間等)を要するため, 陣を描く機能を小さな陣に持たせることは,魔法の行使にあたって一定の意味をもつと考えられる。 特に何らかの魔力源と接続し,そこから魔力を導く機能までを小さな陣に持たせれば, 魔力源と小さな陣のセットは大規模な魔法を起こすためのパッケージになる。 さて,魔法陣を電気・電子回路に例えたが,ならば,現実世界のコンピュータと同等のものを, 魔法陣によって構成することも可能であると考えられる。 すなわち,実際に発現する魔法をより理解しやすい言語で記述したプログラムを, コンピュータに相当する魔法陣で解釈・実行させることにより魔法を発現する, プログラマブルマジックの概念を考えることができるのだ。 逆に,現実世界のコンピュータで行っている計算機能を, この魔法的コンピュータに持たせるマジカルコンピューティングの概念も考えられる。 よくわかる現代魔法における現代魔法は,コンピュータとしてこの魔法的コンピュータではなく, 現実世界にある電子コンピュータを使用したプログラマブルマジックである。 これを実現するために,電子回路が魔法陣としての機能を有する世界観説明がなされている。 プログラマブルマジックを実行するためのコンピュータやプログラムがどのような形態をとるかは, 魔法が物理的にどのような存在であるかという世界観設定に依存している。 よくわかる現代魔法では,プログラマブルマジックのために, 特殊な魔法的コンピュータを必要としないように,このような設定が行われていると考えられる。 このようなことを考えた背景は,以下のようである。 ・魔法が存在するためには,魔法の物理的背景が必要である。 ・魔法に物理的背景が存在し,人間のような知性体が存在すれば,魔法は科学によって研究されるはずである。 ・現実世界のコンピュータのような概念は,魔法の存在する世界でも考えることができる。 ・ならば,コンピュータと魔法を合わせたプログラマブルマジックや,  マジカルコンピューティングの概念も生まれるはずである。 ・なお,これらの概念が原理的に存在することと(その世界において)現実に存在することとは差があり,  現実世界で非ノイマン型コンピュータが普及していないように,  プログラマブルマジックとマジカルコンピューティングのいずれかまたは両方が普及していないことはあり得る。  よくわかる現代魔法は一方が存在して一方が存在しない好例である。 なお,前類推の第一項である「魔法が存在するためには,魔法の物理的背景が必要である」 については,哲学的世界観に依存した前提である。 すなわち,物理法則の存在しないような世界観を設定することは可能で, そのような世界ではこの論理は完全に破綻する。 そして私はそのような世界は「嫌い」である。 また,前類推をさらに推し進めれば,科学的に現実世界より未熟であれば, それがこれらの概念が存在しない理由になりえる。 「科学」が現実世界並みに,あるいは現実世界よりもっと進んでおり,かつ魔法が存在し, それにもかかわらず魔法が科学的に研究されていないのは,リアリティの欠如を覚える。 (先の前提が破綻する世界であれば,科学が存在するはずがないと考える。 先の前提が破綻した上に科学が存在する,とする世界は極めて異様であり,理解に苦しむ)