押し引きアルゴリズムの改善(2) - koba::blog で1シャンテンまでの押し引きを改善したので、今回はテンパイ時の押し引きを改善する。
- ポンテン・チーテンをとる条件を変更
- 超愚形ならオリるよう修正
- 好形でないならリーチせず無スジは切らないよう修正
の3つが改善候補。
続きを読む押し引きアルゴリズムの改善(2) - koba::blog で1シャンテンまでの押し引きを改善したので、今回はテンパイ時の押し引きを改善する。
の3つが改善候補。
続きを読む押し引きアルゴリズムの改善(1) - koba::blog で全ての打牌について1つ1つ押し引きを判断できるようになったので、押し引き表の牌姿は評価値何点? - koba::blog で言及した「評価値を基準とした押し引き判断」を実装する。
続きを読む先制リーチを受けた場合、電脳麻将 は ベタオリのアルゴリズム - koba::blog で「仮実装」したアルゴリズムにしたがい打牌を選択しているが、今回これを改善したい。
まず最初に改善目標を明確にするために、2019年の天鳳鳳凰卓の牌譜から先制リーチを受けた局の最終結果と局収支を集計してみた。
続きを読む電脳麻将 の思考アルゴリズムを改善したときはプログラム同士を自動対戦させて効果を検証している。現在のアルゴリズムの場合、1000戦の試行に5時間くらいかかる*1のだが、麻雀には運の要素があるため同一のプログラム同士を対戦させても1000戦では平均順位に 2.45~2.55 ほどの幅が出てしまう。効果の高い改善であれば平均順位が 2.40 程度になりこの範囲を超えるのだが、このところ試している押し引きの改善では平均順位がこの幅の中に入ってしまい、効果があるのかないのか判然としない。
ならば1000戦分の牌山をあらかじめ作成しておき、同一の状況で対戦させればよいのではないか。リアル麻雀にはこのような試みがあり、「デュプリケート麻雀」と呼ぶらしい。
リアル麻雀でこれをやるのは相当大変そうだが、コンピューター麻雀なら簡単なはず。ということで実装してみた。
*1:最初期のアルゴリズムなら10分程度で1000戦できたのだが……
電脳麻将 の押し引きの検討を開始した。押し引きの基準としてはいろいろな麻雀戦術書で引用されている「押し引き表」が有名である。
これをそのまま実装してもよいのだが、現在の牌姿が表中の「1向聴・完全・のみ手」といったパターンのどれに該当するのか判定するのが厄介だし、そもそも表中にすべてのパターンが網羅されている訳でもない。さらには押し引き表は離散値なので調整が面倒だ*1。電脳麻将では牌姿を 評価値 で表すことができるので、これを牌姿のパターンの代わりとすれば判断基準に使えるはずである。例えば「1向聴・完全・のみ手」の子の場合、評価値は 383.33 となる。
*1:おそらくは同様の形式の表をプログラムで準備する必要があるが、その初期設定や微調整が面倒すぎる
麻雀の手牌を表示するプログラム - koba::blog に続いて牌山と河を表示するプログラムを説明しようかと思いましたが、そのためにはまず牌山と河がJavaScriptでどのように表現されているかを知る必要があります。ということで今回は牌山と河のデータ構造について。
続きを読むさくらVPSで kobalab.net を運用しているのですが、昨今はhttpsに対応していないと何かと不便です*1。SSL証明書の価格も安くなってきているのでSSLを有効にしました。
かつて mod_ssl の設定 - koba::blog、mod_sslのインストール - koba::blog の要領で「インチキ証明書」を作ってApacheのSSLを有効にしたことはあるのですが、今回はマジメにやります。
*1:httpsなページからは非httpsなサイトの画像やCSSやJavaScriptのプログラムを利用できない。このために 牌画入力ツール の牌画像の配置にGitHubページを使わざるを得ませんでした
電脳麻将のプログラム構成(1) 〜 JavaScript編 - koba::blog に続き、今回はHTML/CSSのプログラム構成。
電脳麻将 では、ver.1.0 からCSSの生成に Stylus、ver.1.3 からHTMLの生成に Pug を使っています。HTML/CSS に関して現在リファクタリング中です。以下の説明は次回リリースの ver.1.4 での構成 となります。
続きを読む