プログ

’14修了無内定理系院卒の活動雑記||プー太郎ログ||プログラミング雑記

セオリーとぶっこみ

先日の記事に載せた,コンピュータが相手の番号を絞り込むためのプログラム

<?php
$min = ((maxStr(readPRec($record))>11)?maxStr(readPRec($record))-10:0);
$max = ((minStr(readPRec($record))<11)?minStr(readPRec($record))-1:10);
?>

の1行目の末尾の0は正しくは1でした.ここが間違っていたせいで相手が自分の番号+0を回答として出す(=ルール違反)をやらかしてきたというね,気づけて良かった.んでテストも兼ねてちょこちょこ対戦してみると分かるけど,このルール最初に紹介した時はあっち向いてホイレベルだって言ったけど思ってたほどそうでもなかったということ.
コンピュータの回答をrand(1,10)+rand(1,10)で出してるせいで初手から14とかぶっこんでくることがあって,14を打つと「4未満じゃない」のが確定する.さらにこの時自分の数が9だったりすると回答候補の内10~12はハズレであることが確定してし,そこで素直に13を打つと,「初手は11が大安定なのに,こちらの14に対して13を打つということは11~12は外れと分かったのでは」→「この状況でそれが分かるのは9」と一気に絞り込むことができてしまいます(10の場合10~13までハズレ確定するので13を打つのは外れ確定で打つことになる).かと言ってこれを嫌って11や12を選ぶのは絶対に当たらない数を回答してしまうことになるし,15は「5未満じゃない」ことを伝えるのでこちらが不利になってしまう.

何が言いたいかというと,初手から偏った数字ぶっこむのも戦略としてありなんだなぁということ.ただこれはあくまで「相手に与える情報の少ない11付近から攻めるのがセオリー」と言う考えに基いているのでそれがブレると成立しないし,この戦略自体がブレさせている.他にも色々あるけどうまく書けなかったので簡潔にまとめると,
・偏った数字を【ぶっこむ】のはありで,リスクは思うほど大きくない.
・ただそれは「相手に与える情報が少ない数字から攻めるベター」という【セオリー】に従っていて,それ自身がセオリーを崩している.
・相手が【ぶっこむ】か【セオリー】かが分かれば裏をかける.
・自分&相手の数が低い&低いか高い&高いの時に【ぶっこみ】が有効で,低い&高いの時に【セオリー】が有効.
・ただ結局その傾向も序盤では分からないので運の要素は結構ある.

まぁ色々書いたけど捨隈のブラフの8がまさに【ぶっこみ】ですね.ドティ自体では【セオリー】で攻めつつブラフで【ぶっこむ】ことで,相手が高くても低くてもどちらかが刺さって絞り込め,運の要素をカバーしている.

通信対戦周りについては相変わらずめどが立ちません.半ば掲示板みたいな感じなら作れそうではあるけどなるべくオンタイムな対戦形式にしたいよなぁ.太字で書いた部分も実装してみたいけど,方針が立ちにくいのと必ずしも良い結果を生まないのが難しい.【セオリー】型と【ぶっこみ】型を用意して開始時に裏で決めるのもありかもしれない.太字は実装してみたいけど必ず強くなる要素でもないので後回しかな.

あとコンピュータ同士でシミュレーションするプログラム書いたら色々わかったことがあるけど,こっから更に書くと長くなるのでまた今度.