立直の条件を修正
超クソ待ちで立直しないように、立直条件を修正。
5000試合ためし打ちしてみて、平均順位で0.0015前後と、ちょこっとだけ改善している模様。
それと、Version0.9x系列は役判定を作成中。久々にV0.8xの役判定を見直したけど、我ながらヘボいプログラムで厭になる。
| 固定リンク
| コメント (2)
| トラックバック (0)
超クソ待ちで立直しないように、立直条件を修正。
5000試合ためし打ちしてみて、平均順位で0.0015前後と、ちょこっとだけ改善している模様。
それと、Version0.9x系列は役判定を作成中。久々にV0.8xの役判定を見直したけど、我ながらヘボいプログラムで厭になる。
| 固定リンク
| コメント (2)
| トラックバック (0)
Debianインストールして自宅鯖として利用していたノートパソコンがとうとう電源が入らなくなった。
機種は FMV LOOX T86A。
24時間運転で、7年間も使ったし、液晶もバッテリーもとっくにガタが来ていたから、
いつ壊れてもおかしくない状態だったんで仕方ないと思ってる。
幸いデータのバックアップも取ってある。
だけど、後継機をどうするか……
ノートPCはまだ、Let's NoteCF-W2を持ってるけど、これは、最低動作スペック確認マシンとして保存しておきたい。
新たに一台買うかな。
いまのところファンレスで静かそうなので、DellのDELL Inspiron Mini 12を最有力に考えているけれど、ファンレスで24時間運転できるものなのだろうか。
| 固定リンク
| コメント (0)
| トラックバック (0)
自作PCにデータなどの環境を移行した。ただ、まだいつ動かなくなるか不安なので古いPCはそのまま残しておくことにして、新しいデータはこまめに外付けHDDにバックアップする。
| 固定リンク
| コメント (0)
| トラックバック (0)
Visutal Studio 2005(VC++)に環境変えたのはいいけど。私MFCもWin32APIもほとんどまったくわからない。
まあ、ドキュメント見ながらやれば何とかなるだろうけど。
| 固定リンク
| コメント (0)
| トラックバック (0)
手牌を探索するとき、受け入れ牌、捨て牌候補のリストアップをする必要があるけれど、そのために、まずは向聴数をベースにリストアップするのがひとつの現実解となる。
13枚状態の手牌と14枚状態の手牌の向聴数が調査できるアルゴリズムが作れれば、14枚状態から向聴数を落とさずに13枚状態にできる牌をリストアップすることも簡単にできる。
そして、打牌をして13枚状態になった手牌で、個別に牌を追加して14状態にしたとき向聴数が向上する牌の種類と枚数をカウントし、最も多くなるような、打牌を選択すれば、棒テン即リーのアルゴリズムは出来る。
東風荘でR1400以下程度のあまり真剣に麻雀に取り組んでない人相手なら、単純にこれだけのアルゴリズムでもそこそこ相手になる麻雀プログラムになる。
向聴数を調査するアルゴリズムには、おおむね2通りのやり方がある。ひとつは手牌をバックトラック法で、面子、塔子、対子、孤立牌に分割する全パターンをリストアップし、そこから、面子数、塔子数、対子数から向聴数を計算する方法。
もうひとつは、あらさんのホームページに載ってるような1スーツ分のハッシュテーブルを持つ方法。
1スーツ分(例えば、萬子)の考えうる全てのパターンと、
手牌を面子数×10+(塔子+対子)の数が最大となる面子の数と(塔子+対子)の数と、
、面子数×2+(塔子+対子)が最大となる、面子の数と(塔子+対子)の数を
構造体メンバとしてもつハッシュテーブルを作ってそこから向聴数を計算する。
単純に向聴数をカウントするだけだと、ハッシュ方式の方が50倍近く早い。
あらさんの一人麻雀練習機はこちらを採用している模様。
ただ、ハッシュ方式だと、死に塔子の判定がしにくい。死に塔子とは、例えば1-3のカンチャン塔子を持ってるとき、他者に2を槓されて面子に変化しなくなってしまった塔子のこと。このときは実質向聴数が+1になるけれど、ハッシュ方式だとこういった死に塔子をバックトラックで探索していかないと見つけられない。
それに、アルゴリズムによっては打牌せず、ツモだけして、多牌状態にしてから評価したりする場合もあり、そういった方式に応用しにくいし、事前に無駄だと分かる打牌を前方枝刈りするのも難しい。
また、単純に速度面から言っても、向聴数の計算は速いものの受け入れ牌のカウントや、打牌候補の選定は手牌分割方式より遅いという欠点もある。(これはそれ専用のテーブルを作れば解決できるが)
鳴きなし、相手なしの一人麻雀だとハッシュ方式でなんら問題ないんだけれど、点数状況による和了点の制限や鳴き、他家の捨て牌等がからむ4人麻雀ではたとえ50倍遅くても手牌分割方式のメリットは捨てがたい。
なので、私は今まで手牌を面子塔子対子孤立と分割状態にした状態のままコンテナに入れておく手牌クラスをつくり、、探索中は、分割状態を持ちまわって手牌のツモ&打牌が出来るようにしている。
そのことで、速度的に遅い手牌分割を最初の1回だけしかやらずに済ましている。
今回Ver0.9用に作り直すにあたり、両方の方式を実装してみたけれど、トータル的に、手牌分割方式のほうが便利そう。
ただ、Ver0.9用につくっている最中に発見したんだけど、Ver0.8では同じ手牌を何度も評価する無駄な処理があり、結構時間がかかってしまっている。私がVer0.8で採用しているアルゴリズムはあらさんのものより遅いのだが、どうもここの無駄な処理が原因だったようだ。てっきりハッシュ方式の向聴数チェックをしていないためだと思い込んでいた。
ちなみに、麻雀ゲーム作ってるときはパターンが多くてテストが大変なんで、確実に動くが遅いバージョンと高速化バージョンの2パターン(以上)を実装してアウトプットが同じになるか比較して検証している。
そのため、オブジェクト指向型の言語で個々のパーツの入れ替えが簡単に効くように作ったほうが何かと便利だと思う。
| 固定リンク
| コメント (7)
| トラックバック (0)
なんと、天鳳で鳳凰卓の牌譜のURLの公開が始まったみたい。
http://tenhou.net/sc/raw/
うーむ、これだけ良質な牌譜が大量に手に入るなら結構面白いこと出来そうだ。
とりあえず、1日に1回自動ダウンロードするスクリプト作成して自宅鯖のcrontabに登録しておいた。
| 固定リンク
| コメント (0)
| トラックバック (0)
出勤してから帰宅するまでの間に1万試合x2のデュプリケートができるCPUパワーが欲しかったのと、Version0.9.x系列は並列処理してさらに深く読めるようにしたかったので、Core i7マシンを自作してみた。
マザーボードをケースに取り付けるときスペーサを取り付けるの忘れて、うまく動作しなかったり、色々大変だったけど、自作作業を一度経験しておきたかったのでそういう意味では経験値稼ぎになったのでよしとする。
【PCケース】
Antec Solo White
-> PC自作雑誌の例として載ってたのであまり考えずに買った。内部スペースが狭くてマザボの取り付けとかSATAのケーブル接続がつらい。もっと大きい奴にすればよかった。
【マザボ】
GIGABYTE GA-EX58-UD3R
->まずまず満足。マニュアルもGood。オーバークロックもやりやすい。メモリソケットが4つなのが難点だけど、32bit OSなら関係ないし64bi OSt化したとしても、メモリ安いから気にしない。
【CPU】
Intel Core i7-920
->割とオーバークロック効くとのことなので、とりあえず一番安い奴を選択。個人レベルで擬似8コアCPUが手に入るのはありがたい。将棋やまったり麻雀動かしてみるとやっぱりパワーを感じる。
【メモリ】
ELIXIR T3U1333Q-2G
-> 1Gbytes × 3枚のセット品。
【グラボ】
nVIDIA GeForece 9600相当品
-> 3Dゲームはやるつもりなし。GPUPGに興味があるので、ATIではなくてnVIDIAを選択。CUDA対応なら何でも良かったので省電力タイプを選択。CUDAで麻雀の超高速役判定アルゴリズムが組めないかなあ……
【リムーバブルメディア】
アイ・オー・データ DVR-SN20GL
-> 付属ソフトが使い慣れているB's GOLDとWinDVDだったのが選択理由。BDは高くて手が出なかった。
【HDD】
アイ・オー・データ HDI-SAH(1.5Tバイト)
-> 特に選択理由なし。RAID構成にしようかとも思ったけど、バックアップは別手段でやるのでやめた。
【電源】
オウルテック S12。 550Wのやつ。
->静音性重視で選択。不要なケーブルの取り外しが出来ないのが難点&PCケースが小さいので中がいらんケーブルでごちゃごちゃするハメに……
【OS】
Windows XP Professional
-> 前に買いだめしてあった奴。XPじゃないと動かないソフトがあるので当面XPで。
| 固定リンク
| コメント (0)
| トラックバック (0)
内容は、ほとんど「超・入門 科学する麻雀」と一緒。
「超・入門 科学する麻雀」は雑誌と本の中間形態のMOOKとして発行されたため、今からは殆ど新品では入手できない。そういう意味で、「超・入門 科学する麻雀」を読みたかったけど購入できなかった人にはオススメできる。
内容がMOOK版とほとんど一緒とはいっても、多少は違う箇所がある。もっとも顕著なのは、MJ4のデータを用いた実力ごとの打ち方の差を比較をしている6章だが、これも既に発行されている「MJ4攻略大全」から持ってきたものだ。もし、「超・入門 科学する麻雀」を持っているけど、今回追加されたMJ4のデータ比較部分に興味があるため、「おしえて!科学する麻雀」の購入を検討している方なら、「おしえて!科学する麻雀」ではなくて「MJ4攻略大全」を買ったほうが良いだろう。「MJ4攻略大全」には、「おしえて!」で追加された部分だけでなく、GAMEJAPANで連載されていた小林剛プロの何切る問題が載っており、これが、かなり有意義な内容となっているからだ。
さて、麻雀本を買うときの最大の購入基準はなんといっても「この本を読めば私は強く成れるのか」ってことだと思う。科学する麻雀の一連のシリーズは押し引き判断とベタオリの手法に重点を置いて解説している。その部分について不安を持っている人ならば、上達は見込めるといってしまっていいと思う。私自身も東風荘のR1750程度だったものがR2050程度まで上がったので、すくなくとも、私自身は効果を確認済みだ。一連の科学する麻雀の本については、まったり麻雀のアルゴリズムも相当に参考にしているが、押し引き判断やベタオリは比較的うまく機能している。
そういった意味で私は結構科学する麻雀シリーズにはお世話になっている。だけど、今回は敢えて疑問点を上げてみる。
データがうそ臭い
今回追加されたMJ4のデータはところどころ怪しい値があって正直まじめに解析する気になれない。(例えば、配牌時向聴数と和了率の箇所など)。「MJ4攻略大全」を読んだときは、単なる誤植かとおもっていたけれど、今回「おしえて!科学する麻雀」でも直ってない。まじめに検討解析してないか、もしくはデータを捏造しているかのどちらかだろう。
本人達が本に書いてあるとおりの打ち方をしてない
結局のところ、理論が正しいかどうかは実戦により示すのがもっとも説得力のある方法である。
しかし、残念なことに、本人達が本に書いてあるとおりの打ち方をしていない。このことは、私がそう感じるだけというわけでなく、多くの人がネット上で指摘していて、とつげき東北氏も福地氏も認めていることだ。
とつげき東北氏は、「最近仕事がいそがしくて……」という感じで、単にミスをしてるだけとの発言だけど、福地氏の方は、完全イーシャンテン形からの先切りなど、意識的に異なるうち方をしているように感じられる。むしろ、「まったり麻雀」のほうがバカ正直に「科学する麻雀」の考えに沿ったうち方をしているとさえいえる。まったり麻雀の実力はごらんのとおりで、既存のコンピュータゲームよりは強いと思うし私程度ならいい勝負となるけれど、トップクラスの実力者からみたら全然マダマダというのが実際のところだろう。
いくらなんでも大雑把過ぎやしないか
「状況による」でごまかして答えをあいまいにせずはっきりと答えを出すこと、統計的裏づけがあいまいな読みに頼らないこと、多くのケースで適用できる汎用的な技術を先に身につけること、という作者のコンセプトは、私程度の実力位までは十分有効だと思う。また、今までのウラスジや暗刻落としはさほど危険ではないということをデータとともに示したのはとても画期的なことだと思う。
ただ、いくらなんでも、解析が大雑把過ぎないだろうか。天鳳の鳳凰卓に安定して在籍できる程度までの実力身に着けたいならば、もっと細かい条件わけが必要となってくるのではないのだろうか。残念なことに、私程度の実力では正しいことなのかどうかを判断できないが、少なくとも、鳳凰卓を観戦したり、関連ブログを読んだ限りにおいては、トップクラスのメンバーは皆かなり細かい条件わけを意識していて打牌をしているように思える。
また、本の中で麻雀は点数が倍々に増えるゲームなのであまり細かい点は気にしなくても大丈夫との言い方をしているが、実際まったり麻雀にアルゴリズムを組み込み、判断基準を評価値として算出してみると僅差になることが多いのだ。また、本の中で、攻めるときは100%攻め、守るときは100%守った方が良いというような趣旨の記載があるが、そういった面も、まったり麻雀の打ち方を上級者に評価してもらった経験で判断するかぎり、疑問が残る部分である。
3冊も出しているが内容に殆ど進歩がない
科学する麻雀の結論を導き出すための手法自体はおそらくは正しい。しかし、手付かずの分野も多い。そういった意味でもっともっと研究が必要だ。
最初の「科学する麻雀」が発売されてかなりの年数を経ており、その間、「科学する麻雀」、「超・入門 科学する麻雀」の熱心な読者層においては、記述内容のコモディティ化が起きている気配すらある。
いまや、科学する麻雀の読者にとって、最上級レベル到達への関門となっているのは、科学する麻雀で取り上げている、対リーチの押し引き判断、ベタオリ技術、そして、リーチするか否かの判断では無くて、鳴きを意識した牌効率や、点数状況判断、リーチ以外への放銃、リーチがかかる前の段階の押し引きの判断、などの技術になりつつある。そういった面への解析を作者に期待している読者も多かっただろう。本人は仕事が忙しくなかなか研究が進まないのだろうけれど、読者にはそんなことは関係ないのだから。
* * *
繰り返すが、科学する麻雀の結論を導き出すための手法自体はおそらくは正しい。考え方としては実に理にかなっている。ただ、結論を導き出す計算の過程で多くの省略した要素があるのも事実で、結論が正しいかどうかは疑問が残る。細かい条件わけの不足や、着目している麻雀スキルの範囲が狭いため、自分で足りない部分をフォローしていかなければならない面が多いのだ。
そうしていかないと、少なくとも麻雀ゲームを作る立場では、今後さらに強いプログラムを作るのは難しい。また、実際ゲームに組みこめるための思考速度を満たすためには、計算量の関係で、もっと違うアプローチが必要となってくることも多い。そういった面で、当の本人である作者達が、新たな取り組みにあまり積極的でなく、2匹目3匹目のドジョウをねらった安易な金儲けに走った出版を繰り返してるのは残念に思う。
| 固定リンク
| コメント (2)
| トラックバック (1)
現行のアルゴリズムに構造的な限界を感じつつあるのでVer0.9.0系列として作り変えるつもり。
とりあえずやりたいのは以下。
- 開発環境をTurboC++ExplorerからVisutal Studio2005に。
- アルゴリズムの高速化
- GUI作り変え(牌画を大きくetc)
- 大きすぎるクラスの分割
- メンバ変数のカプセル化
- マルチコア対応
- 一人麻雀や牌譜解析プログラムとの統合化
- プラグインAI
- 赤ドラ対応の準備
- ソース公開しても恥ずかしくないように。(本当に公開するかは未定)
ただ現行のソース規模は、まったり麻雀の本体だけで17K行程度ある。牌譜の統計解析とか一人麻雀とか入れるとさらにでかい。本当に作り変えが現実的か疑問に思う部分もあるので別の方法をとるかもしれない。
まずは、アルゴリズム高速化が成功するかどうかを検証してみて判断する予定。
| 固定リンク
| コメント (4)
| トラックバック (0)
まったり麻雀のVer.0.8.20を公開します。
コンピュータによる、牌危険度指数と、押し引き判断を表示できるようにしました。
ダウンロードは左のダウンロードボタンをクリックしてください。
自分の打牌の番で、メニューから選ぶようにしたけど、もっと良い方法があったかもしれない。
例えば、「打牌のとき、CNTRL+クリックで打牌すると、打牌後にコンピュータのベタオリ判断と異なる場合は、メッセージを出す」とかにしたほうが、実力向上の練習には良いかもしれない。
| 固定リンク
| コメント (2)
| トラックバック (0)
吉田さんをはじめ多くの方から指摘されている牌画が小さすぎる件について、今のことろ天鳳の牌画を利用して作り直すことを検討している。
牌画の権利関係についてはC-EGGの天鳳の管理人の方から直接メールで許可をもらっており問題なし。
(画像の改造許可も得ている)
ただ、天鳳のサイトで公開されている牌画には対面の捨て牌や、両サイドの手牌が立った状態の画がないのでそれについては、自分で作成していて一通り作った。
それをどのようにレイアウトして、1024x768に収めるか、Windows標準のペイントソフトを使って牌画を並べ替えて検討しているところ。
作業の優先度的にはVersion0.8ではなくて、0.8とは別に作り直しているV0.9で公開する予定。
Version0.8系列は後3回程度のバージョンアップを予定していてそれぞれ以下の機能を修正する予定。
ベタオリ評価値表示
一人で4人打ち機能
点数状況判断アルゴリズム修正
| 固定リンク
| コメント (0)
| トラックバック (0)
最近のコメント