デュプリケート麻雀の実装

電脳麻将 の思考アルゴリズムを改善したときはプログラム同士を自動対戦させて効果を検証している。現在のアルゴリズムの場合、1000戦の試行に5時間くらいかかる*1のだが、麻雀には運の要素があるため同一のプログラム同士を対戦させても1000戦では平均順位に 2.45~2.55 ほどの幅が出てしまう。効果の高い改善であれば平均順位が 2.40 程度になりこの範囲を超えるのだが、このところ試している押し引きの改善では平均順位がこの幅の中に入ってしまい、効果があるのかないのか判然としない。

ならば1000戦分の牌山をあらかじめ作成しておき、同一の状況で対戦させればよいのではないか。リアル麻雀にはこのような試みがあり、「デュプリケート麻雀」と呼ぶらしい。

リアル麻雀でこれをやるのは相当大変そうだが、コンピューター麻雀なら簡単なはず。ということで実装してみた。

*1:最初期のアルゴリズムなら10分程度で1000戦できたのだが……

続きを読む

押し引き表の牌姿は評価値何点?

電脳麻将 の押し引きの検討を開始した。押し引きの基準としてはいろいろな麻雀戦術書で引用されている「押し引き表」が有名である。

これをそのまま実装してもよいのだが、現在の牌姿が表中の「1向聴・完全・のみ手」といったパターンのどれに該当するのか判定するのが厄介だし、そもそも表中にすべてのパターンが網羅されている訳でもない。さらには押し引き表は離散値なので調整が面倒だ*1。電脳麻将では牌姿を 評価値 で表すことができるので、これを牌姿のパターンの代わりとすれば判断基準に使えるはずである。例えば「1向聴・完全・のみ手」の子の場合、評価値は 383.33 となる。

*1:おそらくは同様の形式の表をプログラムで準備する必要があるが、その初期設定や微調整が面倒すぎる

続きを読む

牌山と河のデータ構造

麻雀の手牌を表示するプログラム - koba::blog に続いて牌山と河を表示するプログラムを説明しようかと思いましたが、そのためにはまず牌山と河がJavaScriptでどのように表現されているかを知る必要があります。ということで今回は牌山と河のデータ構造について。

続きを読む

さくらVPSでApacheのSSLを有効にする

さくらVPSで kobalab.net を運用しているのですが、昨今はhttpsに対応していないと何かと不便です*1。SSL証明書の価格も安くなってきているのでSSLを有効にしました。

かつて mod_ssl の設定 - koba::blogmod_sslのインストール - koba::blog の要領で「インチキ証明書」を作ってApacheのSSLを有効にしたことはあるのですが、今回はマジメにやります。

*1:httpsなページからは非httpsなサイトの画像やCSSやJavaScriptのプログラムを利用できない。このために 牌画入力ツール の牌画像の配置にGitHubページを使わざるを得ませんでした

続きを読む

麻雀の手牌を表示するプログラム

電脳麻将 は HTML5 + CSS3 + JavaScript で動作しています。手牌もHTML5とCSS3だけで表示しています。今回は以下の手牌を例に、どのように表示しているか説明します。

f:id:xlc:20200809182855p:plain:w600

手順は以下の流れになります。

  • 牌譜形式 → JavaScript形式 に変換
  • JavaScript形式 → HTML に反映
  • HTML を CSS で実際に表示されるイメージに調整
続きを読む

電脳麻将のプログラム構成(2) 〜 HTML/CSS編

電脳麻将のプログラム構成(1) 〜 JavaScript編 - koba::blog に続き、今回はHTML/CSSのプログラム構成。

電脳麻将 では、ver.1.0 からCSSの生成に Stylusver.1.3 からHTMLの生成に Pug を使っています。HTML/CSS に関して現在リファクタリング中です。以下の説明は次回リリースの ver.1.4 での構成 となります。

続きを読む

電脳麻将のプログラム構成(1) 〜 JavaScript編

電脳麻将のプログラム構成(0) ~ 全体編 - koba::blog に続き、今回はJavaScriptのプログラム構成。

電脳麻将プログラム は全てJavaScriptで記述しています。プログラムは以下に分類できます。

  1. 共通モジュール
  2. 画面系モジュール
  3. ページ毎モジュール
  4. 開発用モジュール
続きを読む

電脳麻将のプログラム構成(0) ~ 全体編

電脳麻将 のプログラム構成について。

ver.1.0.0 より電脳麻将は、npm対応のパッケージ になっています。ソースからビルドするには Node.jsnpm が必要になりました。今回はこの新しいプログラム構成について説明します。

次回リリースする ver.1.4.0 で構成を再度見直す予定なので、今回の説明も先駆けてそれに合わせています。

続きを読む

Node製のサービスを常駐化させる

電脳麻将で天鳳の牌譜を検討する - koba::blog で作成した天鳳牌譜変換サーバを外部からアクセス可能な常駐サービスとして起動するよう設定します。手順は、

  1. mod_proxy によりApacheをリバースプロキシにする
  2. systemd によりサーバ起動時に自動起動するようにする

となります。

続きを読む