[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 15:32 / Filesize : 253 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

おまいら最強の麻雀プログラムしてみろよ Part2



1 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 21:47:50 ]
めざせ最強の麻雀プログラム!
層の薄いこのカテゴリーなら、将棋やオセロよりも
ずっと簡単にその地位を手にいれられるぞ!

131 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 14:04:43 ]
点数計算が出来れば、ホスト部分は簡単に作れると思うよ・・・

132 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:08:19 ]
>>131
入出力が単純でもルールを自分で定義してもいいから、早く作ってくれ。

133 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:12:49 ]
NGワードと聞くと某クイズ番組を思い出す俺はどうしたら・・w

134 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 14:16:18 ]
高速化のために、連続ポンなどで手番が回ってこなければ、ホストからの送信は無しにして
自分が動かせる(捨て牌やポンなど)ときのみデータを送信するようにした方がいいな
オプションで残り牌数や、他者の状態を聞けるようにすればいいので

135 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:22:50 ]
>>134
賛成だ。早く作ってくれ。
書き込むのは出来上がってからでいいよ。

136 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:33:29 ]
今日、国士無双13面待ちを達成した俺様が見学にきましたよ。

137 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 15:01:34 ]
>>136
待ちを達成したってことはアガれなかったのね

138 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 18:48:50 ]
じゃあ国士だけ狙うDLL書くとするかw(ウソですすいません)

139 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:21:52 ]
マンガン縛り(7700は8000で)DLL
なんて作ったら面白そうだな



140 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 19:58:06 ]
山と手牌を入れ替えるDLLはなしだろうか・・・

141 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:02:19 ]
それなら爆弾DLLとか千鳥DLLとかできるじゃないかw

142 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:54:45 ]
天和仕込んだらちゃんと天気の話題を振るんだぞ

143 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:24:48 ]
賽の目は2の2でw(そろそろ止めようw

144 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:39:03 ]
いつのまにここは哲也スレになったのか…
2の2失敗したら自主的に引退するAIキボンヌ

145 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:45:00 ]
>>138(俺)、>>139は使い道は有りそうなんだけどな

146 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:56:28 ]
>>144
PC「ボウヤ オレハ ジュクカラ キエルゼ」
そのAI最高なんだけどw

147 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 22:09:12 ]
九蓮上がったらマイドキュメントとデスクトップのファイルを全て
nyに放流してからHDDフォーマットしないと駄目だろ

148 名前:349 mailto:sage [2007/07/29(日) 22:56:51 ]
>>123
遅レス、他家のフーロが見えて、誰から鳴いたか見えるようになっている。
これで分かる。

149 名前:349 mailto:sage [2007/07/29(日) 23:03:22 0]
MJSimはジャン卓そのものがデーターとなっている感じ。

>>116
いいね〜〜、ぜひ実装して検証してみたい。AI作るのが先だけどね。

>>118
データーアクセスのための、基本ルーチン出来ると思う、と言うかあります。
公開してみようかな。



150 名前:デフォルトの名無しさん [2007/07/29(日) 23:32:36 0]
おまいら基礎が大事だ 役、基本点がもとめられずに思考できるかよ
共通ルーチンを上げてくれ

151 名前:349 mailto:sage [2007/07/29(日) 23:43:51 0]
>>150
>おまいら基礎が大事だ 役、基本点がもとめられずに思考できるかよ
私なら出来るぞ、できないのか?

>共通ルーチンを上げてくれ
君の望むルーチンは皆無だ、諦めろ。

152 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:53:06 0]
>>150
ストレートに言おう。
何かが出来なければXXができないと、いいわけを言う人間は、もっとも無能な人間が言う言い訳だ。
他のせいにして自分がさも出来るのに、他のせいで出来ないという見苦しい言い訳だ。
他人のせいにすると楽だからな。

世のAIの殆どは、役も基本点も全然無いか、極一部だけ持っているに過ぎない。
それでも、立派にAIは作製可能である。

153 名前:デフォルトの名無しさん [2007/07/29(日) 23:53:17 0]
>>151
ツモ切りとか、ランダム打ちは出来るけどさ・・・
点数出せなきゃ最強のやつは作れんよ 
動くやつは誰でも作れるが

154 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:59:41 0]
>>150
アドバイスをやろう。
役はリーチ、ピンフ、タンヨウだけでやれ。
ついでに役牌を考慮しただけで、立派なAIが作製できる。
もちろん符も計算するな。
もしこれで、君のAIが出来れば、立派に動作する。
みんなも感心するAIになる可能性が有る、すぐ作れ。

155 名前:デフォルトの名無しさん [2007/07/30(月) 00:01:03 ]
MJSimのAIより、東風荘第一の点数を正確にもとめることが先決


156 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:01:13 0]
>>153
言いから動くやつを作れ!
最強はそれから考えろ!!!!!!
これ以上、最強を言い訳にするな!!!!!見苦しい!

157 名前:349 mailto:sage [2007/07/30(月) 00:02:37 0]
>>155
一歩も踏み出せない君は、何をやっても人生の負け組み確定だ。

158 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:03:22 ]
>>152>>156>>157
無駄

159 名前:デフォルトの名無しさん [2007/07/30(月) 00:23:41 ]
おまいらここみてくれるか?
メンゼンでの役の確率が計算してあるがそれぞれ一致してない・・・
役を正確に求めることと、その確率を求める事は困難であるといえると思う
複数人での一致を確かめて進めるべきだと思う


www.ix3.jp/hiii/02mahken/1-02yaku.htm

majanjan.com/4/45/

homepage2.nifty.com/rally_tate/mj/3-9.htm



160 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:29:05 ]
アドバイスにもう一つ。
正確な点数計算はとても複雑で計算時間も掛かる、君が望むような速度は不可能だ。
もちろん、魔法のテーブルなど現在の環境では不可能だ。
結局は限定した内容で最良を考えるしかない。
この、限定された環境で最良を考えるのが楽しい。

君はテーブルをガンガンスペックダウンしたではないか。
何故、点数計算はスペックダウンしないのだ?
最強など誰も作れない、でも、作ってみる事がいい。
MJSimのサンプルAIを理解して、改良が出来れば。
それで立派に麻雀AIが作れるようになる。
必要ならアドバイスもしよう、説明もしよう。

・・・・うぐ、上で349って出てしまった、バレバレ orz

161 名前:デフォルトの名無しさん [2007/07/30(月) 00:31:07 ]
例えば、こんなに違う

七対子
3.2%  (ひいいの麻雀研究)
2.4% (勝ち組の麻雀 理想雀士をめざして)
11.7% (麻雀を科学する 数理と確率による麻雀の必勝法)

ジュンチャン 
0.35%  (ひいいの麻雀研究)
0.4% (勝ち組の麻雀 理想雀士をめざして)
0.05% (麻雀を科学する 数理と確率による麻雀の必勝法)



162 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:31:13 ]
>>159
まったく思わん。
違ってて当然、理由も有る。理解できないだろ?

163 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:32:06 ]
>>159
で、だから何?お前が指摘すれば

つーか、ウンコな指摘しかできないウンコさんが
いなくていいから出て行ってもらえる

164 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:33:40 ]
麻雀知らない奴に言われてもねぇ…寝言は寝てから言えとしかアドバイスできないな〜

ちなみに>>159は今後コテとトリップ付けろよ、NG指定しやすいから。

165 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:34:38 ]
>>160
でも、テーブル方式は爆発しない方法で作れるよ

166 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:34:55 ]
>>161
データーを取る環境と母体が違うから、違ってて当たり前。

167 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:35:55 ]
>>165
理解してまつ。

168 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:35:58 ]
コテは「宇宙麻雀雀士」ってしろよ、馬鹿にしやすいから

169 名前:デフォルトの名無しさん [2007/07/30(月) 00:38:17 ]
数字19、2〜8、白発中、東南西北のコーツとトイツは同一視して
データベースを作れば5Mバイトしか食わない

例外として、国士無双、緑一色、四槓子の判定をやって
三槓子、チートイツ、三色同刻、場自風の役の加算を求めてデータベースを引けばいい



170 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:40:40 ]
宇宙麻雀雀士さん(君?)、君のテーブル議論は、みんなにいい刺激になったんだよ。
本人は理解していないかもだが、分かる人には分かっていた。ありがとう。

171 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:41:03 ]
>>169
もういいよ、ウザイだけだから。

ソースも出さずに、使えもしないウンコ仕様だけ
書かれても、スレが汚くなるだけだから

172 名前:デフォルトの名無しさん [2007/07/30(月) 00:41:54 ]
MJSimだって正確な点数を計算しているかどうか分からないじゃないか
もし間違っていたら、強くないのに強いと判定されてしまう
確認のために複数人の一致は必要

173 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:45:33 ]
   〃∩ ∧_∧
   ⊂⌒(  ・ω・)  うん そうだね
     `ヽ_っ⌒/⌒c     
        ⌒ ⌒

174 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:46:59 ]
>>172
ついに他人の悪口を言い始めた。

だから、おまえもMJSimを動作させて、お前が言う
「複数人の一致」のために点数計算の確認して
やれって言ってるんだよ。

それが出来ないなら、このスレに2度と来るな

175 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:50:42 ]
>>169
もっと効率いい方法があるだろ。

そもそも、>>169の方法だと
大して多くは無いが無駄だらけで気分が悪い

176 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:55:38 ]
>>175
俺、役確定や上がり確定じゃなくて、手分析でテーブル使うぞ。

177 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:00:28 ]
>>176
オレもそうだよ。ていうか役判定にだけテーブル使うなんて
もったいなさすぎ

178 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:01:41 ]
>>173
かわいいな

179 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:04:04 ]
>>177
やっぱりそうか、考える事は同じだな。
しかしだ、実装で差がつくと思う。 どんな実装になるか興味があるな。



180 名前:デフォルトの名無しさん [2007/07/30(月) 01:07:11 ]
数牌のメンツ分解と役判定を高速に出来れば、次のように手が求められます

14枚の牌を調べ、役が出来ていたらbreakして、
役が出来ていないなら見えていない牌の中から、ランダムに一枚加えて
どれか一枚を捨てたら、役が出来るならその駒に役の得点を加算する

さらに、もう一枚ランダムに加えて、どれか二枚を捨てたら
役が出来るなら、その駒たちに役の得点/2を加算する
これを終局まで試行する

そして制限時間がある限り、はじめからやり直して得点の加算を続ける
すると、役が揃いやすい捨て牌に得点が集まります

181 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:10:04 ]
>>180
糞仕様の話はいらないから早くソースあげてね。
それに、早くMJsimに実装してくれないか?

182 名前:デフォルトの名無しさん [2007/07/30(月) 01:11:48 ]
ところで、みんなのとこのルールでは ダブ東の頭は4符?2符?

183 名前:デフォルトの名無しさん [2007/07/30(月) 01:15:15 ]
実は、プログラミングが苦手なんだ
数牌のメンツ分解数も、単独では正解にたどり付けなかったかもしれない
自分の解答よりも、他人の解答の正解率が高いだろうから
だれか飜数計算を上げてくれないかと思っているところである

184 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:17:11 ]
苦手があるのはいい事だ。克服する喜びがある

185 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:18:07 ]
>>183

ついにお前の本音が出たな。
俺もそう思ったよ。

つまり、お前がプログラム出来ないから、お前の糞仕様に
付き合ってくれる奴を探して、このスレを荒らしていたんだろう

つか、プログラミング苦手なら、このスレに来るなよ

186 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:19:44 ]
ルールは知らん。プログラムは苦手。なんでこのスレにいる?

187 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 01:21:05 ]
>>154 >>160
言いますね〜(笑)アドバイス的確すぎやしませんか。
相当麻雀AI作成に熟知しているようにお見受けします。
私もアドバイス欲しいくらいですよ。

私もAIを組みましたので、牌譜あげてみます。
まだ鳴きも降りも教えてないのでドヘタゼンツ君ですがね・・・
ttp://uproda11.2ch-library.com/src/1118570.zip.shtml

188 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 01:22:17 ]
>>187
DLパスは mjscore です・・・

189 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:23:56 ]
1118570.zip DLKeyが一致しませんでした



190 名前:デフォルトの名無しさん [2007/07/30(月) 01:28:30 ]
>>185
いや、飜数計算は基礎なんだよ
ここをおろそかにしたまま、各自が独自のMJSimの思考エンジンを作り出すようになっては
たまたま、MJSimで計ったら強かった弱かったってなってしまうんだよ

191 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:28:44 ]
DLできたよ

192 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:30:46 ]
>>187
見ました、ずいぶんまともなAIですね。素晴らしいです。
聞いちゃうけど、オリジナル? サンプルの改変ですか?
答えたくなければ答えないでOKです。
もし私で、答えられる事が有ったら何でも聞いて下さい。

193 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:31:09 ]
>>190
は?なんだそのウンコな反論は。

誰も、飜数計算をおろそかにしてないい。

お前の力で早くMJSimの飜数計算が正しいor
間違っていることを証明しろって言ってるの

出来ないなら何も書くな、糞野郎

194 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:36:02 ]
ん〜、極端に間違っていない限り、同じコードで採点するんだから問題ないだろ?
それとも、それで差が付くほどの立派なものを組んだのか?
後々問題になるだろうが、それほどのものは出てないな

195 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:40:00 ]
ちなみに、サンプルを強くするための一番簡単な方法論に。
もう1段検索を深くすることです。
それと、見えている牌から、見えない牌を割り出し、それの確率を入れると
もっと強くなります。

196 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:46:53 ]
サンプルで疑問点があれば、短文でなら説明します。
時間が少ないので、すぐ庭答えられないかも。(出来る範囲で)
AIの性格付けも、単純であれば比較的楽に出来るかも。
明日休みだけど、フラフラでもう寝まつ・・・Zzzzzzzz

197 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 01:48:14 ]
>>192
完全オリジナルですね。いくらか下積みがあって、牌譜化環境等もできあがってて、
最近ここが盛り上がってきたので、作ってたプログラムをいくらか形整えて
打たせたのが>>187です。

>答えられる事が有ったら何でも聞いて下さい。
ではお言葉に甘えて。
>>187のAIは、14枚の牌形から、
打牌候補を切り、1枚ツモり、打牌候補を切った時点で、評価関数を呼び出して
元の14枚牌形から打牌を選択しています。所謂一手先読み、になります。
これをN手先読みにすることが可能なのですが、現状の処理スペックだと
一手先読み・・・一回の打牌選択あたり0.001秒
二手先読み・・・一回の打牌選択あたり約2秒
となってしまい、現実的な処理時間では二手先読みが限界となっています。

そこで、単刀直入に申し上げますと、>>192氏のAIの性能(できればその手法も)
断片的でもいいので教えていただきたい。
サンプルでは、ターツ毎の評価をしていたようですが、今作成中のAIの路線も
その方針でいくのでしょうか?

198 名前:デフォルトの名無しさん [2007/07/30(月) 02:15:19 ]
>>197さんへ、>>180のようにやれば、最終手までの読みが出来ます
捨て牌を選んで、それごとに残っている牌からまたツモるとやっては分岐数が多すぎます
>>180なら分岐は無いです すぐに終盤になります


199 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:17:34 ]
>>198
まだ、お前の糞仕様を薦めてるのか。
お前の糞仕様の方が分岐が多いぞ。
それも気付かないのか、糞野郎



200 名前:デフォルトの名無しさん [2007/07/30(月) 02:20:57 ]
もし分岐で読むのならば、手の優先順位を決めておき、MTD法がいいと思いますよ

概要としては、
f=予測値を決めておき、それより評価が良ければ、その枝はそこで読むのをやめ上位ルートへ戻ります

fを超えるのが無かったら、もっとも評価の高い手の得点を上位ルートへ戻します




201 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:25:51 ]
>>200
だからその分岐にどれだけ負荷かける気だよ。
「麻雀」と「プログラム」知らない奴が思いつきで書くなよ、糞野郎が

202 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:26:18 ]
別人ですが、参考になれば
ネックは4シャンテン前後なので塔子で分割してなら、それ用の評価関数を用意。
(例:単騎<辺塔子<間塔子<両塔子<対子<刻子<順子)
で、面子候補それぞれに対して加算して求めてましたね。4シャンテンで最大100通り行くかどうか位
(※ただし、面子候補に単騎が二つ以上ある場合は別の方法にしてました。)
これだけだと不満なので、残り枚数や色、三色などの評価もしたい所ですけど

203 名前:デフォルトの名無しさん [2007/07/30(月) 03:41:10 ]
4シャンテン以上なら枝もクソも無いだろw
普通に聴牌目指してひたすら不要牌切るだけ
相手の聴牌気配とか感じるのはそこまで出来た後の話だ

204 名前:202 mailto:sage [2007/07/30(月) 04:08:07 ]
>>203
麻雀知ってる?

205 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 04:34:59 ]
>>204
4シャンテン以上、ということはほとんどの状態で
孤立牌・不要牌が複数あるので、場風と手牌の偏り具合から
機械的に(=別の評価関数で)捨て牌選択が可能です。

というか、まずそれなりのものを作ってから順に次に取り組めよ

206 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 04:39:06 ]
とりあえず何でも作って
土台を完成させろよ。 話はそれからだろ。

七対狙いオンリーの思考ルーチンでも
対戦用ライブラリのAPIに必要なエッセンスが
半分以上つまってんだからさー

207 名前:202 mailto:sage [2007/07/30(月) 04:57:17 ]
作ってあるけど?
これのメリットは手役の嗜好を作りやすい事。最強かと言われると・・・
汚いソースだし書き換えるの面倒だから作り直してるさ〜

208 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 14:43:19 ]
>>197 まずは、下のクラスを見て欲しい。

//========================================================================
// 手牌分析クラス
//========================================================================
class CTatsu : public CBase
{
public:
//
// 評価用データ Analyze(void); で設定される
//
bool m_FuritennF; // フリテンフラグ
int m_TenpaiNo; // 後幾つでテンパイ
YAKU m_YakuType; // 現在の役タイプ
int m_YakuNo; // 役の藩数
int m_YakuNotoN; // 役まで後N枚の役の藩数
int m_TurtuNo; // ターツの数
int m_MachiNo; // 牌の待ち数
int m_TotalPoint; // 合計ポイント
int m_outHai; // 評価するときに排除した牌
int m_AtamaNo; // 頭の数
int m_AtamaHai; // 頭の牌番号
UCHAR m_MachiHai[PTBLMAX]; // 待ち牌データ
int m_tehaiP[PTBLMAX]; // 手牌のポイント
private:
//
// ターツ評価用データ
//
CMentu *m_pMD; // 親メンツデータポインタ
int * m_ptehaiNAnko; // 元の手牌   コーツを取り除いてる
int * m_ptehai; // 評価する手牌、面子と頭を取り除いてる


209 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 14:43:58 ]
public:
void init(); // 初期化する。
int Analyze(CMentu *pmentu,int ahai); // ターツ評価
void AnalyzeNoHai(int no); // 数字牌の分析
bool tehaiCompar(CTatsu *pTD); // 手牌の優劣を比較、自分が低い:true, 以外:false
bool tehaiComparTenpai(CTatsu *pTD); // テンパイ時の手牌の優劣を比較
void TenpaiMachiHai(); // テンパイの時の待ち牌作成
bool chkFuriten(); // フリテン試験
virtual bool chkThis(); // 自己オブジェクトの試験
virtual void DispData(); // データ表示
//
// 役の分析
//
void AnalyzeYaku(void); // 役の分析
bool AnalyzeYakuHai(void); // 役牌 場風、自風、白発中
bool AnalyzePinfu(void); // ピンフの分析
bool AnalyzeTanyou(void); // タンヨウの分析
bool Analyze34Anko(void); // 3アンコ4アンコの分析
bool AnalyzeToitoi(void); // トイトイの分析
bool Analyze112233(void); // イーペーコ
bool chk123(int hno); // イーペーコイーシャンテン試験
bool AnalyzeChitoi(void); // チイトイの分析
bool AnalyzeKokushi(void); // 国士の分析

private:
int getTenpaiNoAnalyze(); // テンパイまでの必要牌計算
int getKey(int * st); // キーの作成
};




210 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 14:51:28 ]
class CMData : public CBase    このクラスは大きいのでパブリックデーターのみ出します
public:
char m_BlockNo; // ブロック番号 −1:空き 0〜:ブロックNO
CHai m_tehaiw; // 面子頭引き後の手牌
int m_TotalPointAll; // 合計ポイント
int m_TotalPoint; // 合計ポイント
int m_TotalPoint3; // 合計ポイント
int m_TotalPoint2; // 合計ポイント
char m_MachiHaiNo3; // 面子牌の待ち種類数
char m_MachiNo3; // 面子牌の待ち枚数
char m_MachiHaiNo2; // 面子牌の待ち種類数
char m_MachiNo2; // 面子牌の待ち枚数
char m_AtamaHai; // 頭牌が有る時の牌NO
// 解析結果データ
char m_outhai; // 排除された牌
int m_AType; // 分析タイプ
char m_TenpaiNo; // 後幾つでテンパイ
char m_TenpaiTsNo; // シャンテンに対する余分のターツ数
bool m_FuritennF; // フリテンフラグ
YAKU m_YakuType; // 現在の役タイプ
YAKU m_YakuTypetoN; // 役まで後N枚の役タイプ
char m_YakuNo; // 役の藩数
char m_YakuNotoN; // 役まで後N枚の役の藩数
char m_TurtuNo; // ターツの数
char m_T_XX_n; // リャンメンの数
char m_TX_X_Xn; // 2カンチャンの数
char m_TX_Xn; // カンチャンの数
char m_TXX_n; // ペンチャンの数
int m_AtamaNo; // 頭の数
int m_tehaiP[PTBLMAX]; // 手牌のポイント
UCHAR m_MachiHai3[PTBLMAX]; // 面子待ち牌データ
UCHAR m_MachiHai2[PTBLMAX]; // ターツ待ち牌データ

211 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 15:06:29 ]
上のクラスを見れば、どのような分析をしていたか想像がつくと思います。
見れば分かる通り、分析のし過ぎではないかと思うほど分析しています。
これは当初、初めてAIを作る上で人間の考える通りに動くAIが目標でしたから。

探索ツリーは
14枚の牌

↓-----------------------↓
構造1・・・・・・・・・・・・・・・・・・・構造N

捨てるパターンの数
↓-----------------------↓
A牌捨て・・・・・・・・・・・・・・・・・N牌捨て

仮定のツモ牌
↓-----------------------↓
14枚の手牌1・・・・・・・・・・・・・14枚の手牌N

↓-----------------------↓
構造1・・・・・・・・・・・・・・・・・・・構造N

捨てるパターンの数
↓-----------------------↓
A牌捨て・・・・・・・・・・・・・・・・・N牌捨て

これでようやく一手先読み。

のような探索ツリーです。非常に込み入った構造で尚且つ、分析結果がけた違いに増えます
1つの手配の分析は、総てのターツパターンを出します、その数は数十から200を越える時も。
例えば 2334 は 234と3 23と34 24と33 の3種類に分類。(とても簡単な例)


212 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 15:20:31 ]
添付のDummy1.dllは1手先読みだけのAIです、サンプルソースAIと同じ読みの深さしか有りません。
先読みが浅いのでスピードが速いく、それなりに強いのではないかと思います。

初めて作ったため、いろいろな試みをしています。初盤にペンちゃんや13のようなカンちゃんを
嫌うようにしてたり。私が思うような牌の切り方に近いようにしています。
その結果、ソースは膨大となり各所にバグがゴロゴロしているのではないかと思います。
雀譜を見れば分かると思いますが、面白い切り方をしたり、とんでもない牌を切ったりします。
まだまだ未完成です。

本ちゃんは二手先まで読んでいました、3手先までも作ったのですが、二手先とほぼ同じ感じです。

213 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 15:37:39 ]
手の役について
役は、上にあるように、ピンフ、タンヨウ、3アンコ、トイトイ、イーペーコ、チイトイ、国士
までしか分析していません。しかし、後幾つで役が確定するかも分析しています。
難しい所の一つに、役を目指すとフリテンが増えてしまうのが悩みどころでした。
最終的な手の評価関数はそれなりなのですが、最適化までには至らず、残念でした。

先読みについて
 先読みが深いほど強いと思っている方もいるかもしれませんが。それは間違いだと
私の直感が宣言しています。それなりに理由もあるのですが、まだ、説得力があるほどの
論理的構築ができていません。参考程度に検討してください。
何処までの先読みがベストなのかは検討の余地が有ります。妄想では3手先も有れば
十分ではないかと思っています。

214 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 16:09:16 ]
分析と評価式
サンプルソースの様な手牌構造を理解せずに、評価関数で優劣を決める方法は
過去の物です。いろいろ欠点が有ります。
例えば、122334 の場合1が来たら4を捨てるのですが、中の数字を好む式だと
1を捨ててしまうかもしれません。(サンプルAIは4を捨てる)
例えば 2334は234の面子を優先して3を捨ててしまうかもしれません。
23と34の2ターツと考えた方がいい場合もあります。
例えば12のペンちゃんでテンパった時、有効牌が1枚しかなかったら、場合によっては
12を捨ててシャンテン数を下げても持ちを変えたほうが上がりには速いはずでしょう。
(簡単な例)

等々いろいろ有りますが、手配の構造を理解していないと解析が出来ません。
次世代AIには、手牌構造を分析するのが必要ではないかと言えます。

215 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 16:25:47 ]
作ろうとしているAI
 問題は時間なのですが・・・、過去のAIは>>197のご指摘のターツ毎の評価(分析)が
主であるかもしれません。
 次回は、人間の様にではなく、最速に速く上がれるAIを目指します。これは
最高に早くテンパルとは意味が違います。分析方法ですが、前はターツが主では
あったかもしれませんが、今回は牌の構造に焦点を当てたいと思っています。
あいまいな表現で申し訳ありません。以前のAIの分析内容を見て分かる通り
またも、複雑な事をやろうと画策しています。
 作った結果、過去のAIに負けるかもしれませんが (大汗
振り返ってみて、過去のAIはいい経験になっています。いや、あの時はとても苦労した
のですが、結果に落胆した・・・・orz、  今度は己に勝つ!

216 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 18:27:03 ]
>>349
詳細な解説ありがとうございます。参考になることは数多いですが、その中でも
>先読みが深いほど強いというわけでもない
という示唆は非常に興味深い。

ara.moo.jp/mjhmr/statall.htm
あら氏のシミュレーション結果(↑)を見ると
先読みが深いほど好結果がでていますよね。
すると、349氏のAIにおいて、先読みがさほど影響を及ぼさない原因に
評価関数の指向が関与しているのではないでしょうか。

というのはたとえば
56m2367p3488s東南西北
という手牌があったとして、これをターツ毎評価にぶち込んだ場合
「役に平和がつく(有力だ)」という評価ができると思います。
でも実際、平和がつくと確定するのは、和了形にして4手先、
テンパイ形にして3手先になります。
つまり手牌自体は1手先までの形しか予想していないけれど、
ターツ毎評価によって、部分的にはもっと先の形まで予想している、ということになります。
その結果、手構造自体の先読みの意義が薄れているのではないでしょうか?
もちろん、そうなるのは評価関数が優れているためでしょう。

217 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 18:32:25 ]
ちなみに、>>211の一手先読みでは一回の打牌決定あたり何秒くらいで打てます?
私の場合一打0.01秒程度なのですが、これだけ込み入った分析をした場合、やはり
いくらか時間をくってしまうのでしょうか?

218 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 18:53:32 ]
>>134>>135
たいして高速化にもならんとは思うが、一応賛成。l

で、MJexeIO.DLLという東風荘をプログラムから操作するDLLと同じ関数にしたらどうかな。
東風荘でも動かせるしね。

関数仕様はこれ。
ttp://www.interq.or.jp/snake/totugeki/MJexeIODLLfunc.htm
まずは、全部は必要ない。

MJSimのデータ仕様は、無駄が多いし、わかりづらいと思う。
例えば、対戦相手の手牌のフーロしていない部分とかも見えるが(当然無効だが)、そんなの必要ない。


219 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:21:15 ]
>>218
相手の手牌等のデーター領域はあっても中身は0で見えないようになってる。
卓で見える物しか見えない。



220 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:32:09 ]
>>218
インターフェース用DLLを誰かが作ればいいんだけどね。私は時間がとても・・・

MJSimで、1つのAIに、2つのAIを繋げて動作を比較するツールを作ってる。
これ公開するから、参考に誰か作ってくれないかな? と期待。

MJSim
 ↓
動作比較DLL
 ↓ ↓
AI1  AI2 (読み込まれた2つのAI

221 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:38:29 ]
ルールは「まうじゃん」
ホストも「まうじゃん」
じゃなかったんだけ?

222 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 19:56:28 ]
>>217
時間については計算したことがありません。どの様に算出しましたか?
ダミーなら多分0.01以下ではないかと思います。
MJSimの実行が1秒間に100回以上しているので。
また、本ちゃんの二手先でも、けっこう速いのです。
手が染まっている時は遅いのですが、そうでない時は
ダミー並とは言いませんが、早いです。
分析する必要があるのか無いかは、事前にチェックされ枝狩りされています。
手配の状況でスピードは数十倍以上違い産ます。

分析の種類が20-30以内の時と、200近くの時のその先の枝の数を想像してみてください。
極端に解析時間が違います。

読みについては後でまた。

223 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 20:18:52 ]
>>222
切り番時、14枚の手牌+周辺情報(場に見えている枚数、ドラ等)を与えて
打牌選択関数を呼び出してから、その結果が出るまでにかかった時間を計ってます。
実質1手打つのにかかる時間ですね。ただしリーチ後のものは除いています。
ちなみに今計った所、一手あたり平均0.0087秒でした。

2手先で十分早いとなると相当なものですね。私の場合平均2秒ほどかかってしまいますから・・・
枝かりが甘いのかなぁ・・・

224 名前:aa ◆BmUbLWewsM mailto:sage [2007/07/30(月) 20:27:45 ]
>>222
には、説明不十分でした。
>分析の種類が20-30以内の時と、200近くの時のその先の枝の数を想像してみてください。
>極端に解析時間が違います。
データ数がそのまま時間ではないです。
データー数が多いと言う事は、不必要な分析がどんどん増えてくるのです。
説明は難しいのですが、同じ構造を何度も見つけてしまうのです。
そのため、重複排除やその他の時間がかかります。

おっと、>>223の時間はダミーのですか?
計測ありがとう。

225 名前:202 mailto:sage [2007/07/30(月) 20:46:41 ]
AI作りの基本は自分と同じ打ち方させたい、ってのがあって・・・
そうするとどうしてもメンツ構成(塔子や単騎を含む)の分析が必要になるんだよなぁ
でも、もしかすると牌効率最優先の方が強いかも分からないので、今それをどうしようか
考え中・・・

226 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 21:02:37 ]
>>216
>あら氏のシミュレーション結果(↑)を見ると
シミュレーションの0−3の違いはなんでしょう?
探したのですが見当たりません。

227 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 21:09:26 ]
>>223
失礼、計測した平均時間は私のやつです。

0〜3は、それぞれそのシャンテン数未満のときに和了形まで予想して
点数計算を行う。それ以上の場合は簡易計算で済ますというものらしいです。

詳細は
ara.moo.jp/mjhmr/simulation.htm

228 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 21:31:59 ]
>>216
質問です。
>先読みが深いほど好結果がでていますよね.。
先読みが深いほど好結とは、どの部分を指しているのでしょう?
期待値の値ですか?

私はきた位置の計算自体に疑問を感じているのです。
もし意見が違うのであれば、話してみたいです。

229 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 21:34:02 ]
×きた位置
○期待値



230 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:05:19 ]
太らない程度の正しい食事と 適度な有酸素運動、そしてマッサージ
これを毎日徹底した自己管理で行えば Bカップ程度なら3年で育つ

231 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:07:17 ]
乳について語ってるのは誰だ!!

俺はCもあれば十分だと思ってる。Fなんざぁただの脂肪の塊としか思えん。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<253KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef