おまいら最強の麻雀プログラムしてみろよ!!
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001桜井章一
NGNG0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG父「詳細キボーヌ」
母「今日はカレーですが、何か?」
兄「カレーキターーーーーーーーー」
妹「キターーーーーーーーーー」
姉「カレーごときで騒ぐ奴は逝ってヨシ」
母「オマエモナー」
父 --------終了-------
兄 --------再開-------
妹「再開すなDQNが!それより肉うpキボンヌ」
母「ジャガイモうp」
姉「↑誤爆?」
兄「タマネギage」
父「ほらよ肉>家族」
妹「神降臨!!」
兄「タマネギage」
母「糞タマネギageんな!sageろ」
兄「タマネギage」
姉「タマネギage厨uzeeeeeeeeeeee!!」
母「ageって言ってればあがると思ってるヤシはDQN」
セールスマン「イタイ家族がいるのはこの家ですか?」
母「氏ね」
父「むしろゐ�`」
兄「タマネギage」
妹「兄 、 必 死 だ な ( 藁 」
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGあなたがCPUに負けたら脱ぎます。もちろん引き分けじゃ脱ぎません。
0010小さな器(コピペ推奨)
NGNG●とにかく神経質で気が小さい、了見が狭い(臆病、二言目には「世間」(「世間」と言っても、一部のA型を中心とした一部の人間の動向に過ぎない))
●他人に異常に干渉して自分たちのシキタリを押し付け、それから少しでも外れる奴に対しては好戦的でファイト満々な態度をとり、かなりキモイ(自己中心、硬直的でデリカシーがない)
●妙に気位が高く、自分が馬鹿にされるとカッと怒るくせに平気で他人を馬鹿にしようとする(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けていることが多い)
●権力・強者には平身低頭だが、弱者に対しては八つ当たり等していじめる(強い者にはへつらい、弱い者に対してはいじめる)
●あら探しだけは名人級でウザく、とにかく否定的(例え10の長所があっても褒めることをせず、たった1つの短所を見つけては貶す)
●基本的に悲観主義でマイナス思考に支配されているため性格が鬱陶しい(根暗)
●何でも「右へ習え」で、単独では何もできない(群れでしか行動できないヘタレ)
●少数派の異質・異文化を理解しようとせず、あるいは理解を示さず、排斥する(差別主義者、狭量、視野が狭い、多数派=正しい と信じて疑わない)
●集団によるいじめのリーダーとなり皆を先導する(陰湿かつ陰険で狡猾)
●他人の悪口・陰口を好むと同時に、自分は他人からどう見られているか、人の目を異常に気にする(自分がそうだから容易に他人を信用できない、ポーズだけで中身を伴っていない、世間体命)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことをレコードの再生のように何度も言って変)
●たとえ友達が多い奴でも、いずれも浅い付き合いでしかなく、心の友達はおらず孤独(心の感度が低く、包容力がなく、冷酷だから)
●頭が硬く融通が利かないためストレスを溜め込みやすく、また短気で、地雷持ちが多い(不合理な馬鹿)
●たとえ後で自分の誤りに気づいても、素直に謝れず強引に筋を通し、こじつけの言い訳ばかりする(もう腹を切るしかない!)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(例:「俺のほうが男前やのに、なんでや!(あの野郎の足を引っ張ってやる!!)」)
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG前スレあるよ。
http://pc2.2ch.net/test/read.cgi/tech/1044446158/
0014デフォルトの名無しさん
NGNGどうせ堂堂巡りなんだから…。
それよりも、つくっている人がいるのか?
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGむしろVBAです。
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNGURLきぼん
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG河岸を変えてみるか
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG0027デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030247
NGNGこれでmjscoreを使った待ち牌当てゲームをつくって、
AIに解かせてみようかと。
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGpublic class Game {
private YamaHai yamaHai;
private Player[] player;
private int numberOfPlayer;
private HaiOfPlayer[] haiOfPlayer;
public void run(){
setup();
int count=0;
while(true){
int playerPointer=count%numberOfPlayer;
Hai pick=yamaHai.getNext();
haiOfPlayer[playerPointer].add(pick);
Hai drop=player[playerPointer].tumo();
haiOfPlayer[playerPointer].remove(drop);
count++;
}
}
private void setup(){
}
}
ここまで作って停滞中
0034デフォルトの名無しさん
NGNGを上がる。これこそ最強の麻雀ソフト。しかもプログラミングは簡単。
やってみれば?
0035デフォルトの名無しさん
NGNG積み込みって言うんだよね。そういうの。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG九切ってダブリー 0点
白切って七対狙い 0点+気持ち2点
0039デフォルトの名無しさん
NGNGガンガレ
0040デフォルトの名無しさん
NGNG九きってダブりーしないだろw
大三元四暗刻狙え!!
ってか点数の意味がわからんぞ…
0041デフォルトの名無しさん
NGNGダブリーはだめだから0点では?
0042デフォルトの名無しさん
NGNGなるほど、
ダブりーするプログラム・白をきるプログラムは組むなってことか…
それにしても、気持ち2点の意味がわからん…
0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG・オーラスで自分が親でない
・自分が現在トップまたはこれであがれば逆転可能
小三元(2)・ホンイツ(3)・イーペー(1)・ハク(1)・ハツ(1)・ダブリー(2)
ロンなら10翻―16000、ツモで11翻−12000の6000(計算違ってたらすまん)
金をかけてたら、死に物狂いでチュンを鳴(ry
0045デフォルトの名無しさん
NGNG一行目と反して、9切ってる結果じゃん
004644
NGNG0047デフォルトの名無しさん
NGNGチャンタってしてますか?
0048デフォルトの名無しさん
NGNG13はある人の意思に従い死んでくれと書いた。
が、それは既に過去のこと。
あれから俺は改心し頭も使う様になった。
その証拠にこれを残そう。
死んでくれ。
そう書いたときにお前は俺がうそ?と思うと思った。
だからマジで(wと書いた。
俺はお前が思っているような人間じゃない。
もし気が触れていたのなら悪かった。
謝ろう。
それじゃぁ。
004944
NGNGえーっと、チャンタ(2)があれば、ロンで3倍満、ツモで数え役満、でいいのかな?
0050デフォルトの名無しさん
NGNG>九を切る場合がないわけではない。
>・オーラスで自分が親でない
これはどーいう意味?
0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG既出です
0053デフォルトの名無しさん
NGNGぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃはははははははぎゃははははははは
0054デフォルトの名無しさん
NGNGbrainfuckの変形?
0055デフォルトの名無しさん
NGNG>・オーラスで自分が親でない
もうしわけない。こういうことを言いたかったのだが。
配牌 白白白發發發中中11223九
必ずしも、大三元ねらいである必要はない。ダブリーでもいいのではないか。
☆大三元でなくともよい条件:
・自分が現在トップまたはこれであがれば逆転可能。
・オーラスで自分が子であり、上がればその場でゲームが終了する。
でもなぁ、これも考え様かなぁ……
九、1、2と落としてもっと上がりやすい牌で待ったほうがいいのかも。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGBrainFuckって文字変えればいくらでも変なものができる気がするよな
0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGWinnyみたいに誰かパワーがあるヤシが頑張ってくれないと。
というわけでお前らがんがれ。期待してまつ。
0062デフォルトの名無しさん
NGNGやっぱりNASAのが欲しいし。
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNGでも、ちゃんとしたテンプレートがあってそれで競うのであれば……という気もするが。
配牌だけでもするサーバとクライアントのテンプレートを希望。
006564ぐらい
NGNGサーバーに求める機能
・点数計算
・配牌
クライアントに求める機能
・(点数計算?)
・(とりあえず)ツモ切り
だけでいいっす。
残りの牌が何枚だとか、そういう処理は個々人がやればいいのでは?
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNGプログラム組んだらいいだけやん
0068デフォルトの名無しさん
NGNG過去自身満々でそんなことを言った奴が何人居たことか…
0069デフォルトの名無しさん
NGNG「いきなりCPUが役満できるように
プログラム組んだらいいだけやん」
とかほざかないように、注意書きが欲しいな……
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNGさすがにそれでダブリーかけてたら負け組かと思う
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG2ぢゃんねるっていうのが既にある
0078デフォルトの名無しさん
NGNGメンチンピンの方がカッコイイですが何か?
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG「チリも積もって」って感じでよい。
そんなこといったらトリプルヤクマンが一番カッコイイもんな
0081デフォルトの名無しさん
NGNGノンタンドナドナドナとかトリプルタフマンとか。プププって感じ。
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG晒しage
0086デフォルトの名無しさん
NGNGどうせ、絶対あがれないように
プログラム組んだらいいだけだ
役満以外全部チョンボみたいにして
CPU側しか役満出ないように汁
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG今自分で作ったAIと対戦してるんだけど全然勝てない。
0089デフォルトの名無しさん
NGNG0090デフォルトの名無しさん
NGNG>>69に同意。
前スレのときは結構ROMってたのになあ。
0091デフォルトの名無しさん
NGNG0092山崎渉
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG白が何枚もCPU側に出るようにしとけ
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNG0097山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGで、その思考過程を再現すればええ。
いちばん難しいのは面前のダマテンの警戒かも。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNG考えることがあるだろ
最強ってどういうことを最強っていうんだ
ハンディキャップがあっても勝てるのか?え?こら
まずきちんと内容かけや
0102デフォルトの名無しさん
NGNG必死だな。そんなにインド洋が欲しいのか。
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGCPU側は無制限で
0105デフォルトの名無しさん
NGNGインド洋は欲しくないが
西インド洋は欲しい
0106デフォルトの名無しさん
NGNGそれがわかりゃ苦労しないと思うが・・・。
0107デフォルトの名無しさん
NGNG・不要牌の順は孤立している数牌>オタ風>残りの字牌>普通の数牌>ドラ側>ドラ
・状況によって優先順位を変更(読まれないように時々はランダムに変更)
例えば、他家の聴牌を予想したら安全牌を中心に切るように変更
・見える牌(捨て牌、晒し牌、他家が確実に持っていそうな牌)から
残りの牌を割り出し、壁や手役などの読みに常用する
・上家が牌を捨てた後のプレーヤの鳴き反応(ツモまでのタイムラグ)をチェックして手役を予測
書いてて飽きてきた。
0108デフォルトの名無しさん
NGNG4人の持っている牌の管理はサーバに一任したほうがいいのかな、やっぱり。
でもそうすると今度は他のプレイヤーの牌を覗く方法が見つかる可能性も。
むうがーー
0109デフォルトの名無しさん
NGNG何でサーバ側にあるデータを他のプレイヤーが覗けちゃうの?
0110デフォルトの名無しさん
NGNGイーシャンテンを判定するだけでも結構難しい
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGロジカルな判定は2点目だけですね。
0113デフォルトの名無しさん
NGNGクライアントサーバ型にすると、対戦できて楽しそうだね。
その場合は、プロトコルだけ決めて、クライアントは各自勝手に作るということでいいかも。
ズルのほうは気にしなていいんじゃないのかな。
もう一つの方向は、場の状況を食わせると、結果(「何もしない」「なく」「捨てる」etc.)を返す
子プログラムを束ねる親プログラムを作るというやりかたかな。
前者だと手動参加も可能になるんで個人的にはこっちでやってほしいなあ。
0114デフォルトの名無しさん
NGNGサーバは配牌などの制御を行い、自動対戦させる。
運の要素を出来るだけ排除するため、常に対戦させつづけ
途中経過という形でweb上に結果を自動で発表する。
使用言語はperlで統一。
0115デフォルトの名無しさん
NGNG>何でサーバ側にあるデータを他のプレイヤーが覗けちゃうの?
自分を他のプレイヤーと偽ることができれば牌の情報を取得できるかも……という不安が。
とりあえず、牌につけるマジックナンバーは、これでいいかい?
ソウズ 11-19
ピンズ 21-29
マンズ 31-39
東南西北 41,43,45,47
白発中 51,53,55
赤5 ソウズ・ピンズ・マンズで+64 判定時に>64な牌があったら1翻つけて-64
判定のやりやすさを考えて字牌は2飛びにしておく。
赤5はソウズなら15+64=79、ピンズ25+64=89、マンズ35+64=99
0116デフォルトの名無しさん
NGNGゲーム中はセッション張りっぱなし専用にして
セッションで識別すれば、途中で他人が偽ることなんてできないでしょ。
切断復帰とか、長期的記録するなら認証すればいいだけだし
マジックナンバーはまあなんでもいいんだけど
十進数にしてるのは人間が視認しやすいためかと思ったら赤では64足すのか。
漏れなら0-8, 9-17, ...みたいに詰めるけど、まあ別に大したことではないか。
ところで字牌だけど、1つおきだとどう判定がやりやすくなるの?
字牌かどうか意識しないでまとめて連続した数字だと塔子にする、とか考えてるなら
カンチャン待ちを考慮したときにひっかかるよ。
それに字牌かどうかは数字の範囲でわかるので、そんな細工しなくていいと思う。
#牌の識別考えるなら、漏れは同一牌表記4枚それぞれに別のIDが振られるシステムにして
#赤はルールのほうで一意に特定IDに属性が付くようにしたいなあ。
#牌の追跡もしやすいし。(というか昔そういうの作った)
0117デフォルトの名無しさん
NGNGそうやねー、じゃ、そうする方向で。
>カンチャン待ちを考慮したときにひっかかるよ。
ぐはぁ!そういえば・・・・・・あんまり意味ないなぁー
じゃあ字牌はつめて、と。
>漏れなら0-8, 9-17, ...みたいに詰めるけど、まあ別に大したことではないか
とりあえず、テストはコンソール上でやりたいので、見た目が簡単なほうで。
m=n+1;
switch(m){
case 20: m = 11; break;
case 30: m = 21; break;
case 40: m = 31; break;
}
>牌の追跡
点数計算を考えると、計算するときには
同種の牌を全部同じ識別子にしたほうが楽だから・・・・・・
ソウズ 11-19
ピンズ 21-29
マンズ 31-39
東南西北 41,42,43,44
白発中 51,52,53
1枚目 +100 2枚目 +200 3枚目 +300 4枚目(赤) +400
例えば、白4枚なら、151,251,351,451
これを得点計算の時は% 100 すれば 51,51,51,51
0118デフォルトの名無しさん
NGNGm=n+1;
switch(m){
case 20: m = 11; break;
case 30: m = 21; break;
case 40: m = 31; break;
}
はドラ表示牌をnとしたときドラ牌mはどれかのチェック、こんな方法でもいっかなぁー?
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNG0121110
NGNGアガれるときの14枚の牌から
メンツのすべての組み合わせを列挙することはでけた。
たとえば111222333は123 123 123とも111 222 333とも考えられる
後は再帰で聴牌だろうがイーシャンテンだろうがでけるけど
聴牌チェックにしても
37種の牌ですべて再帰すると純粋に37倍時間がかかるので
結構奥が深いね
0122110
NGNGもう少しいいアルゴリズムはないかと思案中
0123120
NGNGCPUがバカでいいなら一向聴を判定する必要はない。
判定するなら、完成したメンツor対子をすべて抽出してから、
一向聴の余剰牌パターン(例:孤立牌2個(くっつき待ち))に
マッチするかどうかチェックすればよい。
当然、七対子や国士は別判定。
>たとえば111222333は123 123 123とも111 222 333とも考えられる
面子の抽出を順子と刻子どっちから始めるか2通りあるよね。
>37種の牌ですべて再帰すると純粋に37倍時間がかかるので
全牌で調べる必要なんて無し。
待ちのパターンによって必要な判定はかなり減る。
0124デフォルトの名無しさん
NGNG0125デフォルトの名無しさん
NGNGイーシャンテンは次のようなチェックで簡単に出来そう。
持っている牌の前、自分自身、後ろの牌
(ピンズの5なら、4、5、6)をチェックする牌リストに追加。
で、精々15枚の牌を順次足しながら聴牌チェックすればいい。
そのとき余った牌が捨てた牌にあるようならばショボーンと。
0126デフォルトの名無しさん
NGNGでも、O(n)ならぜんぜん問題ないと思われ。
0127デフォルトの名無しさん
NGNG馬鹿?
聴牌チェックは、その2通りのどちらであろうが関係ない
面子が3つ出来てるということだけが必要
0128デフォルトの名無しさん
NGNGバカは馬鹿だけど、それはそれで重要。
面子の分解パターンを把握しておくことは
思考ルーチンの負荷軽減になる。
0129デフォルトの名無しさん
NGNGそんなことは知っている。
アガリ役の決定のときにどうせ必要かと思ってやってみた。それに
それは途中でアガリパターンが存在すればリターンするかそのまま
継続して探すかというだけの違いなのでそんなのはいつでもできる
111222333の場合
イーぺーピンフ3アンコウとかは当然ありえないわけだし
ある程度まとまりにして列挙しておいた方が
点計算がしやすいかとおもわれ
アガリパターンが二つあったときどちらを選択するかっていう問題は
点の高いほうを選択するんでしょうか?
0130デフォルトの名無しさん
NGNG111222333一一七八 九ロン
は順チャンピンフイーペーこーだし
111222333一一七八 六ロン
は三アンコウのみ
極端な例で、ドラもなんもないとき
三レンコウも一色三順もナシならね
0131デフォルトの名無しさん
NGNG符の計算は考慮してる?
56789一一一二三四八八 7ツモ
なんてときはペン7待ち扱いにしなきゃいけないわけだが。
0132デフォルトの名無しさん
NGNGそれに点数計算はサーバ側でやるのがりそう・・・といってみるてすと
0133デフォルトの名無しさん
NGNG鯖は当然やらなきゃならないけど、
点数計算ができないプログラム=麻雀ができないプログラムじゃん。
ルールを効率よく処理する(はずの)具体的なロジックの提示は歓迎だが、
麻雀の当たり前のルールを偉そうに書くアホがいるのにはうんざりだ、
っていう趣旨なら同意。
0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG当たり前のルールすら知らなそうなわけだが。
こりゃ先が長えわ。
0136126
NGNG当たり候補は1234二六七八九になって、
そのうち4メンツ2ジャントウになるのは六九、
六と九をくっつけたとして
1をトイツに見る、2をトイツに見る、3をトイツに見る、一をトイツに見る→失敗
1をトイツに見る、2をトイツに見る、3をトイツに見る、一をジュンツに見る→失敗
1をトイツに見る、2をトイツに見る、3をトイツに見る、六をトイツに見る→失敗
1をトイツに見る、2をトイツに見る、3をトイツに見る、七をトイツに見る→失敗
1をトイツに見る、2をトイツに見る、3をトイツに見る、八をトイツに見る→失敗
1をトイツに見る、2をトイツに見る、3をトイツに見る、九をトイツに見る→失敗
1をトイツに見る、2をトイツに見る、3をトイツに見る、六をジュンツに見る→成功
1をトイツに見る、2をトイツに見る、3をトイツに見る、七をジュンツに見る→成功
1をトイツに見る、2をトイツに見る、3をトイツに見る、八をジュンツに見る→失敗
トイツをT、ジュンツをJで表せば
T1,T2,T3,J六,A一
T1,T2,T3,J七,A一
てな具合に再帰で「あがったときに考えられる組み合わせ」を列挙すればいいじゃん。
符の計算とかも列挙した後に考えればいいし。
>点数計算ができないプログラム=麻雀ができないプログラムじゃん。
点数計算ができなくても、一応麻雀は打てる…… 強い弱いはさておき。
だからとりあえずは「弱くても麻雀を打てるプログラム」を目指しましょ
0137126
NGNGあと、「六をジュンツに見る」っていうのは「六七八を見つける」ってことね。
0138デフォルトの名無しさん
NGNGなんか勘違いしてるみたいだけど
点数計算ができないプログラムは
面子構成を把握できてない つまり
麻雀が打てないプログラム ということに
ほかならないんですけど・・・
なんでも再帰でやればいい という考えも
いまのうちに直しておいた方がいいです。
場当たり的なやり方ではなくきちんとね。
0139デフォルトの名無しさん
NGNG最初のプロトタイプであれば、
「白・発・中」が2枚以上あったら鳴く、
それが無かったら、鳴かずに聴牌に持っていく
オタ風いらない。白・発・中が場に3枚以上あったらいらない。
1・9字牌をどんどん切る(笑
これでも十分「ずぶの素人の麻雀」でしょ?
符が何点でー、なんて考えなくても麻雀は打てるし、
「あ、4翻以上になるからマンガンか」程度の理解でも打てるでしょ?
再帰を使おうかというのは、プログラムが簡単になるから。
人間の思考でもそういう感じで処理するでしょ?だからあげただけ。
「なんでも再帰」なんていうのは>>138の妄想でしかないからあまり気にしないで。
まあもっとも、その「きちんと」という方法を提示してくれればいいんだけど。
(分かってるけどさ。最大で4メンツしか作れないからそれ使えばいいのは)
0140デフォルトの名無しさん
NGNG点数計算(つうか役判定)のほうがウン万倍面倒。
まず役判定から作っとけ。
手牌の管理方法を先に作ってしまうと、
あとで役判定の部分でアルゴリズムの見直しをしたいときに
前者まで作り直しになる。
それに役の有無が判定できないんじゃ、CPUは和了れないよな?
「とりあえず聴牌までもってくだけの麻雀」じゃん。
0141デフォルトの名無しさん
NGNG鳴ける牌はテンパイするまで全て鳴く
↓
当たり牌が出る又は引いた時、役があれば上がる
↓
役がなければツモ切りで形式テンパイ
0142デフォルトの名無しさん
NGNG本書いてる人、だれだっけ?
ほら有名な人だよ。
初心者入門書を書いてるひと。全般的に。
んでP/ECEってハードのプログラムで
web上で詳しく雀のルーチンについて解説してたきがする。
対戦までできてたっけな。。
サイズが小さいからあまり凄く細かいことはしてないけど
参考程度にググッてみるよろし。
0143デフォルトの名無しさん
NGNG納期があるわけでもなし。
アプローチを試行錯誤するなんて贅沢は、
遊びじゃないとできないよ。
ただし、
>>139の
>初のプロトタイプであれば、
> 「白・発・中」が2枚以上あったら鳴く、
> それが無かったら、鳴かずに聴牌に持っていく
> オタ風いらない。白・発・中が場に3枚以上あったらいらない。
> 1・9字牌をどんどん切る(笑
>これでも十分「ずぶの素人の麻雀」でしょ?
これじゃ動いてもあんまり嬉しくない気がする。
0144デフォルトの名無しさん
NGNG井出さんですか?
0145デフォルトの名無しさん
NGNGプログラムする必要はあるの?
0146デフォルトの名無しさん
NGNG無意味
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNGそのネタはスルーした方が面白かった
0149デフォルトの名無しさん
NGNGそうだな
もっと語って欲しかったかも
0150139
NGNGだから「プロトタイプ」言ってるじゃんか(笑)
でも意見ありがとうございます。どれ、このGWは役判定でもいじってるか……
ところで、
>勝ってると配牌やツモが良くなったり、とかは
>プログラムする必要はあるの?
そんな事象はありえません(笑)
0151139
NGNGこれか……? P/ECEってやつは。
0152デフォルトの名無しさん
NGNGプレイヤーが欲しいと思われる牌を選択する
というアルゴリズムはなかなかに難しいぞ。
それはそれで高度な思考ルーチンと言える。
馬鹿みたいに色をそろえるツモなら簡単だけどナ
0153bloom
NGNG0154デフォルトの名無しさん
NGNG話は(ry
0155デフォルトの名無しさん
NGNG偽アカギ程度の強さだろうな
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNG偽アカギは強かったよ
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGオサムは弱すぎ!!
ピーコとおすぎ!!!
0161山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNGttp://members.jcom.home.ne.jp/hennano/maujong/java/
0165不明なデバイスさん
NGNG0166デフォルトの名無しさん
NGNGどこかにクラスとかないの?
0167デフォルトの名無しさん
NGNG0168不明なデバイスさん
NGNG何を切ればよいですか?
どうやって判断する?
0169デフォルトの名無しさん
NGNG2,3,4,5,6 それぞれを切ったときの牌姿を想像する。
まあ、切らない(つまりこれ以外を切る)という選択肢もあるし
評価関数の作り方しだいだな
0170デフォルトの名無しさん
NGNG考え方がのっている所しらない?
0171デフォルトの名無しさん
NGNG自分の麻雀うってる時の考え方を整理して、箇条書きにしてみれ。
0172デフォルトの名無しさん
NGNG少牌ですよ
0173デフォルトの名無しさん
NGNG5を切ってメンツを確定させてしまうのが一番楽な気がする。
もちろん他の形にもよるけど。
漏れだったら2切るな
0175デフォルトの名無しさん
NGNGコメントなしなので、よくわからん
0176デフォルトの名無しさん
NGNGあれしかもバグだらけ
0177デフォルトの名無しさん
NGNGそうか?状況によるじゃん
他がパンパンで面子決定したいときは 2 (イーペーコニラミ)
頭が欲しいときは 4,6 (5を頭に固定)
チートイやってるときは 6 (プ
234の三色やってるなら 5
誰かが国士やチャンタやってそうなら 5 (イーソーの受け入れ
あとは、誰かリーチかけてて待ちを1点で読みきってたときとか。
待ちを読むのは癖を読むってことだから、
一般統計じゃあ無理だよな。そいつと対局重ねないと。
ていうか、ガッ
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNGまだまだだな。出直して来い
0180デフォルトの名無しさん
NGNGまだまだな部分がわからないので教えてください。
とりあえず、プログラミング可能な範囲でね。
「感性」とかも否定するわけじゃないけど、あれは
頭ん中で無意識に演算(と検索)をした結果だと考えてる。
「流れ」は爆牌党とかで出てた考えが面白かったな。
0181デフォルトの名無しさん
NGNGこれからツモるかもしれないドラを1枚切らなくて済むので、他を切るよりは相手のリーチに対してドラが切れずに降りなければいけない可能性が減る。
自分がリーチ中にドラで振り込む可能性が減る。
等
>>180のような感性とか訳分からない言葉を出してるシロウトは分からんでいいです
0182デフォルトの名無しさん
NGNG感性とかは否定しないけど肯定もしませんよ。
ところで興味があるのが 「点数に幾分の余裕」 の部分。
ここの閾値はナニを基準にします?
絶対的な点数(たとえば25000持ちとか)ではなく
適切な評価関数が必要だと思うんだけど
どんな係数が考えられる?
あと、いろいろ条件を出してきてるけど
それらの複合条件ってのは実際にプログラミングするときは
シンプルにモデル化を行った上でそれを使って
評価を積み重ねた(=評価関数を順次呼び出した)結果
算出されるものであって、if文case文の乱立ではないよね?
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG読めないけど、何が書いてあるの??
0185sage
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGhttp://akipon.free-city.net/page003.html
0192山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNGコンパイラにもよるけど
だいたい1万個までは余裕
0197デフォルトの名無しさん
NGNG0198山崎 渉
NGNG0199デフォルトの名無しさん
NGNG0200200ゲットプログラム
NGNG0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203名無しさんの次レスにご期待下さい
NGNG0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGなんだかんだ言って誰も作ってないと
0206デフォルトの名無しさん
NGNG適当なレギュレーション決めて、みんなで思考ルーチン持ち寄って
打たせたり出来たら面白いんだけど、どうだろ。
アルゴリズム考えるのは苦手だけど、舞台を作ることなら出来そうな
0207デフォルトの名無しさん
NGNG楽しそう。
インターフェース教えてくれたら参加します
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGおお!
0210デフォルトの名無しさん
NGNGコンピュータだから超高速で打たせて傾向見たら強いとか弱いとかわかるだろう
0211デフォルトの名無しさん
NGNGあぷろだなら提供するよ。
0212デフォルトの名無しさん
NGNGただ、ちゃんと通信して、さらに思考するソフトを書くのはかなり大変。
通信部分だけでも誰か作ってくれたらめちゃ楽なのだけど。
サーバーで面倒なのは
・役判定部分
通信関係で面倒そうなのは
・ログイン処理
・配牌を送る処理
・ユーザーにツモを配る。
・ユーザからの捨牌を受け取る
・その捨牌情報を全員に配る(観戦者にも)。
・途中のチー、ポン、カン、ロンを待つ(3秒ぐらい?)
・ユーザーに終局を知らせる。
・上がった場合は点数計算をして、ユーザに知らせる。
・で、配牌をする、の繰り返し。
・終局すれば全員に点数と順位を告げる。
うわー、書いていてめちゃ面倒だわ。
既存の東風荘とかのシステムが利用できるなら、借用したいね。
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNG0215デフォルトの名無しさん
NGNGシステムと、4人分の思考DLL用意して半荘1万回とか10万回自動でやらせて
勝率で勝負するのが楽しいと思う。
0216デフォルトの名無しさん
NGNG>>215
みたいな方向で良いとは思うんだけど、いきなりフル機能実装するのがむずいよな。
簡易版で>>212を実装するのが第一歩だと思う。
0217デフォルトの名無しさん
NGNGMJexeIO.DLL
http://www.interq.or.jp/snake/totugeki/MJexeIODLLman.htm
これをつかえば、自動打ちソフトの作成が可能。
卓の予約、終了時に抜けることもプログラムでやれるようだ。
ワイ卓あたりで、自動対戦しつづけるのはどうだろう。
0218デフォルトの名無しさん
NGNGおぉ、こんなものが。
まだよく理解してないけど、乱数で打つサンプルが作れれば
一気に大会も実現可能になりそう。
0219デフォルトの名無しさん
NGNG4人いないとはじめることもできんし。
すでに作られている自動打ちツールの作者は、どうやってデバッグしたんだろ。
ダミーのMJexeIO.DLLを作るんじゃ、たいへんそ。
0220デフォルトの名無しさん
NGNGこれって、直接東風荘のサーバにアクセスするのではなく、
IEの画面?に表示されたグラフィックの牌とかを認識して何かするソフト、ということみたいやね。
>>219
その自動代打ちツールは公開されてないの?
それさえあれば「とりあえず」なんとかなりそう。
0221デフォルトの名無しさん
NGNGIEは関係ないけど、そういうこと。
東風荘やったことない?
自動代打ちソフトのソースは公開されてないみたい。
そもそも人間が席をはずしたいときに使うもので、連続して対戦するものでもない。
「電脳代打ろぼっち」と「ドラえもんβ」くらいしか知らないけど。
東風荘でやるなら、普通に遊びにきてる人に迷惑にならないように
せねばいかんので、ちょっと難しいかな。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG1局70回くらいつもれる。
1打に1秒かかるとすると、1局70秒。
俺の成績だと、東風戦1回平均6局。
東風戦1回7分。
24時間やりっぱなしだと、205回。
1日で1万回やるとなると、8秒で1回。
ネット対戦じゃ無理だな。
>>215みたいなやつの方がいいかな。
0224デフォルトの名無しさん
NGNG実時間ではだめぽの予感。
10万とは言わず100局でも強さを示すには十分だろう。
サーバ作るのは大変なので最初は東風荘を利用するのがお手軽だと思う。
0225デフォルトの名無しさん
NGNG麻雀ほど順列組み合わせが複雑なゲームで
たかが100局じゃ何もわからないな
誰か統計学でもやってる人いたら
信頼のおけるサンプル数はどれくらいか計算してください
0226デフォルトの名無しさん
NGNG・DLLで対戦者を作る(ネットワーク機能無し)
・インターフェース無し
・東風荘互換のログを出す(牌譜再生、統計情報表示のため)
>>225
とつHPの「平均順位の偏りと信頼できる実力評価」
http://www.interq.or.jp/snake/totugeki/mjcom_p6.htm
結論としては2000試合で平均順位のばらつきがほぼなくなる・・・らしい。
数学の部分はよくわからん・・・
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGどの道最強のアルゴリズムを目指すなら思考ルーチンに判定アルゴリズムを
入れることは必須ですからねえ。人間ならどんな素人でもあがれるかあがれないか
(=役判定)を考えながら打つわけですし。
0229デフォルトの名無しさん
NGNGするクライアントが現れた場合サーバーでチョンボと判定できないとイカサマが
横行する。・・・まんどくせ・・・、牌の配列渡したら役と点数計算する
クラスを作ってくれ。ネットワークプログラミング部はワシが全てやろう。
0230デフォルトの名無しさん
NGNG他の3クライアントに承認を求めるとか。
ってルールで揉める人間の麻雀と同じになるな(笑)
0231デフォルトの名無しさん
NGNG>>229
牌の配列渡したら役と点数計算するクラスあるぞ。
麻雀サーバ作れるもんなら作ってみれ。
(1)次のファイルを落とす。
麻雀役判定器 Ver.033 YHVer033r.zip
ttp://giga.hp.infoseek.co.jp/NaoSoft/index.html
(2)ソースが入ってるので、以下の5ファイルを自分のプロジェクトへコピーする。
Def.h、Hantei.h、Hantei.cpp、Mahjong.h、Mahjong.cpp
(3)ビルドするとErrorMessage()の実体がないといわれるので、game.cppから
この関数だけMahjong.cppにコピーする。
(4)以下サンプル。あとは自力でよろしく。
GameYakuhanteiMode.cppがこのクラスを使ってるので、これを見るといい。
0232デフォルトの名無しさん
NGNG#include <memory.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
//門前清模和 平和 一気通貫 20符 4飜 7700点(親)
//1マンが上がり牌
//2m3m4m5m6m7m8m9m2p3p4p5p5p1m←下のを見やすくしたもの。
char t[]={1,2,3,4,5,6,7,8,10,11,12,13,13,0};
Mahjong m;//役判定クラス
m.Init();//初期化
m.m_Tehai.tehai_num=14;//14枚
memcpy(m.m_Tehai.tehai,t,14);//手牌をコピー
//m.m_Tehai.jikaze=KAZE_NAN;//自風を南にする(子になる)
m.YHM_YakuHantei(false);//点数計算実行(ツモ)
//m.YHM_YakuHantei(true);//ロン
//役を表示
for (int i=0 ; i < m.m_Yaku.YakuNum() ; ++i ){
cout << ::GetYakuName( m.m_Yaku.GetYaku( i ) ) << endl;
}
cout << (int)m.m_Yaku.fu << "符 ";
cout << (int)m.m_Yaku.fan << "飜 ";
cout << m.m_Yaku.score << "点" << endl;
return 0;
}
0233デフォルトの名無しさん
NGNGほおおお既にあったんか、便利なものが。
じゃあちょっくら作ってみるかね。
0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNG最低でもランダムプレイヤーで。
0236デフォルトの名無しさん
NGNG1個1個役をコツコツ判定しながら、
被ったらダメなものを考慮しつつ計算するわけか。
見事なルーチンだねえ。
自分はDelphi使いなので、この判定ルーチンを
移殖したいと思いますが、便宜のために判定クラスは
DLLにして、C++用のヘッダを用意すれば
クライアント側のチャレンジャーもそれを使えるか。
0237デフォルトの名無しさん
NGNG最初からC++で作った方が早いわ。
まあ期待せずにお待ちください。
0238デフォルトの名無しさん
NGNGすり合わせてコンセンサスを得るのがしんどいぞ。
個人的には大富豪やりたいなあ。別スレ作りたいけど
OKだろうか?
0239231
NGNGいくつか気になったこととか。
・ソース読んでみて使えそう?
おれは、使い方を調べるために軽く見ただけなんで。
・このソフトの作者、ソースに関する使用条件を書いてないが、
ソースを公開しているのだから、組み込み不可ということはないだろう。
・作り始める前に、仕様を公開した方が良いと思う。
ネットワークを使うなら、サーバはどうするのかとかも。
0240231
NGNG考えてるところまで。
・ルールは東風荘ルール。
・1時間で1000試合を目指したい。
東風戦1回4秒以内。>>223のデータを元にして、1打0.01秒以内。
・AI(DLL)とのインターフェース
void OnAction(int PlayerIndex,MJTAKUDATA *Data)//1打毎によばれる
PlayerIndex:Player配列で何番目のが自分の手か。起家が0。
struct MJTAKUDATA{//卓上のデータ
int Yama[136];
int NextTumo;
int Kyoku;
int Dora[8];
int Tsumibo;
int Richibo;
struct MJPLAYER{
int Tensu;
int Kawa[136];
int Tehai[14];
int Furo[4][3];
int RichiPos;
struct MJACTION{//牌を捨てたり、鳴きの指示をするためにDLL側でセットする
int Type;
int Sutehai;
int Furo[3];
}Action;
}Player[4];
};
0241デフォルトの名無しさん
NGNG確かにDLLでやるほうがネットワーク越しにやるよりはだいぶ
速くはなりますね。
ネットワークかませると、おそらく1打0.01秒は無理です。
もしネットワークにするならCRLFで区切った文でサーバから
要求→クライアント応答の繰り返しになるでしょう。例えば
SV -> CL1 : SELECT TSUMO
CL1 -> SV : TSUMO
SV -> CL1 : TSUMO 4PIN
SV -> CL1 : SELECT TAPAI
CL1 -> SV : TAPAI 1MAN
SV -> CL_ALL : TAPAI CL1,1MAN
SV -> CL2 : SELECT TSUMO,CHII
CL2 -> SV : CHII
SV -> CL_ALL : CHII CL2,1MAN
SV -> CL2 : SELECT TAPAI
...
0242デフォルトの名無しさん
NGNG囚人のディレンマのスレを見ていたが、この程度のシミュで
わざわざネットワークにする必要性もない。基本的にはDLL
方式でいいんじゃないか。ネットワークにするとソケットやら
何やらプログラムの初心者には面倒くさい処理が必要になりますし。
関数の作成だけに専念できるなら参加者の敷居も低い。
今着手しているものを、そのまま発展させていけばOKだと
思う。
0243デフォルトの名無しさん
NGNG0244デフォルトの名無しさん
NGNG誰でもいいからサーバなりDLLの原型書いてくれないかな〜。
0245デフォルトの名無しさん
NGNG違うと思う。
単に難しいだけ。
0246デフォルトの名無しさん
NGNGまだ駄目なところもあるが、大体のことはできるとおもう。
ツモって捨てる、鳴く、上がって点数計算、最終結果計算、東風荘牌譜出力など。
これでAI作るという人が現れたら、残りを作る(かも)。
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNGうぷした。
・ソースのみ。
・シフトキーを押すと終了。
・MJSimScore.txtというファイルが作られる。雀譜で再生できる。
雀友やできすぎくんは読めない。
・AI部分は、まだDLLに分離してない。
AIのコードは、MJSim.cppのAIAction0という関数に(とりあえず)書く。
・局は常に流れる。3万点以下でも勝負がつく。
こうしないとずっと流局で終わらんので。
・全体的にテスト不足だが、アルファ版ということで。
0250デフォルトの名無しさん
NGNG期待あげ
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG再あぷ。24hで消える。
0253デフォルトの名無しさん
NGNG確かにAIAction0の中身を作るだけのようですね。
作っても、他者との対戦が出来ないのが少し残念。
AI部分考えてみます。・・が多分内容表示部分を大量に追加するかも。
内容表示を作らないとデバックもままならない。
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNGJAVA派は、これ使え。
ttp://members.jcom.home.ne.jp/hennano/maujong/java/mjai_iface.html
0256253
NGNG追加してもらえると嬉しいです。必要ならファイルをUPします。
ドラ1=[6�V] ドラ2=[5萬] ドラ3=[8萬] ドラ4=[ 発] 残り枚数=37
[3萬][5萬][9萬][1◎][2◎][1�V][2�V][3�V][5�V][6�V][ 東][ 北][ 北] [ 中]
8◎ 西 発 発 5萬 7萬 7萬 4◎
[4萬][4萬][6萬][6萬][8萬][9萬][4◎][9◎][1�V][2�V][6�V][ 南][ 北]
5�V 5萬 中 1◎ 9萬 4◎ 東 2�V
[2萬][2萬][9萬][2◎][7◎][7◎][1�V][4�V][7�V][9�V][9�V][ 南][ 白]
6◎ 発 3◎ 2�V 7萬 西 7◎ 3�V
[5萬][6萬][5◎][5◎][8◎][3�V][4�V][5�V][7�V][ 東][ 西][ 西][ 中]
白 6◎ 1萬 3萬 8萬 4萬 6◎ 南
つづく。
0257253
NGNG別クラスにしようと思いましたが、いろいろな定義がファイル内なのでコピーしても
管理が大変なので関数にしました、各種定義が.hになれば簡単にクラスに出来ます。
必要なとこだけ表示するようにすれば、5倍以上のスピードになると思いますが、
デバック前提なので簡単にしています。
また、今のデーター構造ではポン・チイ・カンした牌の区別が出来ないように思います。
MJPLAYERデータ内に自分の風(東南・・)が入っていると嬉しいです。
0258デフォルトの名無しさん
NGNGようやくDLできますた。(なんかやたら重い+サーバが死んでたよう)
乙でした。
今からソースみてみます。
0259デフォルトの名無しさん
NGNG>>255 で紹介されているJavaの牌のNOに合わせてみるのも
面白いかと思います。JavaのブリッチAIを作って、対戦できれば楽しいですね。
0260253
NGNG○有りました。別構造体は見てなかった --;
0261男チャ漬け ◆VmNuOcUpJs
NGNG私も参加したいなと思い、レスしました。
とりあえず、>>252さんのソースを参考にDLLを作ってみます。
私はまだ初心者なので、AI機能は253さんの方がいいと思いますが
勉強のつもりで一人で作って見ます。
いいスレですね。また来ます。
0262デフォルトの名無しさん
NGNG1. ユーザーには風牌とか1とか9とかばかりツモらせる。
2. PC側で鳴きまくる。
3. PC側は積み込みまくり。
0263デフォルトの名無しさん
NGNG4人ともAIなので、PC側がありません。
0264デフォルトの名無しさん
NGNG0265252
NGNGまうじゃんは、過去レスでも紹介され、AI同士の自動対戦もできるので、意識はしてる。
まうじゃんとの違いは、
・東風荘のログを出す(統計や牌譜再生に東風荘のさまざまなツールが使える)
・本体のソースがあり改造自由(どうでもいいかな)
・AIインターフェースがわかりやすい(と思いたい)
・人間との対戦は全く考慮してない。AI同士を戦わせるのが目的。
>>256
AIActionは、次のバージョン(あれば)でDLLに分離予定。
AIクラスのサンプル(作ってもらえるなら)にいれてほしい。
>MJPLAYERデータ内に自分の風(東南・・)が入っていると嬉しいです。
これに関しては、GetJikaze()を使ってほしい(何か理由があれば考慮します)。
重複するデータは持たないようにしているため。
便利な関数などを提供していないのは不親切だけど、AI用の便利ライブラリ作成に期待。
(自風かどうか調べるものから、見えていない牌の列挙、危険牌列挙など)
0266252
NGNG牌の番号が0から詰まっていない理由
・デバッガで見るとき見やすいように
・順子ができてるかどうか判定しやすい
まうじゃんにはWindows版もあり、これのAIインターフェースへのブリッジは考え中。
まうじゃんのAIがつかえれば、当面の敵ができる。
>>260
河のデータのことだと思ってた。
で、河のデータに関しては、-だったら鳴かれた牌ということで。
-19は、19(9ピン)が鳴かれたとき。(次バージョン以降から)
その他のこと。
・バグ多いと思うので、直しながらでよろしく。
・AIに関しての情報を貼ってほしい。
いまのところ肝心の話題があんまりない気がする。
とつげき東北システマティック麻雀研究所
http://www.interq.or.jp/snake/totugeki/
ここを読まずに麻雀AIはありえん。
麻雀講座とか、コンピュータによる「山に残っている牌の予測」とか。
あらの麻雀のページ
http://www8.plala.or.jp/ara3/mj/
とりあえずテンパイに向かうのに必要そうな牌効率(期待値)計算について。
0267デフォルトの名無しさん
NGNGどうしても「まうじゃん」のような
インターフェースのみの公開型だと
「100万局走らせて統計を取る」
みたいな作業はやり辛い。
やはりオープンソースでないと・・・
0268253
NGNG私もやってみたいと思い始めましたが、AI系については初めてに近いです。
>・AIに関しての情報を貼ってほしい。
>いまのところ肝心の話題があんまりない気がする。
これについては今現在、私は何ら答えることが出来ません。
紹介していただいたHPを見て楽しみたいと思います。
こんな程度の参加ですが、期待はずれであれば言ってください。
0271253
NGNGHPを読んだ感想。
あらの麻雀のページ :牌効率の計算については、理論的で分かりやすかったですが
最後の結論がこれでは勝てない^^;(私も読んで同じように感じました)。
また、この様な公開された計算は誰でもできるので、AI戦では勝てないが感想です。
とつげき東北:麻雀講座は有りましたがコンピュータによる「山に残っている牌の予測」
が見つからず。何処でしょう^^;
0272253
NGNG麻雀の様な不確定要素が多いゲーム、及び全数探査が不可能(ほんとに不可能かは不明)
なため浅い探索になりやすい。この様なゲームのAIを作る場合は、一連の強い理論の構築
等は望めないだろう。
では如何にして強いAIを作るのか、それはロジック上の定石の集合体ではないかと考える。
(ここで言う所の定石とは、状況の評価値や、個々の状況を分析するロジック)
オセロや将棋のAIも大量の定石データーベースを持っている。
オセロや将棋のような静的な形での定石は麻雀では難しいだろう、そのため
「プログラムによるロジック上の定石」と表現した。この様なロジックは多くの人が考える
ことにより積み上がるのではないかと、そのため多人数が参加できるのが望ましい。
0273男チャ漬け ◆VmNuOcUpJs
NGNGそのまま利用してAIActionのみ書き換えてみました。
ttp://up.isp.2ch.net/up/3e77d435f2b2.zip
鳴き、牌効率共に丸きり無視で、上がり方も
よく分からず丸きり実力不足状態です。
0274253
NGNGスタック破壊してるみたい^^;
配列多くして実行したけど、手が出来てないような・・・・
卓表示プログラムここにUPしたので貼り付けて見てみて
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=13
//PRで囲った部分をAIActionの上に追加して、AIActionに1行追加します。
0276253
NGNG0277253
NGNG対処用に
// 牌表示
my_locate(xp,yp);
for(int i=0;i<46;i++) {
if((pno=pPry->Tehai[i])) {
while(pno--) {
if(pno<0 || pno>3) { cout << "Error"; break; } <−−−−−−−ここ追加して。
cout << getPaiStr(i);
}
0278デフォルトの名無しさん
NGNGsourceforgeとか。
0279デフォルトの名無しさん
NGNG0280252
NGNGAI部分をDLLに分離してみた。
MJSim.iniを読み込み、[AI]セクションに書かれたDLLをロードする。
DLL名がプレイヤー名になる。
同じAIが卓を囲むのはまずい。
・たとえばAI0〜AI3まで、全部同じDLLを指定すると、4人分のメッセージがきてしまう。1順の間にツモ4回、リアクション16回。
・グローバル変数を共有してしまう。
対処方法
DLLをコピーして名前を変える。
MJSimAI1.dll、MJSimAI2.dll・・・とか。
う〜む・・・
デバッグ中は、いままでどおり、MJSim.cppの中に書くのもいいけど。
0281252
NGNGVCのデバッガを使うときとか、
設定で作業フォルダが、プロジェクトのあるフォルダになっていると、
そこにDLLは無いため(DLLはdebugとかにある)、読み込めずに落ちるので注意。
次はiniにフルパス指定できるようにしとく。
0282252
NGNGhttp://www.interq.or.jp/snake/totugeki/kouza10.htm
ソースもあるといいんだけどなあ。
0283男チャ漬け ◆VmNuOcUpJs
NGNG聴牌じゃ無いのにリーチしてしまいます。
どこがおかしいのでしょう?
↓がソースです。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=14&fi=no
>>280
お疲れ様です。
0284253
NGNG新しいMJSim対応卓表示プログラムです。デバックの時使ってみて。
表示は別ファイル、修正個所は2箇所追加で下に書いてあります。
自風はGameデータから生成してます。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=15
0285253
NGNGDLLにしてみたけど、やっぱり配列のオーバーランしてるようです。
その他は見てないです。(自分のもやらないと^^;)
デバックモードでやるとランタイムエラー出まくりです^^;
T_Tehai変数は泣いているように見えて笑えました。
0286253
NGNG0287男チャ漬け ◆VmNuOcUpJs
NGNGオーバーランに関してのご指摘有難うございます。
DLL作動せずおかしいなと思ってデバッグかけたら確かに逝ってました。
字牌までジュンツ検索しなくてもいいのに、
大ボケかまして済みませんでした。
逝ってきます。
0288252
NGNGMentsCut関数がまずい。
最初のところでtrueになっても、再帰を戻っていくときにfalseになってしまう。
なので、途中のMentsCut再帰呼び出しで、戻り値を保存する。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=16&fi=no
・・・MJSimで、AIが自力で上がるのは初めて見た。
鳴き方は、ポンの場合、MJMSGREACTIONの時に、
・TypeにMJAPCION_PONを指定。
・Sutehaiに捨て牌を指定。
チーのときは、さらに、Hosokuにチーの先頭牌を指定。
「聴牌じゃ無いのにリーチ」は確認できなかった。
0289252
NGNGリーチのときにログを書き出し忘れている。
void CMJSim::Richi(int Index)関数の最初のところに、
---
LogHaifu(Index, MJACTION_RICHI);
---
↑を追加してください。
0290252
NGNGリーチがログに出ていないのを修正。
試合結果の点数計算が間違っていたのを修正。
AIへ渡すMJGAME構造体を、コピーしてから渡すようにした。
あと、>>283さんのソースも入れた。
0291デフォルトの名無しさん
NGNG0292男チャ漬け ◆VmNuOcUpJs
NGNG確認しました。どうもありがとうございます。
後は細かな仕様をどんどん加えて公開しようと思いますので
指摘等、至らない点がありましたらよろしくお願いします。
0293デフォルトの名無しさん
NGNG0294男チャ漬け ◆VmNuOcUpJs
NGNGDLLにすると例外が生じて強制終了されてしまうようです。
ソースは↓の添付ファイルをDLしてください
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=18
0295デフォルトの名無しさん
NGNGただ、チョンボロンしているのであれば
普通は例外が投げられるはずなのですが、どうも
それ以外にも原因があるようなのです。
原因は分かり次第おしらせしますが、とりあえず
AIにもチョンボ判定をつけたほうが無難ですね。
うpしておいてなんですがv0.0.1は無視してください
0296デフォルトの名無しさん
NGNGまだ配列のオーバーラン起こってるようです。オーバランの仕方で
いろいろなエラーが出るようになった^^
当方、テンパイ出きるようにはなりましたが、まだまだ、捨て牌の選び方が
全然なのでお披露目できません。そちらと全然違う方法なのでソースが巨大化してます;;
今のところ、手牌評価だけは全数検索方法を適用してます。まだまだこれからですが。
0297252
NGNGロンできないのは、MJSimのバグだった。そちらは正常。
リアクションがぜんぜんできなかったみたい。最悪〜。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1055157603_19/MJSim_000200.lzh
0.2.0
AIの不正な入力を訂正するようにした。
誤ツモ上がり、ロン→チョンボ
持っていない牌を捨てる、誤暗カン→ツモ切り
誤ポン、チー、明カン→何もしない
リアクションができなかったのを修正。
コマンドラインに卓表示
(MJSim::Kyoku()内のコードを有効にした場合に表示)。>>284さん
>>294さんのAIを同梱。
その他いろいろ修正。
0298252
NGNG無視してくださいとかいてあるのになんだけど、
MentsCutの一番上のforのところでオーバーランしてる。
たまたまT_Tehai[46](確保してないメモリ)が0以外だと上がりに失敗するので、
---
int T_Tehai[47];←47個
bool MentsCut(int i)
{
T_Tehai[46] = 0;←0を入れておく
---
というか、MJPLAYERのTehaiのデータも47個の配列にすべきだな・・・次で修正する。
データ構造とか、こうしてほしいとかアイディアがあったら教えてください。
データ構造の工夫で手間が大幅に減らせる場合は多いし。
今の手牌だと、カンチャンが判定しずらいかな。
30以下のときで、牌番号%10してから調べればいいか・・・
または、牌番号を10ずつ間を空けるとかどうだろう。
1〜9、21〜29、41〜49、51、61、71、81、91、101、111
0300デフォルトの名無しさん
NGNG>または、牌番号を10ずつ間を空けるとかどうだろう。
>1〜9、21〜29、41〜49、51、61、71、81、91、101、111
は今のままの方が良いです。forループの回数やデータ量も多くなるので。
修正希望ですが、他家の手牌や、山牌がDLLより見えないようにした方がいいように
思います。また、他家の捨て牌の時のアクションは捨て牌が渡されるようになると
嬉しい。AIにはプレヤーデータのみの渡しで処理できる方が良いと思います。
実際の麻雀のように見えるものしか見えないほうが嬉しいです。
0301252
NGNG�@>他家の手牌や、山牌がDLLより見えないようにした方がいいように思います。
もちろん。具体的には、参照しても無意味なデータになる。
�A>他家の捨て牌の時のアクションは捨て牌が渡されるようになると嬉しい。
たしかに、今の状態だと、最後のアクションはなんだったのかがワカラン。
1つの案としては、有効な最後の他家アクションは参照可能にする。
Game->Player[Game->Turn].Actionの中身が参照可能(捨て牌もわかる)。う〜ん・・・
�B>AIにはプレヤーデータのみの渡しで処理できる方が良いと思います。
これはどういう意味でしょう?�@と同じ意味?
他家の河、リーチ、フーロ、点数は必要だと思うけど。
MJGAMEの構造は、昔の麻雀ゲームで、4人の手牌や河が縦に並んでいるやつ
(TakuDispで表示されるような)をイメージしてるんだけど、どうでしょ。
ところで、影響大きくてスマンがMJGAME→MJTAKUに名前を変更したい。
卓のイメージとわかりやすいので。
0302デフォルトの名無しさん
NGNGttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=20&fi=no
>>301
>ところで、影響大きくてスマンがMJGAME→MJTAKUに名前を変更したい。
>卓のイメージとわかりやすいので。
了解です
0303デフォルトの名無しさん
NGNG>�@>........もちろん。具体的には、参照しても無意味なデータになる。
有難うございます。
>�A>
やってみます。と言いつつもまだそこまで行ってない;;
>�B>AIにはプレヤーデータのみの渡しで処理できる方が良いと思います。
は1と同じ意味です、MJGAMEデータが来るので全部見えるかなと思って^^;
>MJGAMEの構造は、昔の麻雀ゲームで、4人の手牌や河が縦に並んでいるやつ
>(TakuDispで表示されるような)をイメージしてるんだけど、どうでしょ。
了解です。
0304252
NGNG-------------------------------------
東2局 2本場 リーチ2本 ドラ9m5p ツモ残50
西家 MEGUMI 27000
北9p8p1m ←河
[][][][][][][] 1m[2m]3m 中中[中] ←フーロ
北家 広末涼子 27000
東1p[中]
3m5m5m9m3p6p9p1s4s5s7s白発
東家 小池栄子 27000 ⊂・⊃リーチ
西9m(リーチ)1m
[][][][][][][][][][][][][]
南家 優香 27000
7m6p[2m]
[][][][][][][][][][] 2p[][]2p
-------------------------------------
ただいま、現実逃避中です・・・
0305302
NGNG// 捨て牌を探す
for (i = 0; SutePlayer->Kawa[i]; i++);
Sutehai = SutePlayer->Kawa[i];
↓
// 捨て牌を探す
for (i = 0; SutePlayer->Kawa[i]; i++);
Sutehai = SutePlayer->Kawa[i - 1];
に変えてください。
でないと、ロンあがりしない… _| ̄|○
0306男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。
仕様が変更されている様なので、
ソースは日を改めてうpします。
>>302
お疲れ様です。
とても、参考になります。
>>304
こういう感じの卓は余裕があったらそのうち
GUI化してみようと思います。MFCとかDirectXとか。
0307デフォルトの名無しさん
NGNG0308252
NGNGインターフェースの変更をはやくしなきゃということで。別に機能は変わらず。
0.3.0
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1055157603_21/MJSim_000300.lzh
MJGAME構造体の名前をMJTAKUに変更した。
Tehai配列の大きさを46→47にした。
Tehai[46]には常に0を入れることで、番兵として使えるようにするため。
Kawa配列の大きさを137→24にした。
意味なく大きすぎた。24は、6牌×4列分。
>>302さんのAIを同梱。
>>306
GUIなら普通の四角い卓でいいかも?
0309デフォルトの名無しさん
NGNG役名
一杯口→一盃口、二杯口→二盃口
CMJSim::LogKyokuEndAgariInfo()
「跳満貫」が2つある
それぞれ「ハネ満貫」、「3倍満貫」に変更したほうがいい
七対子がうまく判定されない
CMJAgari::ConvetTehai(int Index, bool IsRon)と
Hantei::MakeHistogram( char * pHist, const TehaiData & tehai )で
ツモ牌がダブって追加されているため
(どう修正するかは任せます)
小三元のとき役牌がつかない
Hantei ::SearchAndAddYaku(〜)
yaku.yakuhai_num-= 2 ; ←いらない
とりあえずここまで
0310253
NGNGその他、川牌の鳴き対応。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=22
0311253
NGNG× if(ino<0) { no=-ino; g_strPai[0]='*'; pc=&g_strPai[0]; }
○ if(ino<0) { no=-ino; g_strPai[0]='*'; pc=&g_strPai[1]; } //鳴いてる牌は*が付きます
0312252
NGNGイメージとしては、普通に東風荘をやっているような感じで
プログラミングできたらなぁと。
ツモのときや、鳴けるときに「ポーン」と音がするアレ。
class MJAI{
public:
MJTAKU m_Taku;
MJPLAYER *m_Self;
int m_Index;
//AIAction()から直接呼ばれる
//状況に応じてOnXxxメソッドを呼び出す
void Tsumo();
void Reaction();
void GameStart();
・・・
private:
virtual int OnTsumo();//ツモ。戻り値は捨て牌番号
virtual void OnReaction();
virtual bool OnPon();//ポンができる状況。trueを返すとポンする
//その後OnSutehai()が呼ばれる
virtual int OnChi();//チーの先頭牌を返すとチーする
virtual bool OnAnkan();
・・・
virtual int OnSutehai();//鳴いた後の捨て牌を決定。戻り値は捨て牌番号
・・・
virtual void OnOtherRichi();//他家がリーチした
virtual bool OnTenpai();//テンパイした
//trueを返すとリーチし、以後自動的にツモ切り
};
0314男チャ漬け ◆VmNuOcUpJs
NGNGちょっと付け足せば、チーもカンも一応出来る仕様にしていますがテスト不足です。
あと、CPUの強さを測るために試合結果からレートを測定できるツールを作りました。
是非、参考にしてみてください。
あと、252さんシミュレータなのですが、一発ロンを見逃してしまうバグがありましたので。
//Turnの次がindex[0]になるようにする
for(i = 0; i < 4; i++){
index[i] = (m_Game.Turn + i + 1) % 4;
}
↓
for(i = 0; i < 4; i++){
index[i] = (m_Game.Turn + i + 1) % 4;
//ロンである時点ですぐに命令を実行する
if(m_Game.Player[index[i]].Action.Type == MJACTION_RON){
Action(index[i], m_Game.Player[index[i]].Action.Type);
return;
}
}
ソースなどは↓でDL出来ます。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1055157603_24/283_MJSimAI.zip
>>308
お疲れ様です。
0315デフォルトの名無しさん
NGNG0316男チャ漬け ◆VmNuOcUpJs
NGNGどうやら見逃しに関しては、他の鳴きにも影響があるようです。
ポンもチーもカンもうまくいってない時があります。
↑のでロンは正常になりましたが似たような処理を
他の鳴きにも施す必要がありそうです。
あと、鳴いたあとにロン、ツモするとチョンボになります。
以上、バグ報告です。
↓はテスト用DLLです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1055157603&res=25&fi=no
0317252
NGNGレートはそのうち上がったり下がったりさせたいなあ。
あと、鳴きでなんかおかしかったら、本体のせいの可能性もかなりあり。
AIの構想。
人間も麻雀をするとき、いくつかのモードがあって、それを切り替えてやっている。
大きく分けて、
面前モード、一色モード、トイトイモード、
守りモード、早上がりモード、逆転モード(点数を意識して上がる)
上記モードの数だけAIクラスを作って、常時切り替えながらやるってのはどうだろ。
0318男チャ漬け ◆VmNuOcUpJs
NGNGiniファイルにAIをありったけ登録させて、ランダムで対戦させまくって
尚且つレートを反映させたりすればかなり面白くなってきますね。
CalcRate.vbsの方でレート反映処理は可能なのですが、
プレイヤをランダムにはできないので「できすぎ君」に当てても
信憑性薄いかも(^^;
あ、だとすると牌譜は一人だけキャラを統一させる必要ありますね。
AIに関しては後々自前でそうするつもりです。(〜モード)
今は面前と早上がりしかできませんが。
それでも上がるの遅いし。鬱だ・・・
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGDLLですがサイズが大きいです。手牌評価の全数検索でしたが、完全は出来ず。
役8−9割ぐらいまの探査です。簡単なパターンマッチングDBを持っています。
今回はいかに最適な捨て牌を選ぶかを、自手牌のみの評価で選んでいます。
他は何も見ていません、それでも、そこそこにうまく捨てている感じがします。
DLLはここにあります。
http://up.isp.2ch.net/upload/c=03okari/index.cgi
「お借りします MJSim用AI Dll2003-12-17 20:39:53」
また、どんな配牌でも以下のデータが算出できます。
// 後幾つでテンパイ
// 役の藩数(一部)
// 役まで後1枚の役の藩数(一部)
// 面子の数
// 面子情報
// 最良ターツ評価データ
// ターツの数
つづく
0322デフォルトの名無しさん
NGNG// 牌の待ち数
// 合計ポイント
// リャンメンの数
// 2カンチャンの数
// カンチャンの数
// ペンチャンの数
上記データの解析はそれほど難しくはありませんでしたが、データを評価し
最適な捨て牌を選ぶことが難しいです。
今後の作成は
・各種評価データ、評価ロジックの最適化、(今は自分の考えで値をふっているだけ^^;)
ここの最適化で、もっともっと強くなります。今は草案
・簡単な役は理解しているが、まったく利用していないので、役の方向へ手の誘導。
・待ち牌の有効個数算出(簡単そう)
・フリテンをしているので、その回避、これも比較的簡単。
・相手の必要牌予測、又は、当たらない牌予測、同じ意味
・山牌のツモ予測
0323男チャ漬け ◆VmNuOcUpJs
NGNGポンはできるのですが完璧でないです。
チー、カンは未だ成功できず、困ってます。
ソースをうpしますのでおかしいところがあれば
どんどん指摘してください。
↓が最新版です。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1055157603_28/283_MJSimAI.zip
これが完成すれば本格的にAI作りができるのですが、
dllのデバッグ方法が分からないので机上デバッグ状態で
かなり苦労してます。何か上手い方法あるのでしょうか?
>>321
お疲れ様です。
ですがDLできないです。
再うpお願いします。
252さん最新版うpお疲れ様です。
いただきました。
0324321
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/999294620_115/MJAI.lzh
0325321
NGNGフリテンリーチしていてMJSimが無視しているためロンロンと続くようです。
フリテン回避を作らないと。ようやく場お見る処理がかける。
0326男チャ漬け ◆VmNuOcUpJs
NGNG頂きました。
参考になります。
>>325
こちらではフリテン処理はしているのですが。
役なしロンだとフリテンなのに、
MJSIMが認識してしまうようです。
まあ、この場合はこちらのフリテン処理が
甘いからなってしまうのですが、
321さんもその点お気をつけください。
0327252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&rm=75
0328252
NGNG>dllのデバッグ方法が分からないので机上デバッグ状態で
>かなり苦労してます。何か上手い方法あるのでしょうか?
VCとかBCBとか統合環境のあるソフトなら普通にDLLのデバッグができるのでは?
DLLのプロジェクトで、
�@ブレークポイントを置く(後でもいいけど)
�ADLLをプロジェクトから実行
�B実行ファイルの場所を聞かれるので、MJSim.exeのパスを入力
0329324
NGNGただ、デバック機能だけでは難しいので、そこらじゅうにデバック処理を
書いています。今回のDLLもデバックモードで出してます。何か起こったら
エラーメッセージが出て止まります^^;
特にC/C++ではポインターのちょっとしたミスで、内容不明のバグが出やすいので。
30箇所以上に多くの基本情報の確認ルーチンが仕込んであります。
エクザプションエラー処理が起こる前にほとんどトラップしてくれます^^
これも入りっぱなしのDLLです^^;
0330252
NGNG少し前のやつだと大丈夫なので、こちらの変更にバグがあった??
あんまり考えてなかったが、C#、VB、javaとか他言語でDLLは作成できるのかな?
それらの言語でつくれば、ポインタでのエラーを防げる。
MJTAKU::Tsumoがポインタなので、これは変更するとして。
山の構成で、リンシャンが一番前にきてるのは意味無いな・・・
ドラが一番前でいい。実物の麻雀卓のイメージから抜け出せてなかった。
インタフェースの変更は大変申し訳ないが、変更予定ということで。
0331252
NGNGこれはどういう意味でしょう?
チョンボは、チョンボになっているはずだけど・・・
やることが増えてきたので、TODOリスト
上にあるほど優先。
★A(緊急)
・鳴いたあと上がるとチョンボになる。
★B(早め)
・リーチ後、ツモ切り以外ができる。
・リーチが2回以上できる。
・ツモ上がりしたときの点数計算を÷3している。
・ダブルリーチができない。
・ハイテイがつかない。
・チャンカンができない。
★C(保留)
・他言語でも使えるようにポインタをなくす。(他言語でも使うならA)
・ドラを山の一番前に持ってくる。(Aかな?)
★D(調査中)
・ロンが2回できる?
AI用の共通ライブラリとクラス(>>312)も作成予定だけど優先順位低い。
0332男チャ漬け ◆VmNuOcUpJs
NGNGDLL扱ったこと無いので良くわからないのですが
出来るとのことですので、試行錯誤やってみるです。
>>330
こちらでも0.3.0で確認できました。
0.3.1だと落ちてしまいます。
当方、この後実家に帰ってしまってネットも
プログラムも出来なくなってしまいます。
正月頃復帰しますのでその時はよろしくお願いします。
0334324
NGNG0.3.1がある事を気が付いていませんでした、何処からダウンできるのでしょうか?
今は0.3.0でやってます。
手牌評価のがまだ草案のため。次の2点を確認しています^^;
・たまーにリーチなのに、リーチを崩す捨て牌をしてリーチする
(ロンはしていない、これはロン確認と捨て牌決定ルーチンが違うため)
・たまーに、面子を崩す捨て牌をしている。
(これは、上記と同上のバグかな・・・・・)
パターンマッチングDBのデータミスかも
0.3.1がダウン出来次第、対応したDLLをUPします。
0335男チャ漬け ◆VmNuOcUpJs
NGNG252さんに代わって最新版はこちらになります。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1055157603_27/MJSim_000301.lzh
ところで、ソースはうpできないのでしょうか?
是非見てみたいのですが、って今は見る機会ないですが。
では、帰郷しやす。
0336デフォルトの名無しさん
NGNGpeekメッセージでメッセージから牌を識別することは
できますか?
0337324
NGNG>http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1055157603_27/MJSim_000301.lzh
有難うございます、ダウンできました。
所で、前のAIで紹介されたドラを取り出す、ルーチンが正常に動かなくなっていました。↓
//ドラ取得(表示牌ではない)
int GetDora(int Index, int *Yama)
{
int DoraFilter[] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 1,
0,12,13,14,15,16,17,18,19,11,
0,22,23,24,25,26,27,28,29,21,
0,33, 0,35, 0,37, 0,31, 0, 0,
0,43, 0,45, 0,41};
return DoraFilter[Yama[Index]]; <====ここで落ちます。
}
0.3.1ではどの用にドラを取り出すのでしょうか?
0338252
NGNGそこか〜。ごめん。MJSimのバグだ。
MJSim.cpp 167行目
誤 for(i = 0; i < GetKanNum(m_Taku); i++){
↓
正 for(i = 0; i < GetKanNum(m_Taku) + 1; i++){
ドラのところだけ、AIに渡す用の構造体の山にコピーしてるんだけど、
最低1個はあるはずなのに、コピーしてなかった。
0339324
NGNG>是非見てみたいのですが、って今は見る機会ないですが。
申し訳ない、ソースを公開しない理由が2つあります。
1.公開できないライブラリー等ヶが使われています。
これを除くと実行できない無意味なソースになってしまいます。
2.今回ツールとして使用したソース以外は、全て0から作ったオリジナルです。
私は、私と違う考えを元にしたAIと戦いたいです。公開した場合
似たようなAIになる事を危惧しています。パターンマッチのデータの変更や
評価の変更だけで簡単に行動の違うAIになりますが、元が同じなので、
強さの限界はまったく同じです。
私の方法が強い方法と思っていません、なので、オリジナルなAIと戦って
いきたいと思っています。
色々な考えを元にしたAIと戦っていきたい^^
0340252
NGNG変更点:
・山をわたさない(ドラを渡す)。
・ツモ位置をわたさない(残りツモを渡す)。
struct MJTAKU{
int Kyoku;//局。0:東1、1:東2 〜 4:南1 〜
int TsumiboNum;//積み棒の数
int RichiboNum;//リーチ棒の数
int Turn;//誰の順番か。0:起家〜
//鳴きが入った後のMJMSG_REACTIONメッセージ時は鳴いたプレイヤーを示す
int Dora[4];//ドラ牌。無効なところは0
int RestTsumoNum;//残りツモ数
MJPLAYER Player[4];//プレイヤーのデータ
};
なぜ今まで山やツモ位置を渡していたのか?
・本体側と、AI側で同じデータを使用して、デバッグ時にAIから書き換えたりするつもりだった。
→わかりづらいし、本体側の変更ができなくなるデメリットの方が大きい。
→デバッグ支援機能は考案中だが、その場合は別のインターフェースを作ればいい。
(山を書き換えたり、特定の状況を記録/復活させるなど)
・本体側の開発期間短縮のため(この方がはやいと思った)。
・イメージが浮かびやすそう。と思っていた。
→単に思い込みだった気がする。
0341252
NGNGまた来年〜。
>>339
質問ですが
・パターンマッチングというのは、具体的にはどういうものなのでしょう?何のパターン?
・なぜ手牌評価を全数検索しないのでしょう?
・面子は複数の分け方があるため、>>321のデータが複数ある?
0342324
NGNG>・パターンマッチングというのは、具体的にはどういうものなのでしょう?何のパターン?
プログラム上のロジックで分析するには、牌の状況は複雑すぎます。これを解消するために
パターンデータによる分析があります。
(このパターン分析のしかたが人それぞれ違ってくると思います、私のオリジナル部分でもある)
何のパターン?=牌のパターンです。
・なぜ手牌評価を全数検索しないのでしょう?
これは、実質的な性能と必要作業数の兼ね合いです。
私の個人的感想としてこれ以上検索しても、それほど有効ではないと判断したためです。
(他のこと(場の評価等々)もやりたいし)
ただ、もっと強くするには、この部分の強化だと思います。
・面子は複数の分け方があるため、>>321のデータが複数ある?
今ソースで出ている、捨て牌アルゴリズムは、一連の固定的な評価でしかありません。
私のほうは、ツリー構造のデーターになっています。
終端では100を越える時があります。それらの複数の為のデータです。
0343324
NGNGまだ捨て牌がおかしいのは、直ってないです^^;まずは0.3.1対応で。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_4/MJAI.lzh
0344デフォルトの名無しさん
NGNG>質問ですが牌譜読み込み、再生ツールって
>peekメッセージでメッセージから牌を識別することは
>できますか?
「牌譜読み込み、再生ツールてなんですか?」 て雀譜のことですか?
「peekメッセージ」って何の事?
0345デフォルトの名無しさん
NGNGだったのでスルーしてください。
0346デフォルトの名無しさん
NGNG了解しました。
0347324
NGNG面子緒崩さないようにするのは簡単なのですが。対処療法では意味が無いので、
なぜその捨て牌を選んだのかの分析と反映に少し時間がかかりそう。
それができれば、もう少し賢くなるかも^^
0348302
NGNG私のdll次バージョンは日曜ぐらいになりそうです。
バグ(or未実装?)報告(>>331以外)
・カンをした時、嶺上牌をツモったのがログに表示されない
・七対子の時、25符になってない
・役牌は飜は追加されているが役名が表示されない
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
・ドラがうまく判定されていない
・天和、地和の判定がない
0349252
NGNG回答サンクス。
とんちんかんな理解かもしれないけど。
パターンマッチング・・・どんなときにピンフに近いとかは、状況(シュンツがいくつあるとか)を持っておくしかないなぁ。
メンツの分け方・・・なるほろ。メンツやターツ抜いたりするのは、再帰を使っているのだから、ツリーになるほうが自然か。
>>348
バグ報告感謝。
ドラの件がいちばんまずいな(A緊急)。それ以外はBということで。
ポンをした後、チョンボになる件、こちらのバグでした。
ポンが役判定関数の方へわたっていなかった、という情けないバグ。
しかし、これを直したら、役判定の中で落ちるようになってしまった。原因がわからん・・・・・・
これを直したら、新しいインターフェースのやつを出す予定。
今後はインターフェースを換えても互換性を保つようにする予定。
(案)
AI側がint AIInterfaceVersion()を実装して、使用したいインターフェースのバージョンを返す。
それによって、本体側が送ってくる構造体の種類や、呼び出す関数が変わる。
0350252
NGNG0.3.2
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_5/MJSim_000302.lzh
・鳴いたあと上がるとチョンボになるのを修正。
・ドラが判定されていないのを修正。
・食い断は0飜にした。食い断のみでは上がれない。
・小三元だけで4飜なのを小三元2飜+役牌2にした。
★A(緊急)
・新しいMJTAKUインターフェース。
・チーの後、捨て牌がおかしい。
★B(早め)
・リーチ後、ツモ切り以外ができる。
・リーチが2回以上できる。
・役牌は飜は追加されているが役名が表示されない
・チョンボのときに点数が減らない。
・ハイテイがつかない。
・ツモ上がりしたときの点数計算が正確でない。
・ダブルリーチがつかない。
・チャンカンができない。
・カンをした時、嶺上牌をツモったのがログに表示されない
・七対子の時、25符になってない
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
・天和、地和の判定がない
★C(保留)
★D(調査中)
・ロンが2回できる?
0351324
NGNG今の段階では、あまり詳しくいえなくてすみません。
勝ったり負けたりのAI対戦ががんがん出来るようになったら議論していきたいです。
>メンツの分け方・・・なるほろ。メンツやターツ抜いたりするのは、再帰を使っているのだから、ツリーになるほうが自然か。
再起構造の問題点は、通り過ぎたところの再評価が出来ないとこです。
例えば、頭緒抜いてから評価していますが、頭が無い場合を評価できません。
---345
123
の場合33以外に頭がない時、33を抜いて評価してしまい、面子二つが消えます。
これ以外にも、たくさんの状況があります。
また、評価も単純なポイントになりやすく、静的です。
0352324
NGNGちょんぼが多発するので、雀譜で見たところ正常でした。
時間がありましたら、見てもらえると嬉しいです。
下に正常だけどちょんぼになった雀譜と新しいAIのDLLです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=6
0353252
NGNGごめん。それ今デバッグしてた。
MJSim.cpp44行目
誤return j > 0 ? true : false;
↓
正return j == 0 ? true : false;
面前チェックで、面前の判定が逆。
0354252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_7/MJSim_000400.lzh
・MJTAKU構造体を変更。
・YamaとTsumoを廃止
・DoraとRestTsumoNumを追加
[注意]
上記変数を使って、ドラと残りツモを取得している場合は修正をお願いします。
上記変数を使ってない場合でもDLLをコンパイルしなおす必要があります。
・TakuDispをはずした。使用したい場合は修正が必要です。
・リーチしていてもチョンボになるのを修正。
・>>283さんのMJSinAI_v0.0.4.cppを同梱(デバッグに使ってるので)。
申し訳ないが、AIのコード修正、再コンパイルお願いします。
そのままだと落ちたり落ちなかったりする。←これがタチがわるい
0355252
NGNG突然落ちたり。MJSim終了時にエラーが出たり。
AIが変なアクション指示を返しても、本体側で修正しているため動くけど、
AI側は、関係ないメモリを書き換えている。
まぬけすぎ・・・ほかにもmemsetでsizeofに指定する構造体の名前を間違えたりとか、
ポインタの恐ろしさを十分に堪能した。ヤレヤレ。ポインタの無い国へ帰りたい。
あと、
�@DLLをいくつかコピーして
�A開発環境で開いているプロジェクトのDLLも(何も更新していなくて)同じもの
のとき、コピーしたDLLの分のメッセージもデバッガで拾えてしまう。
最初何が起こったのかワカランかった・・・
0356252
NGNGメンツの分け方・・・たしかに頭を抜く方法はまずい。う〜ん、どうやろうかなあ。
MJSimがある程度、安定したところで、
優先度B(の表示上の問題とか)は修正を保留にしてAIに着手しようかと。
その過程で、MJSimも徐々に直す予定。
Aのはもちろん即修正。
ドラの判定がおかしいのがまだ健在なので、これは何とかしたい。
表示もされてないし。でも、ドラの分ハン数がある場合もあるんだよなあ・・・・
0357324
NGNG卓表示ですが、一応0.0.4に対応しました。
必要な人だけ使ってください^^ そうそう、ドラデータがTAKUに入っていなかった^^;
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=8
まずは取り急ぎこれだけを。
0358324
NGNG0359252
NGNGまだ不親切だけど・・・
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=9&fi=no
>>357
乙。
表示だけじゃなくて、特定の状況を簡単に作れるAI開発支援がいるなあ・・・
今どうやってデバッグしているんでしょう?
0360252
NGNG0361252
NGNG・行数は固定。
・[]のところは書きかえない。河でも[]が使える。
・「>」があるところがツモ番のプレイヤー。
・配牌からのつじつまがあってないと、雀譜で再生できないが、まあ問題ないかな。
---------------------------
東2局 2本場 リーチ2本 ドラ9m5p ツモ残50
西家 MEGUMI 27000
北9p8p1m
[][][][][][][] 1m[2m]3m 中中[中]
>北家 27000
東1p[中]
3m5m5m9m3p6p9p1s4s5s7s白発
東家 27000
西9m(リーチ)1m
[][][][][][][][][][][][][]
南家 27000
7m6p[2m]
[][][][][][][][][][] 2p[][]2p
---------------------------
0362324
NGNGミスしていないと思いますが、よろしければ見ていただけると嬉しいです。
int Dora[4];//ドラ牌(表示牌ではない)。無効なところは0
int RestTsumoNum;//残りツモ数
0363324
NGNG0364324
NGNG前野は破棄してください。 m(_ _)m
データは正しく入っていました^^;
void TakuDisp(int Msg, int Index, MJTAKU *Taku); //<=====ここ
void CMJAI::Action(int Msg)
{
switch(Msg){
:
:
:
TakuDisp(Msg, m_Index, &m_AITaku); //<=====ここ
//呼び出し
AIAction(Msg, m_Index, &m_AITaku);
0365252
NGNGわかったあああ。謎は解けた〜。本題でないことで悩ませてスマン。
・修正方法
�@void TakuDisp(int Msg, int Index, CMJTaku *Taku); にする。
�A情報を取得
ドラを取得 Taku->GetDora(index);
ドラの数を取得 Taku->GetDoraNum();
残りツモを取得 Taku->GetRestTsumo() ←Numを付け忘れた・・・
・理由
Doraと、RestTsumoNumは、MJSimでは使っていなくて、
AIに渡す直前に書き込んでいるので、何にも入ってない。
なぜそうなっているのかというと、MJSimではドラと残りツモは山から読んでいるため。
動的に取れる情報は、動的に取ることで代入忘れを防いでいるつもり。
本来は使えなくすべきだが・・・
0367324
NGNG↓
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_10/MJAI.lzh
>表示だけじゃなくて、特定の状況を簡単に作れるAI開発支援がいるなあ・・
最初は、欲しいと思いMJSimを変更かけましたが、VUP等の変更が多いのと、
内部が思ったよりもランダムだったのであきらめました。
>今どうやってデバッグしているんでしょう?
私のプログラム作成の基本ですが。確認ルーチンや表示ルーチンが全体ソースの
2割ほど入っています。そこかしこに^^
なので、今ではその部分に助けられて、デバックも楽になりました。
今はある現象が発生するのを条件でハントし、関連情報がダダーーと出ます。
関連が多いのでデバックでは追ってられない感じです。
これが入っているDLLなので、しかもDEBAGモードで、何か起こったらいろいろ
出てしまう・・・^^;
0368252
NGNGMJSim 0.4.1
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_11/MJSim_000401.lzh
・チーの後、捨て牌がおかしいのを修正。
・ポン、チー時の捨て牌でツモ切りの指示がされた場合、一番左の牌を切るようにした。
・捨てられた牌を使わなくてもチーできるのを修正。
■既知のバグ
★A(緊急)
★B(早め)
・ドラの判定がおかしい。
・ドラのみでも上がれてしまう。
・リーチ後、ツモ切り以外ができる。
・リーチが2回以上できる。
・役牌は飜は追加されているが役名が表示されない
・チョンボのときに点数が減らない。
・ハイテイがつかない。
・ツモ上がりしたときの点数計算が正確でない。
・ダブルリーチがつかない。
・チャンカンができない。
・カンをした時、嶺上牌をツモったのがログに表示されない
・七対子の時、25符になってない
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
・天和、地和の判定がない
0369252
NGNGう〜む。たしかにassertとかいれとかないと、もうわけがわからなくなってくるなぁ。
作る前は、(役判定を除いて)せいぜい500行くらいの規模だと思ったんだが・・・
もう、その倍くらいになってもーた。
0370デフォルトの名無しさん
NGNG下記の手でリーチした後、
5m5m6m6m6m7m7m7m1p2p3p5s5s
7m の暗槓をチョンボ扱いにする。
0371252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_12/MJSim_000402.lzh
・ドラの判定がおかしいのを修正。
・ドラの役名が表示されないのを修正。
・役牌は飜は追加されているが役名が表示されないのを修正。
TODOリスト
★A(緊急)
★B(早め)
・カンをした時、嶺上牌をツモったのがログに表示されない
・リーチ後、ツモ切り以外ができる。ポンやチーなど。
・リーチが2回以上できる。
・チャンカンができない。
・チョンボのときに点数が減らない。
・リーチ後の待ちの変わる暗カンをしてもチョンボにならない。
・ハイテイがつかない。
・ツモ上がりしたときの点数計算が正確でない。
・ダブルリーチがつかない。
・七対子の時、25符になってない
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
・天和、地和の判定がない
>>370
了解。
0372324
NGNG変わってしまった。^^; 今までよりテンパルのが少し速くなったけど。
各パラメータ見直さないと、別の意味で変な打ち方に・・・・・・;;
0373デフォルトの名無しさん
NGNG0374324
NGNGまだ、手牌とドラしか見てないので、たまにフリテンします。
役を意識していない以外は、捨て牌も人間的な感じがしてきました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_13/MJAI.lzh
0375デフォルトの名無しさん
NGNG東風荘は送りカンが可能
0376252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_14/MJSim_000403.lzh
・ドラの判定がまだおかしかったのを修正。
・カンをした時、嶺上牌をツモったのがログに表示されないのを修正。
・リーチ後、ツモ切り以外ができるのを修正。
・チョンボのときに点数が減らないのを修正。
・ハイテイがつかないのを修正。
・カンした後、ツモが減っていないのを修正。
・ダブルリーチがつかないのを修正。
・ログで、局開始時のリーチ棒数が間違っているのを修正。
優先度高いやつと、簡単に直せるのを直した。
テンパイ時の待ちを列挙するプログラム無いかなあ。
河に捨てた牌での上がりかどうか、リーチ後暗カンのチェックに使いたいな。
>>374
・テンパイが速くなったかどうかって、何で見てる?できすぎ君使えないし。
・牌譜を見ていて気になったのは、ペンチャンを残してるところ。
ペンチャンは切ってしまった方がいいかなと思えるんだけど。これから?
0377デフォルトの名無しさん
NGNGおいおい、麻雀の素人が最強の麻雀プログラマを目指してるのか?
0378374
NGNG>テンパイ時の待ちを列挙するプログラム無いかなあ。
有ります。ちょっと待ってください。UPします。
>・テンパイが速くなったかどうかって、何で見てる?できすぎ君使えないし。
もう、これは、たくさん雀譜を見ていたから、としか言えない。
まあ、変な打ち回しが多数見えて、それがテンパイを遅くしていた。この調査中で
バグを潰した結果、治せる変な打ち回しがなくなったもあります。
>・牌譜を見ていて気になったのは、ペンチャンを残してるところ。
>ペンチャンは切ってしまった方がいいかなと思えるんだけど。これから?
この辺が今ままで作った処理の上限がうっすらと見えてる所です。小技で
対処しても面白くないので。これを、AI的に打開するには
「状況による牌の打ちまわしを行う。」です。
構想は有るけど、どのような形で何時着手できるかは不明^^;
これより、ポン・チイ・カン、ダマテンの方が先かな・・・・・
一通り完成したAIにもしたいし。
内部的には、やりたいことが細かく山済み状態^^;
例として
・フリテンに対する取扱いー>今の処理でフリテンの確率を調べる
・テンパイ形式の統計を取る。
・イーシャンテンの時の・・・・・・・・・・・・・・
0379374
NGNG>おいおい、麻雀の素人が最強の麻雀プログラマを目指してるのか?
その意味、わけ教えて。
私は、麻雀は弱い方です。^^; ぜひ参考にしたいです。
0380デフォルトの名無しさん
NGNG状況によってはペンチャンは有効な待ちになる
・手役が絡む
・4や6が4枚切れ
・煮詰まった状況での引っかけ
リャンメン信仰では最強とはほど遠い
0381374
NGNG下にUPしています。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=15
Hai[47] が判定したい手牌が入ります。13枚。
0382デフォルトの名無しさん
NGNG現在の麻雀は「棒テン、即リー、全ツッパ」が最強です。
0384デフォルトの名無しさん
NGNGそれはレートに対する御祝儀の比率によって変わる。
東風荘は御祝儀などないためその戦術は有効ではない。
0385374
NGNG東風荘でR2000出るAIが作りたい^^、私は少ししかやってないがR1500ぐらいだと思う^^;
東風荘連続でやる時間が無くて、中断しまくってRが下がってガックリでした。
0386デフォルトの名無しさん
NGNGつまり、東風荘で最強であればいいと言う事ですか。
ルールによって打ち筋が変化するようなものではなくて。
0388デフォルトの名無しさん
NGNG楽しみにしてます。
0389252
NGNG修正が、どのぃくらい効果があったか数値で見たいな。
リーチ率とか、リーチ平均順目とか。
目標は、最終的にはR2000だけど、まずはR1500の強さに挑戦かな。
東風荘(ラン卓)で数百試合以上やってR1500を維持しているやつは結構強い。
・リャンメンリーチ率が高く、
・先制2フーロ率も高く、
・きっちり降りて放縦率低めで、
・オーラスでまくり手を作ってくる。
これらを実装してようやくR1500だろう。
テンパイチェック関数ありがとん。
>>386
ひとつのルールでまともにやれるのを作るのにすら相当時間がかかると思う。
いろんなルールへの対応は、自分は全く考えてないなぁ。
>>380
それはもう少し先の話。つくりはじめたばっかりだし。
0390374
NGNG>修正が、どのぃくらい効果があったか数値で見たいな。
>リーチ率とか、リーチ平均順目とか。
私もそれが見たいです。昨日処理方法に少し悩んだので、処理の違う3つのAI
を作って、千数百試合3回して雀譜で見たけどほとんど同じ^^;
結局自分が気に入った処理にしました^^;
リーチ平均順目の差が見たい。
>それはもう少し先の話。つくりはじめたばっかりだし。
とても楽しみに待ってます。
0391252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_16/MJSim_000404.lzh
・統計ツールできすぎくんで読めるようにログを修正。
読めないログができたら教えてください。
できれば、どこかいかんのか検証してもらえると助かる。
MJAIに200試合くらいやらせて、できすぎくんで見たところ、
リーチ平均順目は10.5順(ちなみに自分(人間)は9.8くらい)。ほほぅ。
しかし、リーチ2面以上待ち率が悪く、10%(人間78%)。
相手がリーチに降りたり、リャンメンで追っかけられたときにキツイ。
>>390
>それはもう少し先の話。つくりはじめたばっかりだし。
これは、話の流れからしてMJAIのことだけど・・・
でも、僕も正月くらいで仕上げたいところ。
0392252
NGNGチェックついてた・・・
0393374
NGNG>リーチ平均順目は10.5順(ちなみに自分(人間)は9.8くらい)。ほほぅ。
できすぎくん初めて使います。いいですねこれ。
さっそく最新版でやりました。リーチ平均順目は10.9順に落ちましたが。
>しかし、リーチ2面以上待ち率が悪く、10%(人間78%)。
ピンフ複合率かなが33.8に上がりました。約350試合 ↓にDLLをUP
ダマテン機能を追加すればもっと上がると思います。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_17/MJAI.lzh
変更点は
・フィルテンを無くしました。
フリテンに付いては今のでもいいのですが、実は不満で、もっと調査し賢く対処したい。
・役を理解し役に手配を誘導する、を下の役で追加。
タンヨウ・ピンフは手なりで。
// 役牌 場風、自風、白発中 (ポン機能まだ無し、早く入れたい)
// 3アンコ4アンコの分析
// トイトイの分析
// イーペーコの分析
// チイトイの分析
// 国士の分析
__役の誘導について、たまに手配の入り方で、役と役の間で手がふらふらする
現象があります。(人間でもたまにあり^^)これは前回のAI的対策に期待かな。
>でも、僕も正月くらいで仕上げたいところ。
うお、速い・・・速く上がって点の取れるAIにしないと。
0394374
NGNG0395デフォルトの名無しさん
NGNG七対子のみを狙います。
フリテンの処理がまだ不十分です。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=18
0396デフォルトの名無しさん
NGNGばっちり七対子上がってますね、参考になります。
0397374
NGNG作りこんだ部分が3000行超えたので、整理整頓のリファクタリングしてる^^;
今の上にもう1枚処理被せたいし、入れたいのは状況管理。
0398302
NGNG結局1から作り直した…
でも弱い…
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_19/MJAI.lzh
0399252
NGNGう〜む、変わってないような気がするんだけど。
ピンフ複合率の見方がよくわからんなあ。
というのも、詳細集計ボタン押して、「詳細データ」を見ると、
リーチ時の2面以上待ち率(リャンメン・ノベタン待ち)は7%程度になっている。
ピンフはここでしか複合しないと思うんだけど・・・
で、2面以上待ちのとき、和了率は72%で、クソ待ちのときは、同45%。
2面以上待ちでリーチすれば、クソ待ちに対して1.5倍くらい上がれる。
今ほとんどがクソ待ちなので(93%)、
(即リー全ツッパの場合)今より1.5倍上がれるように改良できる。
>>395
今後さらに強くしていくんでしょうか?
0400252
NGNG次のバージョンでは、
・フリテンはチョンボにする。
・ドラのみで上がったらチョンボにする。(今は1ハン以上あるかどうかしか見てない)
・チャンカンをできるようにする。
・AIInterfaceVersionを呼び出すようにする。
をやる予定。
・AIInterfaceVersionに関して
インターフェース追加でごめん。
今後、新しいインターフェースを決めても、
前のインターフェースをもつAIも変更無しで同時に使用可能にするためにつけたい。
もちろんルールが変わったりしたときは、同時使用不可だけど(できても意味が無い)。
---
extern "C" __declspec(dllexport)
int AIInterfaceVersion()
{
return 1;
}
---
AIがサポートするインターフェースバージョンを返してください。今のは1。
・チャンカンに関して
いまのところ、カンしたときにリアクションできないが、
リアクションメッセージを送るようにする。
最後のアクションが加カンのときだけロン可能。誤ロンはチョンボ。
暗カン、明カンのときは、アクションに何か指定しても無視する。
0401デフォルトの名無しさん
NGNG七対子だけをねらってるので、あんまり強くはならないと思いますが、
改良はしてくつもりです。
当面の予定
フーロの確認
後半でのダマテン(リー棒分もったいないので)
できれば、途中でアンコが増えたら、スーアンコ狙いへのシフト
0402374
NGNGできすぎくん始めてみるので、みまちがえてる?
下に500試合の画面UPしてみました。何処でしょう
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_20/MJAI.gif
0403252
NGNG普通の上がりのほうもよろしく。
>>402
「詳細データ」というボタンが右側の上から2番目にあるので、
これを押して出てくる画面も見せてもらえる?
僕も見方が完全にわかっているとはいえんなぁ・・・
0404374
NGNG先ほどのデータはもう無いので、新しく作ったら、確かに詳細データの
2面率5.6 クソ待94.3、確かに・・・・・・・・改善の必要性あり。
上がってる点数も低いし、まだまだです。
>>398
対戦してみました、ほとんど同じ感じ、対戦相手がいるとやりがいあり。
私とは方式が違う感じがします。
0405252
NGNGできれば、名前を付けてほしいな。
ちなみに自分のは、ryoko(涼子)という名前の予定。デビューできるかなぁ。
名前を発表しといてリリースできなかったらかなり恥ずかしいかも・・・
0406302
NGNG名前ですか・・・
今のところは302にしておきます
>>398を少しだけ修正
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_21/302v011.lzh
バグ報告
2順目にリーチしてもダブルリーチになる
タンヤオが判定されなくなっている
0407デフォルトの名無しさん
NGNG流局時の七対子の判定がおかしいような気がします。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=22
の MJSimAI2ってテンパってません?
0408デフォルトの名無しさん
NGNGJavaでないすか?
0409デフォルトの名無しさん
NGNG共にがんばりましょう〜
女の声は二人ほどいただいたけど、男の声で迫力のある声はないっすかね・・。
大きな会社を設立したら、小島プロなんかに頼みたい・・・アニメーションも
ちゃんとしたスタッフ集めて作って。エフェクトも。
いろいろ夢は広がります。
0410デフォルトの名無しさん
NGNG何かをツモって今手牌は14枚です
・今見えてる牌から残りの牌の残量を知る
・あらゆる可能性の確率を求める
(タンヤオやホンイツが出来るまであと何牌必要でどのくらいの確率があるか・・など)
・確率と出来上がる役のバランスから最善の牌を探して切る
ここまでが一人用ってとこか
とにかく、もっとも効率的に高い手を作る手段を探すプログラムだね
これだけで一般人レベルにはなると思う
0411デフォルトの名無しさん
NGNG鳴いた後の上がる可能性と役の高さを考慮して最善の効率を判断・・と
裏ドラの可能性も考慮していかないといけないな
裏ドラに何が来る可能性が高いか、見えてる牌から確率を求めて、乗る可能性が50%なら0、5藩として考えるなど
ここまででほんとに牌効率の考えは終わりかな?
0412デフォルトの名無しさん
NGNGこれは全パターンを考慮させてもいいかな
(リーチ、タンヤオの確率で一つ。2藩だからx2する)
(リーチ、タンヤオ、ピンフの確率も求める。x3する)
(ホンイツ、中だとx4)
時間かかりすぎ?
0413通りすがりの名無しさん
NGNG必要な役までの早さを比較するのに
そんなに時間はかからない。だけど
>最善の牌を探して
この一文の中身だけが思考処理であって、あとは検証作業程度のもの。
0414252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_24/MJSim_000500.lzh
・AIInterfaceVersion関数を呼び出すようにした。
AIに関数の追加をお願いします。
とりあえず関数が無くても止まらないようにしてあります。
・2順目にリーチしてもダブルリーチになるのを修正。
・タンヤオが判定されなくなっているのを修正。
インターフェース追加スマン。
とりあえず、これだけ先に。
>>406
これらのバグは、最近修正したところが修正失敗してたのが原因。うぅ〜〜〜・・・
>>407
これもこちらのバグ。テンパイチェックに判定がない。修正します。
>>408
javaのは調べてないのでワカラン。
0415252
NGNG★A(緊急)
★B(早め)
・捨てた牌で上がるのがチョンボにならない。
・ドラのみでも上がれてしまう。
・チャンカンができない。
・流局時の七対子と国士のテンパイチェックがおかしい。
・リーチ後の待ちの変わる暗カンをしてもチョンボにならない。
・ツモ上がりしたときの点数計算が正確でない。
・七対子の時、25符になってない
・天和、地和の判定がない
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
0418七対子
NGNG七対子のみであがれないもよう。
ツモ、リーチ、ハイテイ、ホンイツ等がからまないと上がれないような。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=25
0420252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_26/MJSim_000501.lzh
・フリテンがチョンボにならないのを修正。
・ノーテンリーチ時に流局してもチョンボにならないのを修正。
・ドラのみでも上がれてしまうのをチョンボになるように修正。
・流局時の七対子と国士のテンパイチェックがおかしいのを修正。
・河を絶対値で取ってないところがあったのを修正。
麻雀に大きく支障のありそうなやつを修正。
河はマイナスの値が入っていることがある(鳴かれた牌)ので、
フリテンチェックのときは、絶対値を取ってから比較してください。
それと、リーチ位置は、河の添え字で使うときは-1する必要がある。
この2つはバグになりやすいと思う。これは仕様の方に問題がある。^^;
0421252
NGNG>>418
過去ログ見てみたら、>>314の一発の方のバグ報告を思いっきり見逃していた。
しらべてみます。
0422デフォルトの名無しさん
NGNGとりあえず頻繁に更新があるのって嬉しいね。
期待してます。
0424七対子
NGNG//優先度の高いアクションを採用
for(i = 0; i < 4; i++){
if(m_Taku.Player[r].Action.Type < m_Taku.Player[index[i]].Action.Type){
r = index[r];
}
}
ところの
r = index[r];
が
r = index[i];
のような気がする。
0425252
NGNGソレダ・・・
例えば、indexに2、3、4、1と入っていて、最初r=2。
3(index[1])が2より優先度が高いとき、
rには4(index[r]つまりindex[2])が代入されてしまい、
3のインデクスのプレイヤーがロンで、4のプレイヤーが何もしないだった場合、
3のプレイヤーのロンは無視される。ぐはっ・・・
バグ修正ありがとん。
0426252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_27/MJSim_000502.lzh
・AIが指示したアクションを無視することがあるのを修正。
あの部分自分でも、単純明快な書き方じゃないから、よくないなとおもってたんだけど・・・
でも、上手い書き方を思いつかんかった。
ところで、残りのバグは、ぼちぼち直すことにして、AIを作る予定。
★B(早め)
・チャンカンができない。
・リーチ後の待ちの変わる暗カンをしてもチョンボにならない。
・ツモ上がりしたときの点数計算が正確でない。
・七対子の時、25符になってない
・天和、地和の判定がない
・東風荘に合わせるなら、役牌の役名を(自風、場風、白、発、中)に分けたほうがいい
0427
NGNGてんぱって2であがった時の
符計算が良くわかんないです
リャンメン待ちともタンキ待ちとも取れなくも無いです
ピンフの時はリャン面待ちじゃ無いと成立しないし
クイタンだとタンキだと待ちによる符が+2になります
この場合高い方を選択すればいいの?
0428デフォルトの名無しさん
NGNG・フリテン時のツモ上がりするとチョンボになる。
★B(早め) 修正項目に追加よろしく。
AI作成優先でOKです。
0429デフォルトの名無しさん
NGNGルール上は、あがった人間が申告した点数になるので、
普通は両方の得点を計算して、そのうちの点数の高い方にする筈。
0430デフォルトの名無しさん
NGNG単騎待ちに取った瞬間に平和は消える
平和とは符が基本符のみの役だから
結論
両方の得点を計算して高い方を選択するのだが
ほとんどの場合、平和でなければ単騎待ちに取る
0431252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_28/MJSim_000503.lzh
・暗カン、加カンした後、手牌がおかしくなることがあるのを修正。
・チャンカンできるようにした。
・フリテン時ツモ上がりするとチョンボになるのを修正。
・チョンボの時、ログにチョンボの内容も出すようにした。
・役無し→チョンボ
・フリテン→チョンボ(フリテン)
・ノーテンリーチ→チョンボ(ノーテンリーチ)
カンのバグが痛いので、これだけ直すつもりだったけど、
勢いあまってチャンカンもつけた。
>>428
というわけで、直しました。
0433七対子
NGNG0435デフォルトの名無しさん
NGNG手出しかツモ切りかもちゃんと考慮して
0436デフォルトの名無しさん
NGNGある程度は書けるんじゃないかな。
2m2m2m3m 2s2s2s 2p2p2p 7p8p9p みたいな形で
4mを既に切っている場合で3mでロンアガリは出来ますか?
�@リーチ後に4mを切ってる場合
�Aリーチしていてリーチ前に4mを切ってる場合とか
�Bリーチしてない場合
�@の場合アガリ放棄でツモアガリ以外チョンボでいいと思うのですが
�Aの場合1mと4mでロンはフリテンチョンボだと思います
3mでのロンはタンキ待ちなので
フリテンにはならないような気もしないでもない
�Bもロンできそうな気もするけど
一般的にはどうなってますか?
0438デフォルトの名無しさん
NGNG和了出来る牌の一部を自分が切ってるならロン和了は全部チョンボ
ツモ和了はOK
リーチ後に一度見逃してその後ロン和了の場合もチョンボ
ツモ和了はOK
ロン和了出来ない牌が出て見逃し、同巡に和了出来る牌をロンしてもチョンボ
ツモ和了はOK
0440252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_29/MJSim_000504.lzh
・リアクション時に、最後のアクションが間違っていることがあるのを修正。
0.5.3との差分のみ。
このバグきつい。他家のアクションを見てるAI作ってた人(いるか?)スマン。
>>432
了解。
しかし、麻雀ってルールが多いなあ。
チャンカン無し、とか多少けずったルールにしても良かったかも
(起こりうる可能性が少なく、麻雀の面白さを減らさないもののみ)。
AIのコーディングが減らせる。
まあ、チャンカンを当たれるかどうかで、他のAIと強さが逆転するとは思えんけど。
>>436
ある程度って、どの程度?
プログラムで作れるかどうかは置いといて、理論的にできるかどうかの検証が先かな。
どんな状況で、どこまで予測可能なのか。強さに影響がある程度に使えるか。
0441七対子
NGNG>>438の
ロン和了出来ない牌が出て見逃し、同巡に和了出来る牌をロンしてもチョンボ
ツモ和了はOK
だと、カタテンで同順じゃなくてもチョンボでない?
正しくは
ロン和了出来る牌が出て見逃し、同巡に和了出来る牌をロンしてもチョンボ
ツモ和了はOK
ようは、ヤマゴシってことでしょ。
東風ルールだとどうでしたっけ。
0442デフォルトの名無しさん
NGNGおかしくないだろ
222345四五六七八(345)で九が出ても和了できないから見逃し、同巡に三が出てロン
チョンボだよ
0444デフォルトの名無しさん
NGNG何を聞きたいの?
0445男チャ漬け ◆VmNuOcUpJs
NGNG0446302
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_30/302v012.lzh
チョンボ判定追加+α
0447デフォルトの名無しさん
NGNG0448252
NGNG0.5.3との差分のみ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_31/MJSim_000505_sabun.lzh
・河に牌が無い時、不正なメモリを参照していたのを修正。
・終了するときに、キー入力待ちするようにした(いきなり終わらないように)。
1順目に鳴きがはいるとやばいかも、ということで修正。
あと、readmeにアクションのコーディング例を書いてみた。
>>446
v011より微妙に強くなっているみたい。
できすぎくんのパラメータでは差が見えんけど・・・
0449397
NGNG前にと新しいので2つの評価方法が出来そう、強いは分かりませんが。
それなりに複雑なので、直ぐに結果が出ないところが辛いところ。
今年中に新しい方法の基本を完成したい。
0450302
NGNGTenpai.cppのBOOL CheckKokushi(void)で
国士無双の判定方法が間違ってます
(間違いの責任は私だったりする…?)
0452252
NGNGAIの再利用形態について。
(今、これに関して何かするつもりは全くない。予定もない。)
・MJSimのAIを、ブリッジdllをはさんで「まうじゃん」と接続。
新しく麻雀ソフトを作らずとも、自分(人間)が、自分や他の人が作ったAIと対戦できる。
まうじゃん--ブリッジdll--AI
・MJSimのAIと、MJexeIO.dll(>>217で紹介されている)をブリッジするソフトを作って、東風荘へ接続。
ブリッジexe--+--AI
. +--MJexeIO.dll--東風荘クライアント
(東風荘の状態をMJexeIO.dllで受け取ってAIに渡し、AIの判断をMJexeIO.dllを使って東風荘に反映)
いまのインターフェースは、これらのことを考えて作ってないので、簡単にはいかないと思うけど。
まあ、強いAIが作られるめどが立ってから検討すればいいと思う。優先順位低い。
0453302
NGNGBOOL CheckKokushi(void)
{
int Total = 0;
int haiJ[13] = { 1, 9, 11, 19, 21, 29,
31, 33, 35, 37, 41, 43, 45};
for (int i = 0 ; i < 13 ; i++) {
if ((Tehai[haiJ[i]] != 1) && (Tehai[haiJ[i]] != 2)) {
return FALSE;
}
Total += Tehai[haiJ[i]];
}
return (Total == 14);
}
これでいかがでしょうか
0454デフォルトの名無しさん
NGNGBOOL CheckKokushi(void)
{
int haiJ[13] = { 1, 9, 11, 19, 21, 29,
31, 33, 35, 37, 41, 43, 45};
for (int i = 0 ; i < 13 ; i++) {
if(!Tehai[haiJ[i]])
return FALSE;
}
return TRUE;
}
これでいかがでしょうか
0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNG{
int haiJ[13] = { 1, 9, 11, 19, 21, 29,
31, 33, 35, 37, 41, 43, 45};
int janto_num = 0;
for (int i = 0 ; i < 13 ; i++) {
if( (Tehai[haiJ[i]] == 0)){
return FALSE;
}
if( (Tehai[haiJ[i]] == 2)){
janto_num++;
}
}
if(janto_num != 1){
return FALSE;
}
return TRUE;
}
0458デフォルトの名無しさん
NGNG雀頭の有無の表現をBOOL型にして、最後のif節を
return janto;
とした方がいいのでは。
0459457
NGNG{
int haiJ[13] = { 1, 9, 11, 19, 21, 29,
31, 33, 35, 37, 41, 43, 45};
BOOL janto_num = FALSE;
for (int i = 0 ; i < 13 ; i++) {
if( (Tehai[haiJ[i]] == 0)){ // 条件1
return FALSE;
}
if( (Tehai[haiJ[i]] == 2)){
janto_num = TRUE;
}
}
return janto;
}
頭が複数個存在した場合は、自動的に条件1を満たさなくなるので、これでOKか。
0460457
NGNGs/junto/junto_exit/g
で、すまん
0461デフォルトの名無しさん
NGNG0463252
NGNG使えるアルゴリズム(というかもうできてるやつ)はないかとWeb検索。
将棋AIを作るスレがあったのでみたら、将棋AIの方は、
ちゃんとした大会があって、使えるアルゴリズムが確立されているようだ。解説サイトもいっぱい。
麻雀は、>>266で書いたところ以上に使えるのは、やっぱりみつからん・・・
・comjong.com
http://www.comjong.com/
http://www.comjong.com/old/index.htm
コンピュータを利用した麻雀の研究を行っているサイト。工事中多い。だいぶ前から変わってないし。
・激辛「ブー麻雀」〜思考エンジンの解説
http://www.arcx.net/mutech/MTEngine.htm
・麻雀の意思決定とその分析
http://hc2.seikyou.ne.jp/home/oo/fushigi/mahjong.html
ゲーム木を麻雀に使ってる。いみがよくわからん。これつかえる?
・scene.research.station
http://www.kmkz.jp/mtm/log_mahjong.html
日記+リンク集みたいなの。
0464252
NGNG・ソフトウェア最終処分場
http://www65.tok2.com/home2/pentawar/
麻雀ゲームを作るためのライブラリがある。MJSim作る前、結構探したつもりだったが。
これをつかえば、あんまりコードを書かなくて良かったかも。ソースは無し。
雀-X(ジャン-クロス)
http://www.jan-x.jp/
麻雀AI開発ライブラリ。モノは無いのか?
http://backno.mag2.com/reader/Back?id=0000119083
メールマガジンで、AIを解説しているが、2.5ヶ月連載して具体的な話がまだない。
0465デフォルトの名無しさん
NGNG>AI開発、つまり中。
最初これ読んだとき、
「 AI 開発、つまり "チュン"。」
と読んでしまい、「 "AI" と "中" の間の深い関係とは一体何か?」と
一瞬考え込んでしまった・・・
0466252
NGNG麻雀AIの基本は、期待値計算だろう。
>>266のHPにすべて書いてあることなんだけど、本来は、
・シャンテン数を下げるものも(というか、すべて)計算する必要がある。
・その他の場の状況を、数値(点数)にして掛ける必要がある。
状況を点数にするのも難しい。他家リーチに対して、その牌を捨てることは何点といえるのか?
期待値計算を使って、例えば、ペンチャンを先に落とさせるには、
シャンテン数を下げる形も計算しなければいけない。
しかし、計算量が膨大(具体的に調べてないが)になってしまいできない。
計算量は減らし、なおかつ同じような結果を得るには?
0467252
NGNGこの問題に対して、
・状況によって、どこまで(何手先まで)読むか決める。
・何を「調べない」か絞る。
で、何とかやっている。将棋AIのやり方は参考になると思う。
麻雀で使える上手い方法をかんがえよう〜。
「おまいら最強の将棋プログラムしてみろよ Part3」
http://pc2.2ch.net/test/read.cgi/tech/1064984089/
ちなみに、
「将棋ソフトを作ると将棋が強くなるか?〜将棋ソフトの仕組み〜」
http://homepage1.nifty.com/Ike/usapyon/20030806.html
結論としては、AIは作者より強くなるが、
人間とAIの思考法は違いすぎて、作者は強くならない。へ〜〜〜。
人間的なAI(人間がその手の重みを勝手につける)を作る方法もあるだろうけど、
その場合AIは、作者以上にはならないだろう。
0468253
NGNG>>466
私もAI素人ですが^^;
>計算量は減らし、なおかつ同じような結果を得るには?
もうこれは、練りに練ったアルゴリズムとしか言えない^^;
私の場合、最初から考えても何も出ないので、まずはシャンテン数を下げる処理を、
その結果ペンチャンが残る^^;。今は前よりよさそうなアイデアが出たので作り直し中
正当にペンチャンが切れる処理を目指してます。
ただ、それでもまだまだなのが分かっていますが一応の完成を目指さないと。
>麻雀で使える上手い方法をかんがえよう〜。
実現できる範囲で先ずは作成中〜〜〜^^;
>人間とAIの思考法は違いすぎて、作者は強くならない。へ〜〜〜。
逆の意味で作者より強くなる、この辺がAIを作る上での楽しさだと思っています。
0469253
NGNG将棋AIと麻雀AIでは大きく違いが有ります。
・将棋はゲーム情報がAIと人間は同じである。
(盤面の情報量は同じ)
・麻雀はゲーム情報が人間よりAIの方が多くの情報を扱える
(卓の情報量を人間は総て計算できない、超人除く)
この点は、麻雀AIの方が有利であると言えます。
0470デフォルトの名無しさん
NGNG459をコピペしても動きません。
460はPerlの置換表現で、それぞれ
まず、junto_numをjuntoに
そのあと、juntoをjunto_exitに
置換することを表します。
要するに、459はBOOL型の名前が統一されていないということです。
もっとも、juntoはjantoの誤記でしょうが。
0471252
NGNGそれは違うと思う。
将棋の方がよほど人間には処理できない情報量ではないかと。
・とにかくやれることが多すぎる。手駒があるときは特に。
・さらにその1手毎に数十手近く先を読む必要がある。
・相手がこちらの予想どおりの手をさすとは限らない。
将棋をやるとき人間は、そのほとんどの情報をはしょっているだけだろう。
麻雀の場合、
・やれることは、14枚のうちから捨てることと鳴き。
・先読みも、自分のツモと鳴ける状況を足しても20手くらい。
・相手が起こすアクションのうち、こちらに影響のあることはわずか。リーチや2鳴きくらいか。
0473253
NGNG多分、思い違いおしていると思う。
頭の中やその先でやらなければいけないこと指してはいないです。
今見えて扱える情報量の話ですよ、その先は意味していないです。
頭の中やその先まで考えたら、将棋の方が複雑なのは当然です。
0474253
NGNG麻雀AIの方が将棋AIより、人間に対してほんの少し優位である
を意味しています。
0475デフォルトの名無しさん
NGNGというか存在を表すならexistだしさ(;;)
0476253
NGNG将棋AIと麻雀AIでは違いが有ります。
・将棋はゲーム情報がAIと人間は同じである。
(今見える盤面の情報量は同じ、だから対等の立場で戦う必要がある)
・麻雀はゲーム情報が人間よりAIの方が多くの情報を扱える
(今見える卓の情報量を人間はゲーム中に瞬時に総て計算できない、超人除く、
だからほんの少しだけ麻雀AIの方が有利である。)
この点は、麻雀AIの方が将棋AIより、人間に対してほんの少し優位である
を意味します。
0477デフォルトの名無しさん
NGNG完先だとチョンボ
後付けありだとあがれる。
0478252
NGNG意思疎通できました。
つまり、コンピュータの
・数え上げ(速度)能力
・膨大な記憶力
が、ゲーム(将棋と麻雀)に与える影響について論じていると。
そのうち、「現時点の場面の把握」に限れば、麻雀の方が影響が大きいということか。
0479デフォルトの名無しさん
NGNG0480253
NGNG前の手配評価は横に広い方法で評価を行っていた。
今回はこれに加え、枝切りで奥に入る探査を作っています。
2手先とか3手先の定義をします。
ツモる <ーーーーこれが始まり。
捨て配を選ぶ <−−−これが1手目。
仮想ツモ牌を作る <ーーーこれが2手目。
捨て牌を選ぶ <−−−これが3手目と定義します。
前回の探査評価は1手目を選ぶ評価です、これだけでも全を評価するのは大変。
今回はこれに3手先5手先N手先が読めるようにしています。
ここまで来ると、爆発的に種類が増えてくるため、枝切りが必要になってきます。
処理時間を短くするため、当面3手先までの評価を作成中、一応枝狩りがうまく機能
しているようなので、そこそこに速く動きます。うまくいけば、条件により5手先までいけそうです。
問題は先読みをする事では有りません。先読みそのものはそれ程難しくなく、
その結果をいかに評価して最善手を選ぶかでしょう。
また、以前読んだ結果を再利用して先読み処理を数分の1に出来そうですが、
次の時にでも。今は3手先読みの統計を取って評価を決めようとしてます。
0481253
NGNG因みに3手先詠みを入れた今でも1局は平均0.1〜0.3秒程度です。
東風荘だと、一手に1〜2秒掛けてもよさそうなので、もっと奥まで読みができるかな^^。
枝もそんなに切らなくてもいいかも、私の古いノートPCだと遅いので、今一ですが。
0482デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1072883528/
海外でよく使われていうる掲示板スクリプト
専用のオフラインリーダー作って下さい。
必要な条件はID、PASSを管理できること、
OpenJaneみたいな三面型の見た目。
簡単にローカライズできるように言語ファイルを採用
0483252
NGNGはやいなあ。こちらは、まだまだ・・・
1手読みと深読みでは、数百試合以上での平均順位はどのくらい変わったのでしょうか?
また、できすぎくんのパラメータ(和了率、リーチ率、リャンメン率)にどのような変化が現れました?
深読みの課題は、
・有効な捨て牌を限定する方法(牌を捨てるとき)
・有効なツモ牌を限定する方法(牌をツモるとき)
・手牌の評価
これらがまずいと、1手読みとあまり変わらないか、むしろ悪くなると思える。
そもそも1手読みでも問題ないのでは?てなことを考え中・・・
0484252
NGNG深読みすることで、自然にペンチャンを落とし、リャンメンに変えたりすることができるのだろうか。
・有効な牌を限定する方法(将棋AIでは「前向き枝刈り」というらしい)
シャンテン数を見る方法はダメなので、その他の方法が必要。
明らかにまずいメンツ、リャンメンターツ落としは読まないとしても、
枝をあまり増やさずに、かつ、有効な枝を刈ってしまわないようにする必要があるが・・・
麻雀の何切る問題のような難しい局面では、リャンメンターツ落としが有効であるときもある。
・手牌の評価
手牌の評価は、「統計」ということだけど、将棋AIで言う3手先の局面の静的評価関数
(麻雀では期待値?その手牌になる可能性×見込み点数×その他)
の結果の統計でしょうか?これがいまいち、どう作っていいのかわからない。
手牌を入れると、捨てる牌と評価関数の点数を表示するだけの、
何切る専用コマンドラインアプリは、作り始めてすぐに停滞w。
最近読んだもの。
「コンピュータ将棋の基礎知識」
http://www.hakusa.net/shogi/computer/algo/1.htm
「コンピュータ将棋の基礎」
http://www02.so-net.ne.jp/~kakinoki/kiso.htm
「将棋プログラムの作り方」
http://homepage1.nifty.com/Ike/usapyon/HowToMakeShogiProgram.html
「将棋AI YSS7.0の技術的な解説」
http://www32.ocn.ne.jp/~yss/book.html
「将棋AI 激指の探索アルゴリズム」
http://www.logos.t.u-tokyo.ac.jp/~gekisashi/algorithm/index.html
頭痛くなってきた・・・
0485252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_32/MJSim_ReadMe_000505.lzh
ごちゃごちゃしたReameをみて、AI作成の意欲を無くしたらまずいと思って。
結局、内容はあんまり変わってないんだけど。
0486デフォルトの名無しさん
NGNG深く読むのではなく、現在(あるいは数順後の)「受けの多さ」を数値化することで
枝狩りすることは可能かも。
もう読んだと思うけど共謀数による探索のとこね。
詰め将棋解析プログラムなんかはこの方法。
麻雀は自分の手牌のみを考えるならば、指し将棋より詰め将棋の方が似ているので
ちょっとした工夫で格段に強くなる可能性はありますね。
0487253
NGNG>1手読みと深読みでは、数百試合以上での平均順位はどのくらい変わったのでしょうか?
まだ1手目の評価だけしか打ててないです^^;前の手牌の評価がより広くなって、
10個以上のパラメータが千数百〜数百と出てくるので、それをどの用に評価するのか考え中。
自分の感覚だけの評価では、不透明感が多すぎで。
>・有効な捨て牌を限定する方法(牌を捨てるとき)
>・有効なツモ牌を限定する方法(牌をツモるとき)
これに付いては、手牌評価が詳しい分いろいろな方法が見えてます。が、どれが良いかは
場数を踏むしかないかな〜〜〜
>・手牌の評価
先読みした結果の手牌評価が今の課題。理解するために、統計処理プログラム作ってる^^;
>これらがまずいと、1手読みとあまり変わらないか、むしろ悪くなると思える。
>そもそも1手読みでも問題ないのでは?てなことを考え中・・・
これに付いては次の感想を。
・前の手配評価処理の限界を感じている、ただし、よりよくできる方法も分かってはいるが
それをする為には、今までより大変かもしれない。また、パラメータいじくるのも飽きた^^;
新しいことをやりたい、枝狩り方法のいいアイデアも浮かんだ等々で^^
(作った現在ではは、枝狩りも幾つかの方法ありで、上の説明参照)
・ペンチャン落としの有力な方法として、先読みがあると考えている。
です。
つづく
0488253
NGNG>深読みすることで、自然にペンチャンを落とし、リャンメンに変えたりすることができるのだろうか。
それをする為に作っているがいまだ不明。
>枝をあまり増やさずに、かつ、有効な枝を刈ってしまわないようにする必要があるが・・・
ここが、腕の見せ所だと思う、今は暗中模索。
>手牌の評価は、「統計」ということだけど、将棋AIで言う3手先の局面の静的評価関数
これは、評価が統計ではなく、評価関数を作るために(自分が理解するために)統計を
取っている状態です。
>(麻雀では期待値?その手牌になる可能性×見込み点数×その他)
>の結果の統計でしょうか?これがいまいち、どう作っていいのかわからない。
「可能性」×「その他」このあいまいな言葉が具体的になったら、分かると思います。
今一どの部分をさしてるのか不明で、答えられない。
見込み役は多少考えていますが、見込み点数はまだぜんぜん入っていないです。
0489253
NGNG>「コンピュータ将棋の基礎知識」
>http://www.hakusa.net/shogi/computer/algo/1.htm
>「コンピュータ将棋の基礎」
>http://www02.so-net.ne.jp/~kakinoki/kiso.htm
>「将棋プログラムの作り方」
>http://homepage1.nifty.com/Ike/usapyon/HowToMakeShogiProgram.html
>「将棋AI YSS7.0の技術的な解説」
>http://www32.ocn.ne.jp/~yss/book.html
>「将棋AI 激指の探索アルゴリズム」
>http://www.logos.t.u-tokyo.ac.jp/~gekisashi/algorithm/index.html
紹介有難うございます。
いま少しさらっと読んでみました。私のは、まだまだですね。
まあ、私なりの方法でゆっくりやろうと思ってます^^
感想としては。
・AI理論の大枠は似ているが、現実方法はずいぶん違うかな。
将棋とチェスが違うように、麻雀はもっと違うかな、な感じ。
・探査方法ですが、一部前向き枝狩りと、独自の枝狩り方法かな。
全部の理論を理解していないので、他の方法に似てるかもしれません。
・探査木の作り方は、縦探査・横探査両方を使ってます。
読みきってないので、見落としていたかもしれませんが、探査方法やその説明は
有りましたが、個々の面の評価の仕方についてはあまり書いて無かったのが残念。
0491252
NGNG共謀数については、わかりやすい解説が見つからなかったけど、
最初は読む深さを1にしておいて、ある評価関数を使って、
動的にもうひとつ深く読むかどうか決めるというもの、かな。
使える気がする。
>麻雀は自分の手牌のみを考えるならば、指し将棋より詰め将棋の方が似ているので
新しい視点だ。これも思いつかなかった。
相手玉の動きを封じていって、最終的に玉を動けなくする詰め将棋の様子が、
麻雀で手牌を上がりやすい有望な形を探索しながら、
上がりに向かっていくのに似ている気もする。これから検証しよう。
0492252
NGNG>まだ1手目の評価だけしか打ててないです^^;前の手牌の評価がより広くなって、
>10個以上のパラメータが千数百〜数百と出てくるので、それをどの用に評価するのか考え中。
10個以上のパラメータというのは何のパラメータ??
同じメンツで打ってみて、(前バージョンと最新バージョンで)
「できすぎくん」で見たときの和了率とかが、変わったかどうかということなんだけど。
僕がまた勘違いしてる?
>これは、評価が統計ではなく、評価関数を作るために(自分が理解するために)統計を
勘違いでした。
>「可能性」×「その他」このあいまいな言葉が具体的になったら、分かると思います。
・可能性は、「その局面での有効牌/その局面で山に残った枚数」。要するにツモってくる確率。
・その他は、他家リーチとか。これは後まわしかな。
かな。
0493252
NGNG>・AI理論の大枠は似ているが、現実方法はずいぶん違うかな。
多分、実際は同じくらいの感じ方をしているとは思うけど、
ぼくは、表現的には「ほとんどパクリで良いと思っている」としたい。
>・探査方法ですが、一部前向き枝狩りと、独自の枝狩り方法かな。
木がMiniMaxではないので、後ろ向きな枝刈り(刈っても同じ結果になる)は、
独自の方法が必要かな。良ろしければ発表してください。
>有りましたが、個々の面の評価の仕方についてはあまり書いて無かったのが残念。
個々の理論の特徴のことかな?↓のやつはどうでしょう。
「ゲーム木の探索問題」
http://tt.sakura.ne.jp/~suzu/search_problem/index.html
これらの理論は、現実的な問題とは切り離されているので、
さまざまなゲームに適用できるようだ。
理論の名前をぐぐると、オセロAIのページとかも見つかる。
より麻雀に近いゲームのAIがあれば、そちらのほうがパクリやすいだろう。
「オセロプログラムの作り方」
http://hp.vector.co.jp/authors/VA015468/platina/algo/index.html
なんか調べる範囲が広がって、わけがわからなくなってきた感じもする。
それと同時に、僕の脳では限界ラシイ。
0494252
NGNG使えるんだろうか?
これをつかった将棋AIがなさそうなところを見ると、まだ使えないのか?
「ニューラルネット入門」
http://www.neurosci.aist.go.jp/~kurita/lecture/neuro/neuro.html
変な記号の入った数式を見ると、気分が悪くなるなあ・・・
0495253
NGNG前回出した下記プラス少し増えてます。
// 後幾つでテンパイ
// 役の藩数(一部)
// 役まで後1枚の役の藩数(一部)
// 面子情報
// ターツの数
// 牌の待ち数
// 合計ポイント
// リャンメンの数
// 2カンチャンの数
// カンチャンの数
// ペンチャンの数
>僕がまた勘違いしてる?
3手先読みした場合の評価関数が出来ていないので、まだ対戦すら出来ないです。
自己感覚で評価関数作っても不透明なので作りたくないーー>統計を取って研究です。
>・可能性は、「その局面での有効牌/その局面で山に残った枚数」。要するにツモってくる確率。
了解しました。
>・その他は、他家リーチとか。これは後まわしかな。
私も後回しです。
0496253
NGNG>統計を取って研究です。
は、できすぎ君ではなくて、3手先を読んだ結果のデータ分析です。
できすぎくんでは無理なので。
0497253
NGNGニューラルネットはとーぶんゲームAIには実用的には使えないと思う。
追加+α
評価値ですが、上記の10以上のデータも結局一つの数値にすることは可能です。
しかし、状況により評価の基準が変化することがあり、今のところ別に扱っています。
これらのパラメータが正当に評価されれば、強さにつながると思いますが、
正当に扱えない場合や中途半端な扱いでは、単純な評価の力ずく検索の方が
強いかもしれません。
0498デフォルトの名無しさん
NGNG使えるとは思う。例えば、ヤオチュウ牌が9枚以上ならば、
国士無双狙いにいってもいいが、それ以下ならばチャンタで
我慢しておけ、とか。
ただし、これをやるためには相当数のデータが必要になるし、
何を基準に(入力パラメータ)として、あがりやすさ(出力値)
を求めるのかを決めるのが難しい。
まあ学習済みのニューラルネットを使用する分には、速度の
面では問題にならないだろう。
0499デフォルトの名無しさん
NGNG>使えるとは思う。例えば、ヤオチュウ牌が9枚以上ならば、
>国士無双狙いにいってもいいが、それ以下ならばチャンタで
例えばの例に反論するのは悪いかも知れんが、これならif文1個でできる。
できれば、こんな簡単な例以外で説明して欲しい。
>何を基準に(入力パラメータ)として、あがりやすさ(出力値)
>を求めるのかを決めるのが難しい。
上記問題点を上げながら、使えると言うのはいかがなものかと。
解決案の出して、使えると言って欲しいが。
0500252
NGNG東風荘用麻雀AIを作ってる。安定R1200程度らしい。
ダウンロードページ http://kmkz.jp/mtm/?load=mahjong
日記やReadmeを読むと、
>数学的なモデルだけを使って切る牌を決定しています.
だそうで。
>4面子1雀頭になるまでどんどん多牌していく.
考えてみると、麻雀の場合、将来メンツになる牌を残したいわけで、
リャンメンを残したいわけではない。この方法、いいかも。
前にこの部分(2003/9/30の日記)は読んでいたはずだし、
comjong.comというHPでも紹介されていた方法だが、将棋AIの方に気をとられていたかも。
↓は、この自動打ちソフトのBBSで、牌譜がダウンロードできる。
http://www.kmkz.jp/mtm/roro/rorobbs.cgi?num=148
見てみたが、たまに良い捨て方をするが、いきなりメンツを切ったりしてよくわからない。
0501252
NGNG・どんどん多牌していく方法の検討。
・そもそも、不完全ゲームと、ゲーム木の関係。
・詰め将棋解析が、麻雀に適用できるか。
・他に麻雀に似た不完全ゲームは無いか。
↓その他使えそうなところ。
「ひいいの麻雀研究 牌効率理論」
http://www.ix3.jp/hiii/02mahken/2-04paikouritsu.htm
共謀数については間違ってたっぽい。
>共謀数とはミニマックス木のルートのミニマックス値を変えなくてはならない終端節点数の最小値のことをいう
「詰将棋を解くプログラムの進歩」
http://www.csl.sony.co.jp/jsai/cdrom/articles/titles/a10-6-4.html
共謀数探索は、読む深さを決めるときに共謀数をしきい値として用いる方法か。
文章だけじゃ理解できん。小学生でもわかるくらいの、図が入った説明無いかな・・・
あと、ミニマックスと麻雀は関係なさそうな気がするんだけど、どうだろ・・・
0502男チャ漬け ◆VmNuOcUpJs
NGNGこちらでも引き続きAI作成を続けて行きます。
こちらのAIでは今後コードをいったん整理してから、
面子情報と役回しを強化させようと思います。
その他、具体的理論は後で載せようかと思います。
252さん、253さん、お疲れ様です。
0503デフォルトの名無しさん
NGNG>上記問題点を上げながら、使えると言うのはいかがなものかと。
>解決案の出して、使えると言って欲しいが。
無理(笑)。
一番の問題は、AIは学習にどれだけ時間がかかるということ。
>例えばの例に反論するのは悪いかも知れんが、これならif文1個でできる。
>できれば、こんな簡単な例以外で説明して欲しい。
そうだねー、ただ聴牌を狙うのではなく、複数の役を目指しつつ
手を伸ばしていくには、複数の評価を同時にやる必要があるでしょ?
国士無双しか狙わないなら、2、8とかはとっとと切るが、
まあ無難にチャンタにも手を伸ばしたいなら、そういう牌に
「重み」をつけて、他の牌よりかは捨てにくくするとかね。
参考までに、学習済みのネットワークならif-thenルールで
書こうと思えば(ある程度は)書けます。
問題は、さらにそこから汎化性を生み出せるかどうかです。
また、k-NN(過去からのもっとも良く似た例をいくつか取り出して、参考にする)
というのは学習データ数が莫大になれば性能が低下しますが、
ニューラルネットワークの場合であれば、「使用」する分には性能の低下は
まだ遅いです(とは言っても、「学習」に時間がかかりすぎるのですが)。
0504デフォルトの名無しさん
NGNG言ってる事は、妥当な範囲だが、それでAIに実用的に使えるのか?
たまに見かける、コンユーター上のニューロが数億個集まれば人間的な知能が
発現する脳内妄想か?実際にできる事と妄想をしっかり区別してくれ。
ここはム板だ妄想はいらない、ニューロネットを使用した実用的な麻雀AIを作って
自分の発言を証明しろ。
0505503
NGNG>自分の手牌からどの役の方向に進むべきなのか、という指標には
>使えるとは思う。
「できるんじゃないの?多分」という程度にしか発言してないのだが。
もうちょっと落ち着け。
実際にやろうとした際の問題点としては、前述した通り、指標に何を
用いるかという点がある。今捨てた牌は、手牌から切ったか、
それともツモ切りかというのを指標に入れるかどうかをどう考えるか、
などなど。何が重要で何が重要ではないかを判断する必要がある。
そういう点から見ても難しいと言っているのだが、わかる?
あと、闇雲にべらぼうな数の指標を入れると、
今度は関係のないはずの指標が悪さをしたりする。
これを考慮するとboostingがまだマシだな。
0506253
NGNG>>252さん、いろいろ情報ありがとう。
>scene.research.stationてところで、 東風荘用麻雀AIを作ってる。
見てみました、枝狩り8ツモ先まで読んでいますが、それでもR1200とは、
AI作成が難しいのか、又は、内部判断がまだまだなのか・・・
その他感想。
>・そもそも、不完全ゲームと、ゲーム木の関係。
1局としては不完全かもしれないが、半ちゃん4人と考えれば完全ゲーム
と考えてます。ゲーム木とあまり関係ないかな
>・詰め将棋解析が、麻雀に適用できるか。
これは、次の差が大きいので同じようには考えるのは難しいと考えてます。
詰め将棋は必ず正解のゴールがある。ー>ゴールに向かって探索すればいい。
麻雀は必ず正解のゴールが無い。ー>可能性の高い方に向かって探索するが
その結果出た答えが、次のツモで答えが間違っているのを気付く。
>・他に麻雀に似た不完全ゲームは無いか。
上記と同程度の不完全ゲームならたくさんあります。
・パチンコ・スロット・野球・競馬・株^^
>あと、ミニマックスと麻雀は関係なさそうな気がするんだけど、どうだろ・・・
自分だけでなく、他の3人の手の予測まで出きる様であれば、
その時の全体のゲーム木は、変形ミニマックスになりそうな気がしますが。
ゲーム木に出来そうなほど、相手の手を読むことは難しい。
0507253
NGNG>・他に麻雀に似た不完全ゲームは無いか。
上記と同程度の不完全ゲームなら
似たので考えると。
条件は複数でやって勝敗の不成立があるもので・・・
4人ポーカー、ジャンポン、似たのと考えると意外と少ない。
0508252
NGNG例えば、コインを2回投げて表裏が出るパターンを木(なんて名前だろ?)であらわすと、
-+-表-+-表
...|..............+-裏
...+-裏-+-表
.................+-裏
これを麻雀牌でやる。
>>480の方法でも、これはやっているわけで、何が違うのかといえば、
「捨てない」ということだけだ。
これによって、途中何を捨てたかに関係なく、未来の形を検討できる、かな。
課題としては、
・どのように評価するか?(>>500のReadmeだけでは、捨て牌を選ぶ評価の方法がよくわからん)
・全ての可能性の期待値の総和が最善手とは限らない。中途半端な打牌になって余計にだめかも。(Readmeより)
・ペンチャンはメンツになる可能性が低いから切ろう、ということになるだろか?
・枝刈りの方法。
Readmeの「とりあえず現時点のものをダメ出しすると・・・」のところに書いてあることは、
そんなに重要でない気がする。
0509252
NGNG>AI作成が難しいのか、又は、内部判断がまだまだなのか・・・
捨て牌も変だし、即リー全ツッパのみでは無いにしても
他家リーチにちゃんと降りてないみたいだし、まだまだでしょう。
>1局としては不完全かもしれないが、半ちゃん4人と考えれば完全ゲーム
完全ゲーム・・・2人で交互に手を指し、最終的に、勝ち、負け、引き分けとなるようなゲーム。
不完全ゲーム・・・判定に確率的要素が含まれるような場合。
ゲーム木は「完全ゲームを扱うもの」と定義されているようだ。
「AND/ORグラフとゲーム木」
http://kyu.pobox.ne.jp/softcomputing/ai/ai4.html
まあ、名称はどうでもいいけど、不完全ゲームに適用できるものはなんだろう。
それすらまだ知らない。
>詰め将棋
う〜む、そういうこともあるなあ。似てると思ったけどなあ。
>ミニマックスと麻雀
敵の手は読めないので、だめでしょう。
>麻雀に似た不完全ゲーム
「ポーカー AI」で検索するといっぱいありそう。先に検討しようか、どうしようか・・・
0510253
NGNG「うお〜〜〜〜〜頭が爆発する!、頭が真っ白になる!」
なぜ爆発するか
・データが多すぎて分けわからん;;
(結構良さそうな結果が出るが、なぜそうなのか分からん。そうでない場合もある。)
・変な点を注目して調べれば調べるほど、初期手牌評価の未着工部分が目立つ
それも幾つも。TT
(初心に戻って、初期の手牌評価を100%にしろと神のお告げ?)
今の状況は、やらなければいけないことが見えすぎて、何から手を付けていいか分からない状態だ〜〜
頭が爆発しそう。正直こんなに複雑になるとは思ってなかった。
少し一休みして、自分のAI以外のことでも考えてみる。
0511253
NGNG一応、捨てたことにしています。
他のAIについ考察
302さんのAIについて。
初期に公開された、再起的な単一の評価ポイントの延長線上にあると考えられる。
単純な評価式では有るがその分高速で、3手先を読む付加価値と何かアレンジした
AIではないかと思われる。
残念ながら、私の初期AIは微妙に負けている。くやしい。
なぜ負けているか、それは、分析されたデータが有効に評価されていない点と
やはり未着工の部分・・・・
>scene.research.stationてところで、 東風荘用麻雀AIを作ってる。
日記とReadmeを読んだだけの考察^^;、嘘を言っていたらごめん。
8ツモ先と有るが、こちらの見方では16手先となる、
ここまで来ると、相当の枝狩りをしないと東風荘でも、現実的な時間で終わらないと
思われる。その枝狩りで16手先に意味があるのか疑問。
現時点で3手先の予測は有効であると判断している。(結果が出せていないが)
正統に5手先を読めば、それなりに強いうち回しが出来そうに予測される。
0512253
NGNG先読みそのものは、それ程難しいことではない。
先読みした結果をいかに評価するかが問題である。302さんの比較的単純な
ポイント形式はその単純さゆえ、先読みした多くのパターンをポイントで
平等に評価できる利点を持つ、ただし変化に対応したうち回しが可能かは不明。
問題は多数の一つ一つの手を平等に正しく評価できるかである。手の評価自体に
問題が有れば、いくら先読みしても良い結果は得られない。
0513253
NGNG>・どのように評価するか?(>>500のReadmeだけでは、捨て牌を選ぶ評価の方法がよくわからん)
ここが、問題である。単純な評価(隣り合っているとか、N枚有る等の)でも、一応麻雀AIになる。
これにポン・チイ・カンや、リーチ等の直接的処理。これに場を把握する・ダマテン・降り・点数の把握
等でも十分にAIとして機能するようにも思う。
私が選んだ方法は、人間が思うように正しく評価しようと考えた。ある程度は正しく評価できる段階ではある
しかし、完全でない部分があり今はそれが問題として現れてきた。
人間は意識することなく普通にしていることを思うと、さすが人間である
>・全ての可能性の期待値の総和が最善手とは限らない。中途半端な打牌になって余計にだめかも。(Readmeより)
これは、私が見るに、評価が不十分だからそうなると思っている。
>・ペンチャンはメンツになる可能性が低いから切ろう、ということになるだろか?
時と場合により、その時と場合を理解しなければいけないだろう。先読みと場の状況で時と場合を見定めようと思う。
>・枝刈りの方法。
いくつか有りそうですが、何が良いのか不明。
感覚的な部分があり、聞かれても答えられないと思う。
0514253
NGNG私のゲーム木はこんな感じかな。
初期のより、シンプルになってる。
手牌
ツモる
捨て牌パターン1__・・・・___捨て牌パターンN
評価パターン1___・・・・・・・・___評価パターンN
仮想ツモを作る
捨て牌パターン1__・・・・・・・・・___捨て牌パターンたくさん
評価パターン1__パターン2_・・・・・・・___評価パターンたくさん
ここが3手目。
仮想ツモを作る
捨て牌パターン1__・・・・・・・・・・・・・・・・・・・・___捨て牌パターンとても多い
評価パターン1__パターン2_・・・・・・・・・・・・・・・・・・・___評価パターンとても多い
ここが5手目。
各所に枝狩り。
0515男チャ漬け ◆VmNuOcUpJs
NGNG手牌の先読み、深読みに関してはちょっと
イメージしにくいです。
河の情報を総合して判断させれば例えば、
ピンフ狙いであれば効率良くリャンメンが
残るようにすることは出来そうですけど、
全役汎用的に使えるようにするのにめちゃ
手間かかりそうですね。
私はあまり頭良くないので、もう少し簡単な
仕組みでなるべく無駄切りが出来ないよう
に工夫してみるつもりです。
駄目かもしれないけど(^^;
0516253
NGNG>253さんのレスを読み返してみたのですが、
>手牌の先読み、深読みに関してはちょっと
>イメージしにくいです。
あい^^
>河の情報を総合して判断させれば例えば、
>ピンフ狙いであれば効率良くリャンメンが
>残るようにすることは出来そうですけど、
今すでに河含む見える牌すべて計算していますが、なかなか難しいです。
>に工夫してみるつもりです。
>駄目かもしれないけど(^^;
いえいえ、是非がんばってください。
私と違う方法が見たいです。
私はもうこの道を選んでしまった以上、これで行きますが、複雑だから
優秀なわけでは有りません。ただ、遊びなので妥協したくなくて。
0517252
NGNGどんどん多牌していき、その中から14枚とって、
テンパイまたは上がりの形かどうか調べる、というセンはそのまま。
探索方法は、反復深化法がよさそうだ。
「反復深化法」
http://tt.sakura.ne.jp/~suzu/search_problem/i_deepening.html
最初は、最大探索深さを1(1枚多牌した形)で探索し、
解(テンパイ)が無ければもうひとつ下・・・と順に深く探索する。
これで、最も浅い位置の解(最速のテンパイ)を探索できる。
当然1シャンテンの時は、深さ1のところでテンパイが見つかるはずだ。
深すぎるときは途中で止めて、静的評価関数の良さで決める。
で、これだけだと、「12599・・・・」という形のときに5を切って3待ちテンパイしてしまうので、
待ちが少なすぎる(静的評価関数があまりにも低い値)のときは、もう2つ下くらいまで探索する。
これで1の方を切る(5にくっつけてリャンメンテンパイする)可能性を見つけるようになるだろう。
(>>486を参考にした。
話がそれるが、共謀数については、あまり理解していないけど、そのようなものが使える気もしている。)
これに加えて、あまりテンパイに関係のなさそうなツモは、
探索前にリストアップして、前向き枝刈り(最初から調べない)で刈る。
(上記の例でいえば他の種類の牌など)
静的評価関数は、その局面(手牌)だけをみて良さを評価する関数で、
期待値の計算をすることになるだろう。
これらは253さんのやつにも適用できると思うがどうでしょ。
0518252
NGNGたしかに、あれじゃ何にも分からないですな。
しかし、上記方法もまだ妄想部分があるので、これからという感じ。
>>515
まとまらなくても、どうするつもりか書いて、問題点を挙げてくれれば、
アイディアを書いてくれる人がいるかも。
0519253
NGNGの「他のAIについ考察 」あれから、多少調査した結果。
>302さんのAIについて。
この考察は間違っています、こんな単純なものではないと思われ、申し訳ありません。
0520252
NGNGどうすれば、上手く捨て牌を決定できるだろうか?
以下のような、探索木が考えられる。アイディアをプリーズ〜。
そもそも、このモデル化に問題があるのかもしれん。
解を導きやすいモデルのアイディアがあれば・・・
0521252
NGNG○・・・1シャンテン以上
●・・・テンパイ
★・・・上がり
記号の隣の()内は牌。12599だと、1マン2マン・・・9マン。
あとの3メンツは、すでにそろっていることにする。
牌が5つ以上あるときは、5つとって考える。
・例1
テンパイからの可能性の木。
この木の情報を使って、ルート(現局面)の「●(12599)」で1を切ることができるだろうか?
それに「●(125994)」の状態から3をツモると上がってしまうのが問題・・・
●(12599)
.|
.+---------+---------+--
.|.............................|.............................|
★(125993) ●(125994) ●(125996)←5699でテンパイしているという意味
...............................|
...............................+----------+--
...............................|................................|
..............................★(1259943) ★(1259946)←この2つの上がりは12が共通して要らないが・・・
0522252
NGNG1シャンテンからの例。
○(15899)
.|
.+---------+---------+--
.|.............................|.............................|
●(158992) ●(158994) ●(158996)
...............................|
...............................+----------+--
...............................|................................|
..............................★(1589943) ★(1589946)
「探索法」
http://kyu.pobox.ne.jp/softcomputing/ai/ai3.html
↑の「知識を用いた探索(ヒューリスティック探索)」のところでいう
その枝を通る「コスト」が、その牌をツモる可能性と考えるとどうだろう・・・
0523デフォルトの名無しさん
NGNG125 なら2から (裏目の3を持ってきても35のカンチャンになる)
126 なら1から (4を持ってきたら246のリャンカンになる)
当然124なら1からだし、127なら2から
128や129はペンチャン外しの意味がない
0524253
NGNG>★・・・上がり
この上がりの木は要らないと思います。
テンパイの段階で先が見通せると考えてます。
テンパイの段階で何待ちかは簡単に導き出せるので。
その時点で、ターツの形を理解する必要があり、
ターツ種類 単騎・シャボ・リャンメン・カンチャン・ペンチャン
この種類がわかった時にペンチャンならもう一つ先読みするか判断し、
次の読みでペンチャンより良い待ちの可能性(●の所)があればペンチャンを
切っていく事も考えられます。
実現方法は組み方によって違ってきます。
一応、3手先のよさげと思われる評価関数を仮組みしてみました。
多少対戦してみて、リャンメン待ちが5−8だったのが9−10に変化。
そんなに上がらないのは、単騎・シャボ・カンチャンの方が多いからかな。
まだまだです。
0526男チャ漬け ◆VmNuOcUpJs
NGNG「混合法」ってやつを作ってます。
ttp://comjong.com/old/algo/shanten.htm
仕組みは252さんの「探索法」 と似たような
やり方で作るつもりです。
具体的には前のAIで作った方法で2向聴
まで読み、それ以下は揃ってない所を
抜き出しどんどん牌を足していくのですが、
意味の無いツモを除き「有効牌」だけ揃えた
配列をつくり、その中でリストを生成します。
もちろんこのままでは>>521の状況に
成りますが、その点は「役誘導」と、>>523
を参考に回避するつもりです。
問題点はまだまだ有りそうですが、バグを
除き次第うpします。
プログラム技術的に未熟ですし、発想も
時代遅れですが自分なりにマイペース
に逝きます。
0527252
NGNG知らなかった。とにかく1から切ってたかも。
125で2から切る意味は、他家リーチに対して
2より1が安全(失点が小さいと期待できる)だからだと思うが、
牌効率には関係ないので、ベタ降り能力がついてからでいいかも。
>>524
このレスを見て思いついたんだけど、上がりを見つけてから、
ひとつ戻ったところがテンパイと考えるのはどうだろう。
テンパイの価値は、上がりの形の評価関数の総和と考えられるので。
>一応、3手先のよさげと思われる評価関数を仮組みしてみました。
手が早いなあ。
0529253
NGNGヒューリスティック探索はゴールを意識してます。
私の場合ゴールは意識していない。う〜〜ん、何だろう。
0530252
NGNGだいたいは>>523のとおりになるけど。
>セオリーと違うが、「ペンチャンやカンチャンは外側から切れ」。
>ちなみに既にメンツやメンツ候補が完全に揃っている場合は、この限りではないが、「内側から切れ」とは言わない。
>「より他家に危険になりそうな方を選んで、そちらから先に切れ」。
「とつげき東北HP 面前メンツ構成技術論」
http://www.interq.or.jp/snake/totugeki/kouza2.htm
0531デフォルトの名無しさん
NGNG数学的根拠をもって正着打を決定することが可能か?
http://gamble2.2ch.net/test/read.cgi/mj/1070768502/
の107=124です。今、モンテカルロ法によって最善手を求めるシミュレーションをEXCELのVBAで作っているんですが、プログラミングはあまり得意では無くて難航しています(´・ω・`)
良かったら参考にして下さい。
まず、13枚の手牌の「評価値」というものを考えます。
残りのツモがn回あるとします。
山からランダムにn枚取り出し、手牌と合わせた13+n枚の牌の中から最も高得点になる和了り形14枚を抜き出す、という操作を充分な回数繰り返します。
この時、1回の操作あたりの平均得点をこの手牌の評価値とします。
評価値は「未来のツモを見通せる神様が打った場合の得点の期待値」と言い換える事も出来ます。
次に、14枚の手牌から何を切るかを考えます。
14枚の手牌からは最大14通りの打牌候補があり、それぞれについて打牌後の13枚の牌姿があります。
この14通りの牌姿それぞれについて評価値を計算し、最大になるものを打牌として決定します。
0532253
NGNG教えて欲しいのですが。
その方法だと枝狩りが無いので下記のようにパターンが増えます。
0枚の組合せ nCr n=14 r=14 P=1
1枚の組合せ nCr n=15 r=14 P=15
2枚の組合せ nCr n=16 r=14 P=120
3枚の組合せ nCr n=17 r=14 P=680
4枚の組合せ nCr n=18 r=14 P=3060
5枚の組合せ nCr n=19 r=14 P=11628
6枚の組合せ nCr n=20 r=14 P=38760
7枚の組合せ nCr n=21 r=14 P=116280
8枚の組合せ nCr n=22 r=14 P=319770
何枚ぐらいまでやればモンテカルロ法として妥当な結果が得られると思いますか?
その可能性の数字を教えてください。妥当であればやって見るのもあり。
0533男チャ漬け ◆VmNuOcUpJs
NGNGいらっしゃいませ。
参考になる情報をありがとうございます。
スレの方も拝見しました。これは、数学的にも
充分算出可能な方法かもしれないですね。
もし、ツモを見通せて尚且つ期待値に合った
切り方ができれば相当強いCPUが
出来上がると思います。
すばらしいアイデアですね。参考になりました。
0534253
NGNGだから、10枚ツモってようやくリーチできるかどうかです。
リーチ出来ずに流れるのが2倍以上なので、
10枚有っても、上がれるパターンはとても少ないです。
0535デフォルトの名無しさん
NGNG理想だけ書いて自分は全然何もやらない素人だから
計算量の事もわかってないし
0536253
NGNG組合せは、下手でした、3枚パターンでの組合せです。
数字はもっと低いです。う〜〜計算不可;;
0537253
NGNG「数学的根拠をもって正着打を決定することが可能か? 」
の板読んでたのですが、麻雀における「期待値」の表現は普通だったんですね^^;
麻雀シロートばればれだな〜〜、これでも昔雀荘で打ちまくってたが。
私がAIを作る上で意識したのは、あまり情報を入れずに、自分の知識だけで
作って見ようでした。これで現在にいたってます。
板を読んだ感想を一つ。
・やはり人間は無意識に誰でもやっていることは、当たり前すぎてあまり
問題にもならない。AIは人間にとって当たり前すぎる事を一々指示する
プログラムを作らなければならない。(あたり前だが再認識)
当初から、麻雀でいう「期待値」は一切考えていなかった。今も低い。
今も、今ここにある13枚の手牌の解析が完全に出来ていない。
「期待値」以前の段階。3手先を読む処理で初めて期待値を利用している。
まだまだ先は長そうだ。
0538531
NGNGhttp://briefcase.yahoo.co.jp/mahjongxp
>>536
残りツモが18枚の場合で考えると、
例えば、頭が1つあってあとは全部ばらけた10個の面子がある場合で10C4通り。
トイツや暗刻の複合形を考えるともっと複雑になりますよね・・・
(向こうのスレから変な人連れて来ちゃったみたいですみません・・・無視して下さい。)
0539253
NGNG今見える範囲では大きく分けて2つの種類のAIがある。
1.手牌の状態を完全に理解し、その有効性を各牌にそして牌と牌の関係を含めて
理解し、不要牌を割り出す。(私が目指している方法)
2.先読みを深くし、先読みの情報から今現在の不要牌を割り出す。
どちらも利点欠点があり。どちらが強くなる可能性があるか、まだ不明である。
0540253
NGNG今の3手先を読むAIで、他のAI対戦時とツモ切りするだけのAIでは、
できすぎくんのリャンメン待ち数が違う。
AI対戦では 9−10
ツモ切りダミーでは 6−8
対戦では、局が最後まで行くことが少ない為に起こるのではないかと。
AIは終盤を意識していないため何時でもリーチですが、山牌が少なくなると
期待値が減るためペンチャン落としを止めている可能性あり。
評価処理が仮実装ですから、バグかも・・・
0541253
NGNGもう一つ^^
ペンチャン落としの評価は2シャンテンから1シャンテンの間でやっています。
数値では見えないですが、気持ちペンチャン落ししたほうが良さそうな感じです。
もっと明確になれば、「ペンチャン落しは、時に有効である」の証明になるかも
しれません。無条件ペンチャン落しではなく、3手先にペンチャンを落としてもいい
評価があったときに落とした場合です。
0542253
NGNG下にポン・チーするAIをUPしています。頭でもポンします。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_33/253v0001.lzh
デバックが出来なかったので、AI部分にもバグがあると思います。
見た範囲では正常なデータを返していますがポンチーがMJFUROデータ内に入っていない、
MJFUROデータに入っていないので鳴いてないと処理されリーチしてしまう。^^;
また、手配のダイアグラム異常メッセージが出ます。下の理由かもしれません。
質問。ポンチーした時のPlayer内の手牌データはポンチーした牌は減ります?
減らないつもりで作ってました^^;
0543253
NGNG10C4通りよりも桁違いに多いですよ。シュンツだけで。
1234の場合123と234で考えなければならないです。
牌が多くなるともっと多いです。
12345は 123、234、345です。これに牌の重なりやマンズ・ソーズ・ピンズの
関係も有るので、考えたくないぐらい有ります。
0544男チャ漬け ◆VmNuOcUpJs
NGNG私の旧AIでは減らしてませんよ。(ソースみれば分かりますが)
と言うよりも、Playerデータはオリジナルのコピーなので、
減らしても減らさなくても問題ないと思います。
因みに私の仕様では一旦ポンする牌を減らしてから、
捨牌を選択して元に戻しますが、実は無意味な行為です。
こちらも、今作ってるAIと共に、旧AIの方も鳴き全部
出来るように直しているのですが、vectorのアドレス
参照時に起こるバグと、配列の中身がおかしく
なってしまうバグが未だ引きずってて困ってます。
ソースとか牌譜とか、後でうpしときますので
よろしければどぞ。
0545デフォルトの名無しさん
NGNGこいつ何にもわかってないから。
0546253
NGNG妄想では、まったく使えないと結論がでた。^^
なぜなら
最初のツモで手配が14有り、それに18枚足したとして
上がりの高い手はどれも、最初の手配から平均8枚ぐらいしか使わないとしたら。
14−8=6枚がいらないと事になります。この中の何を捨てて良いでしょう?
手牌14枚が均等に使われると考えるのは楽観的過ぎで、とても不均等だと思われる。
仮に考えられないほどたくさんのパターンと回数したとして、点数がとても高い牌の
集団と点数の低い集団ができるでしょう、点数の低い集団から一番低いのを選んだとして
、はてさて、それに価値があるのかはなはだ疑問です。
これの問題点は、手配の14枚より、足すほうが多いのです。この中から上がれる手を
作る場合、足す方が主体となってしまい、手牌14枚の存在価値が少ないのです。
その結果、手牌1枚1枚の意味が霧散してしまうことです。
私の結論、
モンテカルロ法は手配の数より、少ない数足すことで結果が出ないと、意味が無い。
足す数が少なければ少ないほど良い。できれば手配の半分以下の数枚程度がいい、
しかし、数枚程度では上がり手があまり出来ないため使えない。
0548252
NGNG今見てみました。
MJSimのバグと、AIのバグ両方がある。
・AIのバグ
ポンの指定はOKだけど、捨て牌が指定されてないようだ。
捨て牌が前回のまま?みたいなので、捨て牌も指定してください。
・MJSimのバグ
「鳴きの指定がOKだが、捨て牌が間違っているとき」に、「ツモ切りに修正」してしまう。
このため、その後の牌譜がおかしくなる。
正常な動作は、捨て牌として適当なもの(ソートしたとき一番左にくるやつ)を切るようにすべき。
スマン。
・修正するには、MJSim.cppの746行目↓を削除またはコメントアウトしてください。
Player->Action.Type = MJACTION_SUTEHAI;
・ポン自体を無効にしたほうが良いかどうか、という話になるが、
この措置は、特に意味は無い。止まらなければ良い、と考えている。
そもそも、AI対戦では誤ポンはありえないはずなので。
・エラーをログに残したり、AIへ通知すべき。今後改善しようとおもう。
>質問。ポンチーした時のPlayer内の手牌データはポンチーした牌は減ります?
減ります。ポンした牌を-2している。
>>531さんのはおもしろいなぁ。まだ良く考えてないので、あとでレス書く予定。
0549252
NGNG>減ります。ポンした牌を-2している。
当然その後、捨て牌の分も減り、合計3つ減る。
さらした牌はFuroへ入るイメージ。
フーロ牌も「手牌」じゃないのかといわれると困るけど・・・
0552253
NGNG数百回に1回エラーメッセージが出ますがAIのバグです^^;リターン数回押せば続きます。
ポンチー回数が積極的過ぎるかも。
見てて面白いので、もし見る方がいたら感想でも教えてください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_34/253v002.lzh
本来なら 302さんに勝てるまで出さない予定でしたが、諦めました。
今も負けます。悔しいが事実です。
できすぎくんでは、次の2点で負けています。
・リーチが少し遅い
・302さんの上がり点数が高い。
リーチが遅いより、点数の差が有りすぎます。前のAI考察は反省。
この上がり点の高さは、何処かでAIを作っていたやつではないかとも思います。
まだまだ、先は遠いと実感。
0553252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_35/MJSim_000506.lzh
・デバッグモードをつけた。
不正なアクションが指定されたとき、エラーを表示してキー入力待ちする。
使用方法: コマンドラインに「-d」を指定する。
・鳴きの指定がOKだが捨て牌が間違っているときに、ツモ切りに訂正してしまうのを修正。
・国士無双のテンパイチェックが間違っているのを修正。
鳴きの指定が分かりづらいということで、デバッグモードをつけてみた。
簡易ブレークポイントみたいな感じ。
不正なアクションが指定されとき、↓のようなメッセージを出して、キー入力待ちする。
---
不正なアクションが指定されました。
場所: チー
理由: 捨てられた牌が使用されない形でのチー。鳴く牌: 16
訂正内容: MJACTION_NULLに訂正。
何かキーを押すと続行します。
---
この場合、他家が捨てた16(6ピン)を使用できないチーが指定されたことを示す。
表示される場所は、
・鳴き全部
・リーチ後の不正なアクション
・チョンボ(これは点数計算の後)
0554252
NGNGツモ切りするとき、0でなく牌の番号を指定している場合、
その牌が手牌の中にないと、ツモ切りに訂正するが、そのときにデバッグメッセージが出る。
(問題ないといえば問題ないのだが)
公開されているAIは、結構↑の状態のようで、デバッグメッセージがでまくる。
これが鬱陶しい場合は、MJSim.cppの804行目のDebugMessage関数は無効にしてください。
0556253
NGNG0557253
NGNGあまり使わない方が良いかも^^; 寝ます、おやすみなさい。
0558252
NGNG見てみた。
今300試合したところ、302さんのと0.02位差で負けたが、何が違うのかワカラン。
ペンチャンの処理を見ようと、何試合か見たけど、
なかなかモデルケースみたいなのがないなぁ。
カンチャンが残ってリーチが多いので、これもリャンメンが残るようにできるといいな。
リーチリャンメン率11%くらい。
0559252
NGNG先読み処理の完成型マッテル。
あと、画面表示だけど、今のはデバッグ版と思うけど、
リリース版も入れて、そっちではコマンドラインへ出力しないようにした方がいいと思うのでよろしく。
MJSimのこと。
AIもコマンドライン引数で指定するようにしようかと考え中。
相手を変えるのにバッチファイルが使えるようになる。
たくさんのAIをランダムに打たせるときは、
ファイルに名前だけ書くようにする。「AI0=」とか無しで。
いつやるかは未定。
0560あぼーん
NGNG0561252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_36/nanikiru_000000.lzh
AIに何切るをやらせる。
前ちょっと作りかけてやめてたやつ。
別に、こんなのなくても、普通にコマンドラインアプリを作って、
配列に数字をセットすれば、テストや開発には充分と思ったけど、多少は便利かなと思って。
それより、早くAIつくらんといかんなぁ・・・
0562252
NGNG---
MJSim AI 何切る
■概要
AIに何切る問題をやらせる。
■使い方
nanikiru DLL名 手牌 ツモ ドラ
例: nanikiru MJSimAI 1m2m5m9m9m2p3p4p7p8p9p5s6s 7s 2p
添付のnanikiru.batも参照してください。
・牌は、東風荘のログの形式で記述してください。
以下のものが使える。
1m,2m,3m,4m,5m,6m,7m,8m,9m,
1p,2p,3p,4p,5p,6p,7p,8p,9p,
1s,2s,3s,4s,5s,6s,7s,8s,9s,
東,南,西,北
白,発,中
・状況は、東1局の一番最初のツモ。
状況を変化させたいときは、nanikiru.cppのNanikiru関数を修正してください。
■注意事項
・手牌の数は、1,4,7,10,13個でなければならない。
13個以外のときは、AIがエラーを出す可能性がある。
(フーロ牌はセットされない)
0564253
NGNG↓東鳴き後ロンでチョンボ
東4局 0本場(リーチ0) MJAI -8000 MJAI3 2000 MJAI1 2000 MJAI2 4000
チョンボ
[1南]1m3m4m1p7p7p8p7s8s8s9s東東
[2西]1m6m7m8m2p2p2p4p5p6p発中中
[3北]5m7m1p3p6p6p9p1s2s3s9s北北
[4東]1m2m9m9m1p3p4p6p2s8s9s白白
[表ドラ]3m [裏ドラ]西
* 4G8p 4D8p 1G4s 1d1m 2G2m 2D2m 3G白 3D白 4G6m 4D6m 1G9m 1D9m 2G5s 2D5s 3G1p
* 3D1p 4G8m 4D8m 1G南 1D南 2G9p 2D9p 3G6m 3D6m 4G東 4D東 1N 1d1p 2G北 2D北
* 3G2p 3D2p 4G4s 4D4s 1G8p 1d8s 2G2m 2D2m 3G4p 3D4p 4G発 4D発 1G西 1D西 2G2s
* 2D2s 3G白 3D白 4G1m 4D1m 1G東 1D東 2G北 2D北 3G南 3D南 4G中 4D中 1G1s 1D1s
* 2G3m 2D3m 3G6m 3D6m 4G6s 4D6s 1G5s 1d4m 2G3p 2D3p 3G4p 3D4p 4G4m 4D4m 1G西
* 1D西 2G3m 2D3m 3G西 3D西 4G7p 4D7p 1G7p 1d3m 2G5s 2D5s 3G4s 3D4s 4G5p 4D5p
* 1G発 1D発 2G8m 2D8m 3G4m 3D4m 4G発 4D発 1G4m 1D4m 2G3s 2D3s 1A
0565253
NGNG○場牌
0566253
NGNG今のところ東鳴きチョンボは出ます。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_37/253v0003.lzh
エラーの出ないのを作ってみました。
0567253
NGNG>ペンチャンの処理を見ようと、何試合か見たけど、
>なかなかモデルケースみたいなのがないなぁ。
ペンチャン切りしてる雀譜だけ何処かにでもUPしましょうか?
>カンチャンが残ってリーチが多いので、これもリャンメンが残るようにできるといいな。
カンチャン変えは、牌確率とダマテン機能かな〜〜〜〜入れたいと思っています。
>先読み処理の完成型マッテル。
これは時間がかかるかも、手牌評価を機能UPしないといけないので。
詳しい手牌評価があって初めて3手先の浅さでもそれなりに機能している可能性あり。
5手先もやってみたいと思ってるし。
学習機能をつけたいとも思ってます。
今までは、複雑さを解決するためのパターン認識でしたが、これからは、知識ベースの
パターン認識の方向へ行くかな〜〜〜
そうそう、前に読んだ先読みデータの再利用もして、スピードUPしたいし。
それに、深読みとの併用も面白そうだし。
う〜〜〜〜〜やりたいこといっぱいです^^
>リリース版も入れて、そっちではコマンドラインへ出力しないようにした方がいいと思うのでよろしく。
了解。
0568253
NGNGいや、それよりも、302さんに勝つために、上がり点数を上げないと。
ファイル容量で数倍も有るのに、負けているのは悔しい。
雀譜を見ると変な切り牌がまだたくさん有るので、直していって徐々に強くしないと。
ほとんどは内部の見えないバグですから。
0569デフォルトの名無しさん
NGNG最強になりましたか?
0571253
NGNG1.チートイツの役判定が間違っていて、チートイテンパイなのに崩す牌切ってた。
フーロ関係の作りこみの反映がミス;;
2.if分ミスでドラ牌を先に切ってた;;
3.タンヨウ判定ミスで、イソー持っててもタンヨウ役ありとして、待ちの悪い方切ってた。;;
短時間にこれほど出るとは、バグバグだらけですTT
0572252
NGNGとりあえず、これだけ修正。
MJSim 0.5.7
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_38/MJSim_000507.lzh
・場風が判定されないのを修正。
たまにちゃんと判定されたりするので困ったやつだった・・・
0573男チャ漬け ◆VmNuOcUpJs
NGNG↓リーチ直後のロンなのにリーチ棒が動いているようですが仕様ですか?
普通は動かないと思うのですが・・・
===== 東風戦:ランキング卓 300卓 開始 2003/01/01 00:00 =====
持点27000 [1]253v003 R1500 [2]302v012 R1500 [3]253v000 R1500 [4]283_v004 R1500
東1局 0本場(リーチ0) 302v012 9000 253v000 -9000
40符 四飜ロン リーチ ドラ3
[1南]3m4m8m3p5p7p9p1s4s6s9s東南
[2西]1m4m5m9m6p8p1s3s4s5s6s南中
[3北]2m2m3m5m6m7m8m1p2p2s3s8s西
[4東]3m7m9m2p2p4p6p1s2s5s8s北中
[表ドラ]6m [裏ドラ]6s
* 4G9s 4d中 1G7s 1d東 2G8p 2d中 3G3m 3d西 4G発 4d北 1G9m 1d南 2G9p 2d南 3G7p
* 3d8s 4G6p 4d発 1G2m 1d1s 2G1m 2d9p 3G1p 3d2p 4G6p 4d3m 1G1p 1d9s 2G6m 2d9m
* 3G7m 3d7p 4G東 4D東 1G1p 1d8m 2G9p 2D9p 3G白 3D白 4G6m 4d9m 1G5p 1d4s 2G8s
* 2d6p 3G4p 3D4p 4G7m 4D7m 1G9s 1D9s 2G5s 2d8s 3G西 3D西 4G5p 4d5s 1G中 1D中
* 2G6s 2d1s 3G5m 3d8m 4G白 4D白 1G7p 1d9m 2G3p 2D3p 3G4p 3d2m 4G6m 4D6m 1G4s
* 1D4s 2G9m 2D9m 3G南 3d3m 4G9s 4D9s 1G6s 1d6s 2G7s 2R 2d3s 3G3s 3d3s 4G3s
* 4d8s 1G2m 1d2m 2G東 2D東 3G1m 3d南 4G白 4D白 1G中 1D中 2G北 2D北 3G4m 3d4p
* 4G7s 4d2p 1G北 1D北 2G北 2D北 3G1s 3R 3d1m 2A
0574252
NGNGどういうときに、ペンチャンおとしするんでしょうか?
何切るでいくつかやらせてみたところ、
nanikiru 253v0003 1m2m5m6m9m9m2p3p4p7p8p9p5s 7s 2p
これは2mを切る。へ〜、内側から切るのか。
nanikiru 253v0003 1m2m5m6m9m9m2p3p4p7p8p9p3s 7s 2p
3sを切る。この場合はペンチャン落とさないの?
>う〜〜〜〜〜やりたいこといっぱいです^^
成績に大きく影響があると思われる順番に作って、一足先に最強を目指してください。
ぼくは、普通に切るのだけでいっぱいいっぱい・・・
>>573
バグです。
すぐには修正しないけど、修正リストの上のほうに入れる。
nanikiruは局面も設定(>>361みたいに)したり、
鳴くかどうかの局面も作り出せるようにすれば、
デバッグツールとして使えるものになりそうかな。
で、その作戦が実際に成績を上げるものかどうかの検証はMJSimをつかうと。
0575253
NGNG元々私の雀風は2mから切ってました、現在のAIは>>523さんの知識を
実装してます。(他の牌との兼ね合いも有るのでもっと複雑)
>3sを切る。この場合はペンチャン落とさないの?
これは、仮実装のためそうなってます。(オイ^^;
これでは怒られそうなので簡単に、上の例はペンチャンを切っても4m7m6sが
きた時1シャンテンとなる可能性があり、下は無いです。
本実装になったら統計的検討してから^^;、条件により落とせる予定。
感想を一つ
人間はすごいな、問題を理解するため、無意識に知りたい点とそれ以外の
ノイズを分離して、問題のモデル化ができる。AIはこれが難しい。
先のモデルは、理解しやすいためにターツシュンツがまったく関係しないように
配置され、なおかつ知りたい点をそれらと一切関係しないソーズにする。
さすが人間。
で、実際の麻雀2シャンテンは色々な牌が関係してごちゃごちゃが多い。
(私が統計統計と言っていた意味が疑問だったと思います^^)
特に、面子2つ頭ターツ1つより、面子1つ頭ターツ3つ以上が多く、なおかつ
ごちゃごちゃに重なり合った2シャンテンのほうが多い、上記の例題は稀です。
この中でも、落としていいペンチャンと落とさない方がいいペンチャンが
有ると考えました。それを理解するにはどうするか、もう統計的手法しかありません^^;
その結果、人間のパターン認識には落ちるが、統計的に有効であった仮実装をした。
0576253
NGNG>鳴くかどうかの局面も作り出せるようにすれば、
>デバッグツールとして使えるものになりそうかな。
はい、できると助かります
0577253
NGNG今では、多くの牌を足して行うモンテカルロ法がまったく
使えなくなることが証明できます。説明はめんどいので止めます。
(自分で考えてみて^^)
実は深い先読みも同じ問題点を抱えているのではないかと考えてます。
先読みを8ツモ先までやるのと、ランダムに8ツモして分析するのと
何処が違うのでしょう。
とても深い先読みをした場合この問題に直面するでしょう。
気がつかない人もいるかも^^
内容は、聞かれても答えません、自分で考えてください。
0578531
NGNGhttp://briefcase.yahoo.co.jp/mahjongxp
場風、自風、ドラ表示牌、手牌、残りツモ回数、繰り返し回数、場に出ている牌
を入力すれば>>531の考え方で打牌を求めてくれます。
古いマシンだとなかなか終わらないかもしれないので、繰り返し回数は最初は少なめで試して下さい。
あと注意点ですが、
・全てダマのツモ和了と考えて計算しています。
・和了牌を考慮していないので、両面待ちでないのにピンフとして計算してしまう場合があります。待ちに付く符を計算していないので符の計算が若干違う場合があります。
ソースはとても汚くて見づらいです。すみません。
0579男チャ漬け ◆VmNuOcUpJs
NGNG↓役間違えのバグですが既出ですか?
これはびっくりしました(^^;
===== 東風戦:ランキング卓 300卓 開始 2003/01/01 00:00 =====
持点27000 [1]253v000 R1500 [2]253v003 R1500 [3]283v004 R1500 [4]302v012 R1500
東1局 0本場(リーチ0) 253v000 3000 253v003 -500 283v004 -2000 302v012 -500
30符 二飜ツモ 門前清模和 断ヤオ
[1西]3m7m9m2p3p5p5p6p6p8p8s9s南
[2北]4m7m3p4p3s5s5s9s東南北北白
[3東]1m2m3m5m5m1p2p9p2s3s5s6s中
[4南]5m6m7m7p7p9p9p1s3s6s9s南白
[表ドラ]2s [裏ドラ]9p
* 3G2s 3d中 4G9m 4d白 1G5p 1d南 2G西 2d南 3G8m 3d2s 4G7m 4d南 1G4m 1d8p 2G中
* 2d西 3G7s 3d8m 4G3s 4d9s 1G6m 1d9m 2G北 2d白 3G東 3D東 4G東 4D東 1G2m 1d9s
* 2G1m 2d東 3G4p 3D4p 4G中 4D中 1G白 1D白 2G4m 2d中 3G6p 3D6p 4G3p 4D3p 1G3p
* 1d3p 2G東 2D東 3G4p 3D4p 4G4s 4d1s 1G2p 1d2p 2G北 2d北 3G7s 3D7s 4G2s 4d3s
* 1G7s 1d2p 2G2p 2d1m 3G8p 3D8p 4G発 4D発 1G2m 1d2m 2G8p 2d9s 3G2m 3D2m 4G4s
* 4d9m 1G8m 1d3p 2G9m 2d8p 3G4s 3R 3d9p 4G7s 4d7m 1G8m 1d8m 2G西 2D西 3G南
* 3D南 4G1p 4D1p 1G9s 1A
0580253
NGNGお疲れ様です、がんば〜〜〜、少しずつできる範囲からが良いよ。私もさ少しずつで今に^^
ここを見ている、麻雀に詳しい人に質問です。私は麻雀弱い^^;
今。ポン・チーするAIですが、あまりにもアホな鳴きをしています。泣きたい位アホ。
ポンチイーを賢くする知識を入れたいのですが今ひとつ浮かびません。
私の案では。
・鳴くのを10順以内にする、10順過ぎたら鳴かない。
・ドラ等が1枚以上あるときしか鳴かない。
・1シャンテン以上でしか鳴かない。2シャンテンでもOK?
・2鳴きしかしない。
・そもそも、鳴きは良くない?
う〜〜〜〜ん。今一賢くないアイデア、私自身はあまり鳴かない雀風なので不明^^;
何か知識を教えてください、又はHPでも紹介してください。
0581デフォルトの名無しさん
NGNG> ・鳴くのを10順以内にする、10順過ぎたら鳴かない。
> ・ドラ等が1枚以上あるときしか鳴かない。
> ・1シャンテン以上でしか鳴かない。2シャンテンでもOK?
> ・2鳴きしかしない。
> ・そもそも、鳴きは良くない?
まずどういう意図でその行き方が出てきたかが問題だろ。何のために鳴くのか、
あるいは鳴かないのかを考えて、そこから打ち方を導くべきだと思う。10順以内
とか2鳴きまでとかシバリを入れるのは良いが、なぜそうするのかが前提にない、
“なんとなく”っていうんじゃダメ。
0582253
NGNG>まずどういう意図でその行き方が出てきたかが問題だろ。何のために鳴くのか、
>あるいは鳴かないのかを考えて、そこから打ち方を導くべきだと思う。10順以内
>とか2鳴きまでとかシバリを入れるのは良いが、なぜそうするのかが前提にない、
>“なんとなく”っていうんじゃダメ。
どういう意図で、どうするのが良いですか?
0583デフォルトの名無しさん
NGNGわけだから、振るリスクは高くなっていくわけで、だからこそアガる意思を明確
にするという意味も強くなる。
まずアガりの欲しい流れ、点数配分が鳴きを入れる場の前提条件に必要なん
じゃないかと思う。
次に鳴きで早くなる手なのかが問題。例えば両面鳴いて面子作っても他の待ち
が狭いなら、残してつもってる間に拾うかもしれないわけだし。
0584523
NGNGAIの場合、鳴きは複雑すぎて難しい問題なのでむしろ門前で手を進める方がいいかと思います。
ある程度書くと
・トップ目の場合、鳴きすぎる(2フーロ、3フーロする)と手牌が短くなるので凶
・門前で手を進めてると他家が高い手を和了しそうな時は鳴くと吉
・和了トップの時は無理鳴きでも和了を目指す
・上家が国士をやっている時は一色手でも鳴きやすい
・高点数が必要な状況では門前
・基本は一鳴きテンパイで
・他家が鳴いてくる場では門前で
・ファン牌を二鳴きするくらいなら対子落としまたは雀頭(安パイでも可)に、もしくは一鳴き
・門前からのリャンメンチーは凶
・周りが腰の重い打ち手が多い場合には門前で
以上は東風荘に限ったものです。
フリーでは御祝儀があるので赤牌あるだけでもガンガン鳴いた方が強いです。
0585523
NGNG0586253
NGNG:
>にするという意味も強くなる。
確かに。
>まずアガりの欲しい流れ、点数配分が鳴きを入れる場の前提条件に必要なん
>じゃないかと思う。
そうすると次のような条件があるといいですか?
1.親でなら、2シャンテンぐらいでも鳴きで上がろう。(2,3位ぐらいの時、トップ親は鳴かない)
2.トップ子なら、1シャンテンで無条件に鳴いて上がろう。
>次に鳴きで早くなる手なのかが問題。例えば両面鳴いて面子作っても他の待ち
>が狭いなら、残してつもってる間に拾うかもしれないわけだし。
なるほど。
1.リャンメンは鳴かない。
プログラム的で確定的です、おかしかったら指摘してください。
0587デフォルトの名無しさん
NGNGこんな手だったらp1はリャンメンでも鳴くべき。
(どうしてもハネマン欲しい状況なら別)
リャンメンとは言え、実質ペンチャンのようなものだからね。
・鳴いても高い手はどんどん鳴くべき
0589253
NGNGなるほど、実践の知識ですね、ぜひ、組み込みたいです。
特に、鳴きは、トップを確定する戦略の上で、持っているべき機能と感じました。
1.場の状況をTOPを左右するための戦略の一つに鳴きを組み込む。
・トップ目の場合、鳴きすぎる(2フーロ、3フーロする)と手牌が短くなるので凶
・和了トップの時は無理鳴きでも和了を目指す
2.鳴いて手が確定して上がれるなら鳴き、1シャンテンの時のみ。
・鳴いても高い手はどんどん鳴くべき
3、以後随時に。
・高点数が必要な状況では門前
・基本は一鳴きテンパイで
・ファン牌を二鳴きするくらいなら対子落としまたは雀頭(安パイでも可)に、もしくは一鳴き
・門前からのリャンメンチーは凶
・他家が鳴いてくる場では門前で
999、この辺はAIには難しいかも^^;
・周りが腰の重い打ち手が多い場合には門前で
・上家が国士をやっている時は一色手でも鳴きやすい
・門前で手を進めてると他家が高い手を和了しそうな時は鳴くと吉
この感じで良いでしょうか?
私自身は2鳴き優先でしたが、1鳴きのほうがいいのは、初めて知りました。
1.親でなら、2シャンテンぐらいでも鳴きで上がろう。(2,3位ぐらいの時、トップ親は鳴かない)
2.トップ子なら、1シャンテンで無条件に鳴いて上がろう。
この二つは変?
0591デフォルトの名無しさん
NGNG> 1.リャンメンは鳴かない。
いやそう単純にはいかんだろw
>>587のような手でチャンタの端寄せなら1が欲しいってのは道理だろうし。
でも鳴いて純チャンでもドラ付きで39、なしなら2千止まりだろ。その程度
の点だと実戦なら局面次第っていう要素が強くなるな。
・他家との点数配分でその点が必要な局面か?
・両面でも待ちが河などに見えてる牌に多いなら鳴いておかないとアガれなくなる
(両面ならといった待ち形というより待ち牌の残り牌で考えた方がベターかも)
当然だけど、逆目拾ったら役無しでフリテンとかになるのは、早そうでも論外。
0592男チャ漬け ◆VmNuOcUpJs
NGNGおなじみ、とつげき東北氏のページから
[フーロ技術論]
ttp://www.interq.or.jp/snake/totugeki/kouza9.htm
CPUには一切触れてないから分かりにくいかも。
でも、出来なくも無いかもしれません。
喰い仕掛けのタイミングは重要だとおもいます。
0594252
NGNGおもしろい。
しかも、まあまあいいセンいってるような気がする。
結果は毎回ばらつきそうだが、それほどばらつかない。
打牌候補順位も要らないものが上位にきている。
例えばこれ。
残りツモ回数 10
繰り返し施行回数 200
二三四六�B�C�D�H�H12566
1位 1
2位 六
3位 2
4位 �H
5位 6
何回か試したが、似たような感じ。
二三四六�B�C�D�H�H12579
これだと、9を切ることが多い。
この形でも、普通は1を切るのがはっきりとよさそうだが・・・
>>546、>>577の意見ももっともな話だけど。
0597253
NGNGサンプルとツモ数と回数が少ないとそれなりの結果は出ますよ。
その範囲で利用すれば・・・・・サンプルが厳しくなると難しいかな。
それを、たくさんのツモとたくさんの回数まで、同じになると考えなければOK^^。
0598253
NGNG一二三六�B�C�D�H�H25668
これを18ツモで、10回でやって見て、10回は早く終わらせるために。
何回もやって見て、ほとんど同じ結果になるから。 分かる人は理解できる。
0599デフォルトの名無しさん
NGNG0600デフォルトの名無しさん
NGNGみたいなのを、Javaで書いてマルチプラットフォームで動かせるようにしたい。
0601デフォルトの名無しさん
NGNG二三四六(3)(4)(5)(9)(9)12579
UPしたファイルには例として、場に見えている牌に「東9南北」が入れてあったんですが、それは消しました?あとドラは?
残っていたらその影響もあるかも。
ドラを字牌、場に見えてる牌を空にしてやると1になりやすいですよ。
残りツモ回数を減らした場合は9、あるいは六になりやすいですね。
12のターツ落しは一時的にターツ不足になるため、短期戦では不利という事が関係していると思います。
0602253
NGNG0603531
NGNG10回だと回数が少なすぎて意味のある結果は出にくいですね。
一になる事が多いのは最大値の検索にExcelのMatch関数を使っているためで、同点上位の何個かの中から一番左端のものを返すからです。
100回も繰り返せば大きなポカはやらなくなるようです。
0605531
NGNGごめんなさい、ちょと訂正。
六と8に並んで、確かに一もよく来ますね^^
左端云々はあまり関係ないか・・・
通常の麻雀だったら確かに悪手なのですが、このシミュレーションはあくまでも
「一人麻雀の最善手を求めよう」
という主旨で考えたものなので、一概に悪手と決め付けられません。
一人麻雀やった事ありますか?
麻雀好きな人なら誰でも一度はやった事あると思いますが、一人で牌を並べ配牌を取って一人で黙々と打つ。
そういうゲームでの最善手だからです。
和了の巡目は考慮せず、18巡以内に出来る最高形を目指す、という事をやっているから極端なタンヤオ指向の一切りという打牌になるのでしょう。
(一切りが本当に最善手かどうか、このアルゴリズムが正しいかどうか、まだまだ検討する必要はありますが)
ここまでは理解していただけましたか?
0606253
NGNG一二三六�B�C�D2566789
一と9が良く出るよ
0607253
NGNG0608531
NGNGまず、現在の局を「早く和了るのか」あるいは「高得点を狙うのか」方針を決めます。
河の状況から場の進み具合を判断したり、点棒状況から判断したりする事になるでしょう。
私には具体的な考えはまだありませんが、方針が決まったとしましょう。
早く和了りたいのであれば「残りツモ回数」を実際よりも少なくすればいい。
(遅くてもいいから)高得点を狙いたい場であれば「残りツモ回数」は多めのままでいい。
こんな感じで4人麻雀にも利用できると考えています。
0609531
NGNG>>606
質問の意図が良く分からないのですが?
あと「タンヨウ」じゃなくて「タンヤオ」ですよ。
0610253
NGNG0611デフォルトの名無しさん
NGNG0612デフォルトの名無しさん
NGNG0613253
NGNG家から^^、 可能な範囲でやりたいと思っています。
今わかる範囲では、AI戦には効果が薄いことが残念。
AIを作っていくと、可能な範囲と不可能な範囲が見えてきて、当初思っていた以上に
色々出来そうです。だから、相手の手お読むことは不可能だと思っていますが、
やって見ると、意外な方法を見つけるかもしれません。楽しみです。
0614デフォルトの名無しさん
NGNGプレイしたことがあります。
あれの花札は強かった。
0615253
NGNGいま、妄想してたら、ある程度安全牌を判定出来そうなアイデアが出ました。
ほんとに可能なのか、作ってみないと分からないです。
でも作るのが難しそう。CPUの計算能力がとてもいるし。
簡単に言うと、見えない牌と見える牌から、可能な手を逆推論するんです。
妄想だと行けそうな感じがする、多分山が半分ぐらい無くなってから性能が
出てくるような。終盤では高い的中率が出そうな気が・・・・・
AIも強くしたいし、252さん、試しにそちら作ってみて良い?
妄想で終わるか、可能なのか試してみたい。^^
仕様は、
・山が半分ぐらい無くなってから動作する。
・CPUパワー食いそうで、多分遅い。
・安全牌を予測するだけのAI、
・出力は・・・・・・外見はふらないこと?
他のAIと通信して、手予測の自動検証が出来ないと無理かな。
252さん、AI同士で通信方法が有ると嬉しいです。
500Byte位の中継を、1つのAIだけに送るような。
試合の時は動作しないでオプションか何かで指定して。
と勝手に妄想してるけど。検討よろしく。
でも、作ってもらった後、妄想で不可能でした、になるかも。もし暇なら検討を。
0616253
NGNG全部カンニングできるAI。 これなら通信は不要だし。
普通のAIを使用できる。
0617253
NGNG0618253
NGNG理由:今現在14枚の手牌解析だけで100パターンを超えます。
内部的な最大は900近く行きます。それが、50枚以上となると、
現実的ではない。
ごめんなさい、早くも挫折。 もっとゆっくり考えます。
0619252
NGNG一二三六�B�C�D2566789
この場合、18ツモにすると、一や9になることが多いが、
5ツモにするとほぼ2になる。
最高形も見ても、ツモがたくさんあると元から持っている牌が
大事にされないというか、必要になることが少なくなる。(253さんの考察どおり)
この形から、人間の場合は2しかないが、無意識のうちに速い上がりを考慮しているからだろう。
今、この形で1順目だからといってタンヤオもつけようということは無い。
なので、>>608のようにするか、
ツモ順を考慮して「早い上がりにはそれに応じた加点」してやるという手もある。
もっと自然に「上がり順が遅いと他家に上がられる可能性が高まり減点」とか。
これで、このAIが「上がりの速さを考慮する」ようになる・・・かも。
0620252
NGNG>12のターツ落しは一時的にターツ不足になるため、短期戦では不利という事が関係していると思います。
なぜペンチャンを落としたいかというと、そこはメンツになる可能性が低いからで、
短期決戦であればむしろメンツになりにくい(ここがネックになり、上がりにくい)と思える。
二三四六�B�C�D�H�H12566
残りツモ 5
打牌 6
統計を取ってないから分からないが、この形から5回のツモで3をツモる確立は少ないし、
「ツモ」のところをみてもあまり3はないとおもう。
上がり形を見てみると、ほとんど上がれておらず、
たまたま3を積もったときだけ上がれていることが多い(パッと見)。
六、5、6にくっついて上がる方が可能性が高い気がしてならないが・・・
ツモだけを考慮しているからそうなるのかも。
最後がロンをつかえるとなれば、リャンメンを残した方がいいはず。
あと↑にも関係あるが、テンパイの待ちがリャンメンかどうか、
他家に必要ない字牌などであるかどうかは和了率に大きく影響するはずなので、
そこらへんも「考慮する」ようになるといいかも。
ペンチャン、カンチャンがあると、そこが最後(テンパイ)まで残ることが多いのは当然なので。
0621252
NGNG「とつげき東北HP ベタオリ技術論」
http://www.interq.or.jp/snake/totugeki/kouza3.htm
牌ごとの危険度の表がある。へたに読まない方が失点を減らせるようだ。
でも、そういうのにチャレンジしてみるのも面白いかも。
麻雀の戦術書では、他家のあたり牌をよく1点読みしている。
わずか6個くらいの捨て牌から「これは3色で○-○待ち」とか。
あと、AIもいろんなバリエーションがあるといいかも。
■AI雀鬼 仕様
・1打目に字牌を切らない。
・前の局で「中」で上がったりすると、次の局でも「中」を大事にする(アヤっ牌システム搭載)。
・あたり牌を1点読み。点数も分かる。
・全員マイナスを狙う。
・天運、地運などを評価した打牌。
・2個くらいの捨て牌から、相手の手牌を読む。
ものすごく強くなったり・・・しないか。
■AI兎 仕様
・とにかく適当にあたり牌を1点読み。
(乱数で決める。・・・相手のしぐさとかそういうの取得できないし)
>>600
スレ違いだけど・・・
やってみた。14個たまを打ってからが地味すぎ。なんとかならんか・・・
0622253
NGNG>もっと自然に「上がり順が遅いと他家に上がられる可能性が高まり減点」とか。
>これで、このAIが「上がりの速さを考慮する」ようになる・・・かも。
モンテカルロ法を麻雀に適用した場合、構造的な欠陥があるので、この欠陥が
目的に影響しない範囲で使用する分には、それなりの成果が出ます。
ただし、欠陥を理解して使用しないと本末転倒。
0623デフォルトの名無しさん
NGNGだって、高い手を作るルーチンがない≒相手の手の高さが読めない
でしょ?
(現状では更に、自分の手を最速で上がるルーチンも無い訳ですよね?)
相手の手が確実に高い手だからこそ自分の手の速度を落としてオリる価値があるのであって、
リーチのみの安手にベタオリして「読み切ったぜ!」なんてのは初心者もいいとこだよ。
0624253
NGNG>■AI雀鬼 仕様
>・1打目に字牌を切らない。
>・前の局で「中」で上がったりすると、次の局でも「中」を大事にする(アヤっ牌システム搭載)。
>・あたり牌を1点読み。点数も分かる。
>・天運、地運などを評価した打牌。
>・2個くらいの捨て牌から、相手の手牌を読む。
>ものすごく強くなったり・・・しないか。
いわゆるオカルトですね^^
それを検証する意味でも、思いっきり暇があればやってみたいです。
実際、数百試合やってみると良い時と悪い時の波が見えます。
波が見えるからと言って予測できるものではないですが^^
まるで、株価の上下のように予測できそうに見えて、不可能なように。
0625デフォルトの名無しさん
NGNG「三色でなかったら(安いので)振っても構わない」というニュアンスが暗にあるんですよ。
0626623=625
NGNG0627253
NGNG>現状では更に、自分の手を最速で上がるルーチンも無い訳ですよね?
最速では302さんが最速です。
私の方は、多少手作りの方向に行きそうなので、最速は諦めています。
別のAIを作って最速を検証するのも面白そうですが、次の機会にでも。
0628253
NGNG私は、短い文章の中で説明を試みています。たぶん、はぐらかしてるとか、煙に巻いいるように
感じているかもしれません。そんなつもりは、たまーにほんの少しだけ有ります^^;
今後もこの形でしか説明できないと思います、よろしく。
正直、分かりやすいように書こうと思ったら、図解入り数ページになる^^;
0629男チャ漬け ◆VmNuOcUpJs
NGNG別にここは解説スレじゃないんですし、
それでいいんじゃないんですか。
AIのことは飽くまで意見を言い合う場、
もしくは、シミュレータのバグ情報報告
として使うべきですし、それ以上のことは
各自で研究すべきだと思います。
私だってAI作りはプログラム独学の一環
のつもりでやってますし、自分なんかが、
大したもの作れるとも思ってませんしね。
まあ、正直解説はして欲しいですが。
勉強になるし。
0630デフォルトの名無しさん
NGNG> 相手の手が確実に高い手だからこそ自分の手の速度を落としてオリる価値があるのであって、
> リーチのみの安手にベタオリして「読み切ったぜ!」なんてのは初心者もいいとこだよ。
相手の手が良いかどうかなんて確実に分かるもんじゃないし、それを無理に読むのは
どうかと思う。間違った仮定で分岐していったら結論もおかしくなるわけだし。役の高さ
や牌形に及ぶ読みは簡単にできない。思い込みの一点読みとかは論外だろう。
>>625にもあるし>>621のサイトの解説でも分かるが、問題は振り方。ベタオリ技術論
は論理的に牌を段階評価してるし、そのままプログラムに応用できると思うが。
0631デフォルトの名無しさん
NGNG0632253
NGNG>一つのAIに手牌情報も山も全部見えるようにするだけでもいい。
>全部カンニングできるAI。 これなら通信は不要だし。
>これだと、普通のAIを使用できる。
この機能をオプションか何かで入れることは難しいですか?
前回の案は、現実的に無理ですが、他の案が無いわけではありません。
今度は密かに検証して、発表かな^^
私以外も、やって見たい人がいると思います。
よろしければ、検討してください。
0633253
NGNG>は論理的に牌を段階評価してるし、そのままプログラムに応用できると思うが。
今読んでみましたが、プログラム的にはある程度は書けそうです。
ただ、何時それを使用するのかが問題、行くべきか降りるべきかの判断はとても難しい。
統計的に傾向を取ったとしても、それはAI固有の振る舞いでしか取れない。
AI固有の振る舞いをいくらとっても、価値はそのAIにしか無い。
やはり東風荘にAIデビューでもしないと・・・・・ 先は長そうだ。
0634デフォルトの名無しさん
NGNG強い弱いって問題は降りがあるかないかが直接関わってくるところ。鳴きの件でも
あったが、アガる意思の強い局かどうかも関係するだろう。とりあえずアガる見込み
の強弱を測って、よっぽど強くない限りは、他家のテンパイに対し、降り姿勢に変え
るべき。
少なくともリーチ一発や親リーチの捨て牌には降りの一手を打つべきなんじゃないか?
0635デフォルトの名無しさん
NGNG麻雀の強い弱いは手がきれいに並べられるかではなくて、相手との駆け引きに
ポイントがある。特に降りが上手いかどうかは最も重要なところ。
0636253
NGNG人間から見ると、最速リーチの全つっぱが3人いるとします。
一般的に勝つための有効な戦略とは何んでしょう?
0637253
NGNGはい、その通りです。
が、今のAIは、一度手を崩したらまず上がれない。手を回す概念はとても難しい。
ペンチャンやカンチャンを落とす以上に、難しいです。
>麻雀の強い弱いは手がきれいに並べられるかではなくて、相手との駆け引きに
>ポイントがある。特に降りが上手いかどうかは最も重要なところ。
手お創ることは早く、降りも降りしか出来ないAI、弱いですね。
中間か〜〜〜〜ムズイ
0638531
NGNG構造的欠陥とは具体的には?
うまくいかない事を証明したと言ってましたがその事ですか?
>>606はどうなりました?
14+n枚から最高形を導き出すのは計算量の問題で不可能ではなかったのですか?
相手を批判するならきちんと論拠を示して下さい。
私のやり方がうまくいかないとあなたの中で結論が出ているのなら放って置けばいいでしょう。
意味不明で中途半端な批判をする暇があったら、ご自分のプログラム作りに専念していた方があなたにとっても得なはずですよ。
0639252
NGNGもうちょっと検討して、これをAIに実装しようかなあと考え中。
いい感じの結果だし、簡潔さが魅力的。
まずい問題に気づいてない可能性は高いけど。
先読みの方法では、AIの作成がずっとずっと後になりそうだし、
新しい方法を編み出すには、自分に数学的素養がなさすぎる。
検討は続けるけど。
>>624
流れを読むプログラムは無理だろうなあ。
株価の場合いろんな予測方法があるらしい。
Software Designという雑誌で、
それでほんとに儲かるかシミュレーションする連載があったな。
>>623 >>630
まあ、この辺はいろいろな考えがあるでしょう。
ぼくは、相手の手配は読めないと思っている派。
>>625
それは無いと思うなあ。
それに、リーチ、ピンフ、タンヤオでも、表裏のドラや一発で満貫になってしまう。
>>632
了解。
一応確認だけど、暫定だけなら、単にMJSim側が持っている山や、
プレイヤーの配列へのポインタを渡すようにするけど、
当然ずっと使えるものが必要だよね?
0640531
NGNG気が付いたのですが、
今のプログラムではペンチャンやカンチャン待ちでもピンフになってしまう事があるので、その影響でペンチャンが切られにくくなってるかもしれません。
その辺りは早いうちに修正しようと思ってます。
ロンや鳴きの考慮はもっともなご意見ですね。
ただ、ロンや鳴きは対戦相手との関係で決まってくるものなので、現時点で適当な重み付けのような形にはしないと思います。
相手の手牌の読みとか場全体の状況判断とかを考えるようになった段階でそれらの考慮をしたプログラムにしようかと考えています。
0641253
NGNG>一応確認だけど、暫定だけなら、単にMJSim側が持っている山や、
>プレイヤーの配列へのポインタを渡すようにするけど、
>当然ずっと使えるものが必要だよね?
はい、お願いいたします。お世話掛けます。
0642252
NGNG>今のプログラムではペンチャンやカンチャン待ちでもピンフになってしまう事があるので、その影響でペンチャンが切られにくくなってるかもしれません。
それはあるかも。
でも、上がれなかった場合、0点なわけで、
ペンチャンを残すと上がれる可能性が低くなるから、
大きく平均点を下げる気がするんだけど。
もしかすると、意外とペンチャンはメンツになる(浮き牌がメンツになるのと比較して)のかもしれないが・・・
「ひいいの麻雀研究 牌効率理論」
http://www.ix3.jp/hiii/02mahken/2-04paikouritsu.htm
↑の「辺搭と浮き牌」のところ、なぜこうなるのかワカラン・・・
>相手の手牌の読みとか場全体の状況判断とかを考えるようになった段階でそれらの考慮をしたプログラムにしようかと考えています。
たしかに、最終的にはなるべく人為的な重みはつけずにやったほうが、おもしろそうだ。
でも、仮につけてみて、上手くいくか検証するのも良いかも。
0643252
NGNGまだ、考え中だけど・・・また、253さんの考えるものとは違うかもしれないけど。
やはり気になったのは、結果がばらつくかもしれないということ。
サンプル数を多く取れば、だいたい同じになるけど、
乱数を使う以上、変な形が連続することはありうる。
(まだやり方は分からないが)期待値計算で求める最善の1打は、
常に一意に決まるはずだ。と考えている。
0644デフォルトの名無しさん
NGNG手が入っているときは勝負、そうでないときはベタ降り。
この戦略で平均的に勝てない場合は、
1.牌効率がマスターできていない
2.手が入っているかどうかの判断ができていない
3.異常にツキがない(まず考えなくていいけどw)
のいずれか。
0645253
NGNG>1.牌効率がマスターできていない
とは、手作りが遅いと言うことですか? テンパイが遅い?
>2.手が入っているかどうかの判断ができていない
「手が入っているかどうか」とは具体的にどのような事でしょうか?
単に「最速でテンパイ」にするだけなら、AIはとても効率よく動作します。
並みの人間より速い、ただし、手と待ちは誉められた内容では有りませんが^^
0646253
NGNG無条件ツモ切りAIと4名ともAIでは、試合結果が変わってきます。
下記に先読みをしないAIをUPしました。このAIは見た目無条件ツモ切りAI並に
高速に動作します。そこそこの強さも有るし、自分の中に字牌等を抱えたままツモ切り
するよりはダミー的です。もしよろしければ試合等のダミーに使ってください。
また、MJSimに添付も良いかも。(宣伝みたいですが^^;)
他に良いのがあればそれもOKで^^
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_39/253Dummy.lzh
0647253
NGNG700試合300,400試合を3回やりました、302さんに3回とも少し勝てた。
正直嬉しい。^^ もちろんダミーは負けです。
ツモ切り2AIだと、302さんには何回やっても勝てなかった、理由は不明ですが検討の余地あり。
とまあ、そんなことがあったので出しました。302さんスマソ^^;
0648253
NGNG0649デフォルトの名無しさん
NGNGあれ?
3人のAIと対戦する人間の話ですよね?
1.は取捨選択を間違えるということ。
確率に基づき取捨選択ができるのであれば、手を大きくする事もできるはず。
人間のばやいです、あくまでも。
2.は大きくて和了りやすい手が来ているということ。
これで具体性OK?
私も人造雀士を作った事りますが、牌効率より先に役や読みに溺れてあまり強くなりませんでした。
最近、このスレ見てまた作ろうかと思ったりしてます。
0650253
NGNG>3人のAIと対戦する人間の話ですよね?
そうです、その知識をAIに活用できないかと思い。
>1.は取捨選択を間違えるということ。
>確率に基づき取捨選択ができるのであれば、手を大きくする事もできるはず。
>人間のばやいです、あくまでも。
了解しました。 手作りをして、早いリーチに対抗すると考えて正しいですか?
スピード的には多少落ちるかもですが。
>2.は大きくて和了りやすい手が来ているということ。
>これで具体性OK?
OKです、麻雀の専門的な言い回しがシロートなもので^^;
AI的にすると、手の役の大きさを評価する関数を作り、その評価と場の点数バランス
で、手が入っていると判断するの理解で良いですか?
>最近、このスレ見てまた作ろうかと思ったりしてます。
ぜひ参加お願いします。
0651デフォルトの名無しさん
NGNGほっといてもAI同士で振り合い、4着はツモられ貧乏のときしかありませんので、
手作りをしてというか、「ある程度良い手の時にしか行かない」に近いです。
早くて高い手の時に行く感じなので、スピードを犠牲にするのとはちょっとニュアンスが違うかも。
2は、大きさと速さを評価した方がよいと感じます。
偉そうなこと言ってるけど、プログラマーなんだから自分で作れ。 >>自分
ずいぶん前に作ったのでよく覚えていませんが、
手牌を渡すと点数計算してくれる関数なんかが提供されていたプラットフォームだったので、
その辺から自作するのはちょっと難儀かと。
再開するとなるとそっちの環境でになりそうです。
今、昼休みに少しずつ設計してますが、完成するのかなあ。
途中で投げそう・・・。
0652デフォルトの名無しさん
NGNG0653男チャ漬け ◆VmNuOcUpJs
NGNGプログラマさんが参戦していただけるならとても心強いです。
是非とも最強の麻雀AIを作ってください。
自分もプログラムの素人ながらやれる限りやっていますので。
0654252
NGNG山や他家手牌も見えるインターフェースを考えてみた。
仕様としては、v1とほとんど一緒で、以下の点を変更。
・AIは、AIInterfaceVersion関数で2を返す。
(インターフェースv2を新設)
・AIAction関数の宣言はv1と一緒。
・Taku構造体の中の、他家手牌も見える状態。
(v1ではすべて0になっている)
・Taku->Player[Index].Action.Typeに山配列へのポインタが入っている。
(キャストしてください)
山の仕様は、
int Yama[137];
//0〜3:リンシャン牌
//4〜7:表ドラ表示牌
//8〜11:裏ドラ表示牌
//12〜13:使用しない牌
//14〜:ツモ牌(最初の13×4牌は配牌)
//136:番兵。常に0
また、MJSimのオプションで、v2のAIを許可するかどうか指定できる。
オプションが無い場合、v2のAIが1つでもあるとエラーになる。
0655252
NGNG乙。
見てみた。シャンテン数だけみてるのかなあ。
たしかになんか順位が良くなっている。
添付はいまのとこ考えてない。
男チャ漬けさんのやつを添付してるのは、説明書が不親切なので
補足になればいいなと思って・・・( ´Д`)
0656252
NGNG>手牌を渡すと点数計算してくれる関数なんかが提供されていたプラットフォームだったので、
>その辺から自作するのはちょっと難儀かと。
点数計算などの関数は、AI用ライブラリを作る予定なんだけど・・・まだ無し。
あと、テンパイや鳴きのタイミングを知らせたりする
基盤クラスとか(>>312みたいなの)も考えてはいる・・・
>再開するとなるとそっちの環境でになりそうです。
どういうソフトでしょう?まうじゃんかな?
個人的な考えだけど、AI作成で必要なのは、
・たくさん(1000試合単位で)打たせて、
・再生して打ち方を確認したり、
・さまざまなデータを取ること
なので、宣伝だけど、MJSimは最初からAI作成用ツールとして作って、
再生、統計に東風荘のツールが使える。
しかし、たしかに
・点数計算関数すらAIへ提供しない不親切設計、
・バグも多く、
・成熟もしてない
ので・・・(´Д`)
まあ、何が重要と考えるかは、みんな違うと思うので。
上記がクリアされていて、かつ作りやすいとなれば、ぼくもそっちで作るw
0657デフォルトの名無しさん
NGNGまうじゃんです。
0658デフォルトの名無しさん
NGNGPCのクセにフリテンチョンボ連発するのが解せなかった
0659253
NGNG了解しました。よろしくお願いします。
>>655
今はシャンテン数しか見ていないですが、あれからやったら勝ったり負けたり^^;
相変わらず、リーチの速さと得点はこちらが低いです。
>男チャ漬けさんのやつを添付してるのは、説明書が不親切なので
>補足になればいいなと思って・・・( ´Д`)
了解。、新しいAIはどれも重いので、試験対戦用には使えず又、ツモ捨てでは
実践的ではないのでデーターが違ってくるようで、それで出しました。
たくさんAIが出てきた時にでもまた。
>>657
>>まうじゃんです。
まうじゃんですか、Javaも悪くないのですが、AIの様に小さなループや大きなループを
ガリガリ回すのにはC++は特に速いですよ。
最新AIも汎用ライブラリーは遅いので、メモリー管理から総て100%自作になってしまいました^^
その分とても高速^^。ゲーム木も、作った後は、2命令で開放してます。
オリジナルNewも空きを探して、使用中フラグ立てるだけ。
ゲーム用に書かれたNew,Deleteライブラリーも遅く感じて、新規です。
過去に点数計算等いろいろ出来るライブラリーが紹介されてました、それを使用するのも一考。
0660デフォルトの名無しさん
NGNG最近はjavaもあるみたいですが、私が作ったときはC++でしたよ。
0662デフォルトの名無しさん
NGNGwww.amy.hi-ho.ne.jp/ishihata/maujong/のwindows版のプラグインの部屋で。
0664デフォルトの名無しさん
NGNG関数のインタフェースとdllはついてますよ。
0665Nqmse5U6
NGNG0666Nqmse5U6
NGNG0667人工知能研究者
NGNG2命令ってのはアセンブラの話ですか?
今のCPUは命令数が少ないからといって速いってのは
成り立ちませんよ。
ちなみに、汎用ルーチンをアセンブラで書いた時
普通はコンパイラに負けます。
Javaは最適化自体を動的に行うという離れ業を行いますので
さらに高速化できる可能性があります。
実際はどうだか・・・(かなり速い)
高速化のポイントは
命令数よりは
メモリの読み書きの仕方ですね。
メモリを一回読み込むのと
レジスタ上で演算を一万回やるのって同じくらいのコストになるんじゃないでしょうか?
(かなり妄想かも)
そうなると結局はアルゴリズムなんですよね。
なので、アルゴリズムを考える事に全力を注ぐといいと思いますよ。
例えば
バイナリツリーからハッシュへ変えたりとか
ヒューリスティックソートを用いるとか
そういうところにプロファイラを活用してみるといいかもです。
0669デフォルトの名無しさん
NGNG>メモリを一回読み込むのと
>レジスタ上で演算を一万回やるのって同じくらいのコストになるんじゃないでしょうか?
ソースだせ、ゴルァ!
0670253
NGNG結局、AIで使用するゲーム木は大きさがさまざまです。
少ない方が多い、いま1000のバッファーを持っていますが。
これを、数十回も使用開放してます。今最高が900まで使うので1000です。
開放する度に初期化していては時間がもったいないので。
上記2命令です。もっと短くすると。
1行でもできます。
INITF=true;
バッファーカウンターを0にしているのは、愛嬌です^^
0671253
NGNGゲーム木は2種類あって縦方向と横方向で、
上記は横方向のバッファーです。縦方向は全部の検索が終わった時同じように
2行程度で初期化してます。
0672デフォルトの名無しさん
NGNGプログラム板じゃしょうがないか。
0673デフォルトの名無しさん
NGNGメモリを確保したり解放したりすることのコストは
たいしたことないよ。
フラグメントとかを気にするならまだしも。
0674253
NGNGいや、それが中々、気にな量です。
概算すると。
ノードおきのデータ数が平均約70ぐらい。(最高900まで行きます)
ノード数が少なく見積もって40。
これが1ツモのnew、delete回数。
1局18ツモあるとして。
1秒に4局ぐらいできます。
この場合のnew、delete回数は
70データ*40ノード*18ツモ*4局=201600回 約20万回です。
標準提供のnew、deleteでは、まったく遅く。ゲーム専用に作られたnew、delete
ライブラリーでも遅く感じたので。専用の最短最速のメモリー管理を作りました。
これがあるので、5手目も行けそうな気分です。
0675253
NGNG×20万回
○20万/秒
0676253
NGNG約 10万new,delete/秒
0677デフォルトの名無しさん
NGNG速いに越した事はないが1半荘が数秒?
そこまで早く打つ必要あるん?
1打1秒くらいかかっていいからまともな打牌をしてくれるプログラムキボンヌ
0678253
NGNGちなみに、縦方向探査だけならメモリー確保は少しでいいのですが。
探査後の分析に出来るだけデーターが欲しいので、探査データは残るようにしてます。
次の時に、そのデータを再利用してもっと高速にする予定。
0679253
NGNG過去スレに有りますが、麻雀の強弱には1000−2000試合して初めて分かるのではないかと
言われています。そこから逆算して、速く打つ環境のMJSimができ、今のところAIもまた、
速く打てるようにしてます。実際200−300ぐらいでは、強弱ははっきり出ないです。
ゆくゆくは、人間相手に1,2秒を考えていますが。今速ければ一手に1,2秒使ってもいいときは、
もっと多くの処理が出来るので、当然強くなります。
0680デフォルトの名無しさん
NGNG速くて強いのを作ってくれ。
0681デフォルトの名無しさん
NGNGプログラム同士の強さを競うのは人間から見て最低限のまともな手を打てるようになってからでいいよ。
1半荘打たせた打ち筋を人間が見れば最低限の強さがあるかどうかは大体分かるだろ。
0682253
NGNG0683デフォルトの名無しさん
NGNG0684681
NGNG多少乱暴な言い方だったかもしれんが、
この程度で煽りと言われちゃ2chで何も話し合えないな
反論できるけどしない、て書き方もみっともないぞ
0685デフォルトの名無しさん
NGNG0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNG人間の表情などから心情を読み取って動作を変えるものがたくさんでてきます。
麻雀ソフトの場合いわゆるポーカーフェイスを崩さずにいられるかで
結果がちがってくるのでしょう。
となるのはいつかな。
0688デフォルトの名無しさん
NGNG人間がなに考えてるかばればれだな。
0689デフォルトの名無しさん
NGNG0690デフォルトの名無しさん
NGNGメモリ確保・解放の時間<<<<<<<<<<<<<<<<<<<メモリリード・ライトの時間
という事で
メモリ確保・解放を一生懸命やっても意味ない。
ゲーム用のはフラグメントを気にしてるんだよ。
そもそもメモリの確保と解放ってなんだと思ってるんだろう・・・
プロファイラの使い方を知ってたら、使ってみるといいよ。
あと、木の話も勘違いしてるようなのでアドバイスしておくと
深さNの木のノード数を数式で書いてみるといい。
Size(Tree(N))=M^Nになる。
つまり、縦方向の深さはちょっとした最適化を行ったからといって
深くなるようなものではない。
将棋などでは、枝狩りを行う事によって深くしている。
麻雀でも同じ事ができるよ。
ちなみに麻雀では強化学習を使うといいよ。
このスレの頭の方でも出てたと思うけど。
0691252
NGNG別に煽りには見えないな。もっともな意見。
で、競うという目的もあるけど、
1000試合やらないと、結果がわからないということは、
その打牌で良いのかどうか(偶然好手になったのか、もともと良いのか)
そのくらいやらないとわからないってことにならない?
1000試合結果の、例えば和了率が偶然でない程度に違うとかで、
ようやく搭載した機能が実際に良いかどうか分かる。
人間が見て良いと思う打牌とは違う可能性がある。
なので、ある程度速く打ってくれないと困るということはある。
でも、そんなこと心配するほど進んでないわけだし、
まずは人間がいいと思う打牌を目指すのでいいし、
ましてメモリを最適化しないといけないレベルではないというところには同意。
なので、思いついた最適化法は、メモだけしておいて、
今やらなければいけないかどうか、優先度を決めた方が早く完成するかと。
0692デフォルトの名無しさん
NGNG0693252
NGNG○・・・現手牌
.+--+-
○...○・・・14種類の切り方(14通り)
.......-+--+-
..........○..○・・・それぞれに34種類のツモ(14×34通り)
.....................・・・それぞれに14種類の切り方
.....................・・・それぞれに34種類のツモ
繰り返し
18順(捨ててツモる)で1.5×10^48通り。
3順で1億通りくらい。
それぞれで、上がっているかどうか、上がっていたら点数計算して、
現手牌からの切り方14種に点数を加えるという方法だと、
残り3ツモなら数十分〜1時間くらいでやれるかな?
(1万命令*1億通り/クロック2GHz=17分 てきとう。1万命令は根拠なし)
>>690
>ちなみに麻雀では強化学習を使うといいよ。
なぜその方法がいいと思うのかとか、実際にやれそうかとか、
もう少し説明があるとありがたいけど。
>>692
どのレスの、どの部分に対して書いたの?
0694デフォルトの名無しさん
NGNG0695252
NGNG(>>692がどこを指しているか分からないため)
>>691の話だけど、これは人のことは言えない。
上のほうのレスでは、メインの考え方もないうちから、枝刈りのことを考えていたし、
MJSimにしても、数百バイト程度のメモリコピーが嫌で最適化しようとしたり。
もっと昔は、意味なくメモリ最適化もやったし、printfが遅いから自作したこともあるw
結局そのとき作ってたソフトは完成しなかった。
これはプログラミングではよくあることだと思う。なにが重要なのか分からなくなっている。
そして、他人から指摘されるか、放り出してずっと後に気づくということを何度もやってきた。
253さんが、AI作りが嫌になってやめるなら別にいいけど、
上記のようなくだらないことで放り出すことになりはしないかと愚考して、僭越ながらアドバイスした。
えらそうに見えたかもしれないな。
0696デフォルトの名無しさん
NGNG無理
N順目で(2^5)^N通りだとする。
2^5=512=14*34と近似している
2^10=10^3と近似する。
そうすると
2順目先まで読むと1000倍の時間がかかる事がわかる。
K順目まで読むのに1秒かかったとすれば
K+2順目まで読むのには1000秒=15分
k+4順目まで読むのには15000分
まあ、実装してみればわかるよ。
強化学習って単語の意味がわってるなら
なぜ使うといいかを解説してあげるよ。
0697デフォルトの名無しさん
NGNG252は「残り3ツモなら」と言ってるのに、一般的なK巡読みの話をして「無理」というのは話がかみあってないような・・・
巡目を増やせばすぐに天文学的な計算量になる事ぐらいはここの人なら誰でも分かってる思うけど。
0698デフォルトの名無しさん
NGNG2^5=32ですが?ダサ。
K+3手先を読むには(14*34)^3=1.07*10^8で約一億であり693はとっくに述べている。
残り3ツモを一時間で読み切るためには1秒で三万手の判定をすればよいので
速いCPUなら可能かな?
現実的には空ヅモが多すぎて役に立たないかな。
「シャンテン数が減る・ヤオチュウ牌が減る(タンヤオ狙えるなら)」という制約で枝狩りしても
そのための計算量が指数関数で増えてしまうので何とも。
「今の手から3つ牌を入れ替えて出来る手や役」を探して見えてる牌から確率計算した方が速そう。
木構造を使わないで実装できないものか?
個人的には696の強化学習についてのご高説を拝聴希望。
「何を」報酬にするか?点数?シャンテン数?
盤上のファジーさをどうやって一つの状況としてまとめる?
よしんば纏められてもその状況は学習に必要最低限で時間的に有意な回数発生するか?
ここらへんキボンヌ。
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNGK巡目の話じゃなくて
時間がどれくらいのレートで上がっていくかの話をしてるんじゃない?
>>698
みたいに計算量を出しても
結局できるかできないかわからないし
0701НΙДАЯΙКΑЯАИΙБАИΜЁ
NGNG0702デフォルトの名無しさん
NGNG人間の読みは消去法だからな。
そんなルールはこんぴーたには適用できまへん。
0703253 ◆zYOv9tiWpg
NGNG人間が出来ること、AIが出来ること可能なことを、AIを作った経験ある人とそうでない人との「討論」
は土台が違うため平行線が多くむなしい。
私はモチベーションが下がったので終了、モチベーションが上がるようなことがあったらまたよろしく。
何か私に関係が有ることがあっても、書かないのでよろしく。
0704デフォルトの名無しさん
NGNGAI作った上でぶつかる問題点も分からないで、話が表層ばかりだ。
>>698
「1」>「シャンテン数が減る・ヤオチュウ牌が減る(タンヤオ狙えるなら)」という制約で枝狩りしても
>そのための計算量が指数関数で増えてしまうので何とも。
「2」>「今の手から3つ牌を入れ替えて出来る手や役」を探して見えてる牌から確率計算した方が速そう。
>木構造を使わないで実装できないものか?
指数関数に増える部分を枝狩りして絞り込むことが木構造の目的なのだが、
それを木は指数関数で増えるから何とも、言うのはおかしい。
例えるなら。枝狩りして3つ牌を読む「1」と確率の「2」の牌を選ぶ性能差を比較すべきで、
将棋のAIの枝狩り数手先を考えれば、麻雀の枝狩で3ツモ先はそれ程重くないと思われ。
0705698
NGNG枝を刈る手間は枝をそのまま読む手間に比べてずっと小さいのは当たり前だ。
704の話はもっとも。
実際に確かめればいいんだけどな。VCがあれば。
昔MJSimのJAVA版みたいなのを自作したけど、組んだAIをプラグインにすることが出来なくて諦めたので
MJSimには期待してるんだけどな…。
0706252
NGNG開発中断は残念だなぁ。
最初からいろいろと協力してくれてありがとう。
ここまで続いたのは、その協力があったればこそと言って過言でない。
>私の様に書いた、文も見受けられるが私ではない!
どれのことかな?
>人間が出来ること、AIが出来ること可能なことを、AIを作った経験ある人とそうでない人との「討論」
>は土台が違うため平行線が多くむなしい。
これも何をさしているのか分からない。
話の流れから、メモリのことか、
それとも僕を含めた人たちの提案のどれかなのか。
そこらへん意思疎通したいところだが・・・しかたないか。
0707252
NGNG計算間違いはドンマイ。
よくあることでしょう。
「2」GHzと自分で書いたのを忘れて、1GHzで計算してたりとかさ。
あと、>>693の捨て牌選択手法には、かなりまずいところがある。
牌の残り数が全く考慮されていない・・・
これを解決するもっとも単純な方法は、
4枚ある同一牌を別のものとして考えることだが・・・
強化学習について。検索してみた。
http://hawaii.aist-nara.ac.jp/research/reinforcement.html
↑の一番最初のところだけ読んだ。
よさそうだけど、将棋AIのことを調べていたときは、この単語は出てこなかった。
将棋では使ってないのだろうか。もしくは使えない理由があるのか。
最強レベルの将棋AIのページで、アルゴリズム解説しているところもあるし、
将棋AIを評価しているページなどもあったけど、
使っているなら、少しくらいは説明や宣伝があってもいいはずだ。
0708252
NGNG>AI作った上でぶつかる問題点も分からないで、話が表層ばかりだ。
今やっている話を表層というのはおかしいと思う。
根っこの部分では?
建築に例えるなら、鉄筋にするのか、木造にするのかみたいな。
AI作成に関しては、明日から時間が大きめに取れるので、ここで進めたいと思う。
例のタンヤオのバグを直してから、モンテカルロ法で作る予定。
>>654のデバッグ用インターフェースは、保留ということで。
また必要だという人が現れたら検討する。
0709デフォルトの名無しさん
NGNG荒れたのは>>531が原因だよ・・・
0710252
NGNG↓だめだめかな?特殊構文とか使ってないのでなんでもよさそうだけど。
タダで最強!フリーC/C++コンパイラ
http://pc2.2ch.net/test/read.cgi/tech/1035882599/
0711デフォルトの名無しさん
NGNG>根っこの部分では?
>建築に例えるなら、鉄筋にするのか、木造にするのかみたいな。
残念ながら設計図レベル、あそこにキッチン此処にリビング
2階に10部屋欲しいの潰れそうな家かもしれない。
構想は良いが作ったら小屋だった、立派な家にするためには、見えなかった
問題がXXX有った。
小屋ではなく、立派な家を期待する。
0712681
NGNG>ドングリの背比べ状態で1000試合競ったところで何の意味があるんだ?
は言い過ぎだった、荒れるキッカケ作ってスマソ
なんつーか、色んな人が色んなやり方でやればいいジャン、と言いたかっただけなんだわ
「こういうやり方じゃないと駄目、それじゃ無理」みたいな排他的なふいん気が嫌でつい筆が滑ってしまった
俺自身はプログラムは書けないが、麻雀打ちとして気が付いた事があったらまた色々言わせてもらうよ。
0713698
NGNGそれはもう試し済みです。
BCCではVCとDLL内関数の内部的な名前形式?(詳しくわからない)が違うのですよ。
最終目的が皆で持込対戦することである以上、他人と同じVC流の名前の付け方でコンパイルせんと。
このやり方が判らずに挫折したヘタレです。
0714デフォルトの名無しさん
NGNG俺が作るけど。
仕様とか要望とか適当に出して
まとめておいてくれれば
反映する事も可能。
ただし、当方麻雀のルールはあまり理解できてない。
だいたいはわかるけど、細かいルールとかローカルルールは知らない。
用語もわからないのがちらほらと。
ので、お勧めの本とかも教えてくれると助かる。
0715デフォルトの名無しさん
NGNG現在市販されている将棋ソフトで、「学習」を積極的に取り入れているものは無い。
「学習機能有り」というソフトもあるけど、それのおかげで悪手を指さなくなるという
類のものではないようです。
(だいたい、どうやって悪手と判定するんだ?という問題があるし)
採用されない最大の理由は将棋は局面の場合の数が多すぎる事でしょうね。
将棋は何百局も指しても同一局面になる確率がかなり低いですから。
となると、麻雀でも期待薄のような気はしてきますけど・・
0716男チャ漬け ◆VmNuOcUpJs
NGNGライブラリを自作中なのですが、全くアイデアが浮かばず滞っております(^^;
各役ごとに必要な牌、面子が違ってくるためにそれらを踏まえた上で
面子検索を行う必要があり、余りにも複雑で困ってます。
ヒントを求めていろんなサイト回ってますが、分かりやすい解説サイト
今のところ全く無いし、解決の糸口も未だ見つかりません。
何か、アイデア、情報が載ってるサイトありましたらご教授願えませんか?
もしくはアドバイスでも構いませんので是非お願いします。
自力ではかなり時間掛かりそうなので(^^;
0717デフォルトの名無しさん
NGNGできるよ
EXPORTS
0718デフォルトの名無しさん
NGNG二人打ちなのか四人打ちなのか教えてくれ
0719デフォルトの名無しさん
NGNGうーんとにかく服脱ぐヤシで
0720252
NGNGMJSim 0.5.8
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_40/MJSim_000508.lzh
・上がり牌がヤオチュー牌のとき、タンヤオになってしまうのを修正。
>>711
>残念ながら設計図レベル
設計図レベルだったら、まだ施工する段階でないということにならない?
>>713 >>717
defファイルがいるみたい。
bcc32 -tWD -eMJSimAI.dll MJSimAI.cpp StdAfx.cpp
MJSimAI.defファイル
---
EXPORTS
AIAction = _AIAction @1
AIInterfaceVersion = _AIInterfaceVersion @1
---
0721252
NGNG>>714
Java版?期待。
Javaのほうがいいような気もするなぁ・・・使ったことはないけど。
CからもJavaのクラスを呼べればいいけど・・・
>>715
う〜む、麻雀はまだ「こうすれば上がりやすい」みたいなのがありそうだけど・・・
でも、どう作るかは思いつかん・・・
>>716
配牌から狙える役を予測するということでしょうか?
0722男チャ漬け ◆VmNuOcUpJs
NGNG配牌を各役の形に当てはめてあと何牌あれば聴牌に成るかを
測定するだけです。最終的には構造体にデータを格納して
AI側でも呼べるようにするつもりで作ってます。
シャンテン数、有効牌測定をあらゆる役にも応用できるように
するよう構想を練っている所ですが、いいアイデアが浮かばず。
0723252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_41/Ryoko_0000.lzh
現在のところ以下のような仕様
・モンテカルロ法のアルゴリズムのみで、
シャンテン数を見たりなど、他の対策はやっていない。
・役はリーチとピンフしか見ない。
・試行回数は200回。
・ツモ回数(読みの深さ?)は、自分がツモれる回数。
ブッチギリで最弱。
253Dummy(シャンテン数だけ見て切っているらしい)にすら大きく差をつけられる。
他のAIに勝つまでうぷはやめようかと思っていたが、
その道のりはかなり遠そうなので、とりあえず。
モンテカルロ法がダメなわけではなく、これから発展していくであろう・・・たぶん。
変な切り方をひんぱんにやる。
字牌の孤立牌があるのにターツやトイツを先に落としたり、
わざわざテンパイにならないところを切ったり・・・
なぜそっちかね!と突っ込みたくなる。
0724252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_42/MJSimScore.lzh
19試合。20KBくらい。
シャンテン数が小さくなってきたときでツモが多いときに変な切り方かな。
まずはシャンテン数が小さいときは、ツモ(読みの深さ)を少なくしてみるかな・・・
>>713
BCC Developer
http://www.hi-ho.ne.jp/jun_miura/bccdev.htm
Borland C++ Compiler 5.5用の開発環境だって。
デバッグもここでやれれば良いけどなあ。コマンドプロンプトで動くターボデバッガか・・・
あと、Delphiパーソナルとか統合環境あるし、パスカルに抵抗なければよさそうだけど。
>>722
1つ1つの役ごとに、シャンテン数と有効牌を教えてくれるのかな・・・
例えば、タンヤオとかだと、不要牌だけおしらせでもいいかもね。
有効牌だと、なんでそれが有効牌なのかってことになるし。
国士とかは有効牌でもよさそうだけど。
0725デフォルトの名無しさん
NGNGある程度強くなれば純理論的・総当たり的な理論も必要だろうが、まだまだ人間的な一般論や定式の実装が先な気がする。
例えば、ペンチャンの落とし方とかそういう所は、始めからAI的に全て計算させるより先に、面子があまった時に初めて考えても良いと思う。
少なくとも人間は(私)はそう考えて麻雀してる。
そのためには、一般論や定式をどう実装するか問題な訳だが、今のところ泥臭くロジックを書くしかなさそうだ。
しかし、そんなもんいちいち手牌をIFで判断するのは馬鹿らしいしので、手牌を検査できる正規表現のようなものが欲しいのだが、どんなもんだろう?
いちいち特定の条件を検査するロジックを書く手間を省くと共に、一段踏み込んだ論理的な会話をするにも有益だと思うのだが。
(正直、今の麻雀用語だけでは語彙も表現も少なすぎて、プログラマ間の会話は成り立たないと思う)
0726男チャ漬け ◆VmNuOcUpJs
NGNG捨て牌検索は>>302さんのをお借りして一旦公開します。
それ以外の処理は一通り実装していますので、
前のAIよりは遥かに参考になるかと(^^;
↓でソースがダウンロードできます。
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_43/283_MJSimAI.lzh
>>723-724
お疲れ様です。
ソースがとても簡潔にまとまってていいですね。
次バージョン期待しています。
>>725
>手牌を検査できる正規表現のようなものが欲しいのだが、どんなもんだろう?
現在手牌検索みたいな物を作成中なので、具体的なアイデアがあれば
何でもいいので教えて欲しいです。実装したいので。
0727698
NGNG感謝します、が今は時間的制約があって独自のAIを書けるほど
余裕がありません。一段落ついたら始めようと思いまつ。
0728252
NGNG>>321で「パターンマッチングDB」というのが出てきたことがあるけど・・・
まあ、詳しい説明もないし、ソースもないから、よく分からないけど。
「人間的な一般論や定式の実装」というのは、
・ペンチャンの落とし方のようなこまかい「手筋」
・将棋AIで言う「定跡データベース」みたいな大まかな作戦をきめるもの
どちら?両方?
将棋AIでは、(おおまかには)序盤は定跡DBを使い、終盤は総当りらしい。
で、僕が思うに、麻雀は配牌時点からほとんどの場合すでに、
将棋で言う終盤に入っている気がする。
将棋では、ゲームが始まった瞬間に詰みが見えていることはないが(「月下の棋士」除くw)、
麻雀は配牌から何をするか決めるし、おぼろげながら上がり形が見えている。
また、そのように打たなければ勝てないだろう。
総当り法や、その簡易版であるモンテカルロ法は、
配牌から自然と上がりやすく高い方へ向かう(はず)。
パターンマッチングで、それができるだろうか?
正規表現というのはおもしろそうだけど・・・
0729デフォルトの名無しさん
NGNG$bcc32.exe MJSim.cpp
じゃだめなんですか?上のほうでexternとか出てますけど、MJSimのコンパイルにも必要なんでしょうか?
0730252
NGNG>>726
加カンのバグ、なるべく早めに直す予定。さんくすこ。
StdAfx.hでインクルードする「283_AI.h」は、283_v007.hの間違い?
男チャ漬けさんのAIは、今後どの方法を使う予定でしょうか?
・総当り法
・モンテカルロ法
・パターンマッチング法
・メンツやターツに重みをつける方法(パターンマッチングと同じかな?)
・その他
0731252
NGNGbcc32 MJSim.cpp Hantei.cpp Mahjong.cpp StdAfx.cpp Tenpai.cpp
アーカイブのMJSimフォルダのファイルを全部リンクする必要あり。
>>724で紹介したBCC Developerを使うという手もあり。
EXPOTSというかdefファイルは、AIのコンパイル時に必要。
関数名に「_」がついてしまうようだ。
「-u-」オプションで消すと他がおかしくなる。
0733252
NGNG厳密な期待値計算でないので、しばしば「運のみ」で捨て牌が決まってしまうことがある。
試行回数をできるだけ多くするのはもちろんのこと、
微妙な場合でも運でない程度に差がつくように、
いろいろ追加する必要があると思う。
例えば、(手牌がばらばらで、見える数も同じ、ドラでもないという場合で)
孤立牌の字牌と、孤立した9マンがあるとする。
使われなさで似たようなものだが、9マンを残した方が
シュンツに使えることもあるし微妙にいいはず。
しかし、9マンを残したときと、字牌を残したときで同じような点数になってしまう。
で、9マンを切ったあと7マンをツモって困るということがある。
こういうのでも点数に差がつくようにするにはどうしたらいいのだろうか。
>>531さんはもうこないのだろうか・・・
0734729
NGNGbcc32 -tWD -eMJSimAI.dll MJSimAI.cpp StdAfx.cpp
MJSimAI.defファイル
---
EXPORTS
AIAction = _AIAction @1
AIInterfaceVersion = _AIInterfaceVersion @1
---
で無事にコンパイルできました。やっとすたぁと地点に立てた・・・・。感動の涙。
さてと、cppの勉強にでも行ってくるか。先は長そうだ・・・・
0735男チャ漬け ◆VmNuOcUpJs
NGNGこれもびっくりしました(^^;;
===== 東風戦:ランキング卓 300卓 開始 2003/01/01 00:00 =====
持点27000 [1]Ryoko_v000 R1500 [2]302v012 R1500 [3]253Dummy R1500 [4]283v007 R1500
東1局 0本場(リーチ0) 253Dummy -3000 283v007 1000
流局
[1南]1m1m3m4m5m7m7m8m4p1s3s5s中
[2西]3m3m4m9m2p3p3p2s7s東北発発
[3北]2m6m1p2p4p7p7p3s6s7s8s9s9s
[4東]5m5m8m9m3p8p5s6s7s東白発中
[表ドラ]1m西 [裏ドラ]9m5s
* 4G8p 4d3p 1G6s 1d中 2G2s 2d9m 3G9m 3D9m 4G東 4d9m 1G発 1d1m 2G8s 2d北 3G8p
* 3d1p 4G東 4d8m 1G9p 1d発 2G4s 2d東 4K東 4G7p 4d中 1G7m 1d7m 2G6p 2d2p 3G2p
* 3d2m 4G西 4D西 1G6s 1d1m 2G9s 2d6p 3G2m 3D2m 4G5s 4d発 1G1s 1d9p 2G9p 2D9p
* 3G西 3d3s 4G南 4D南 1G3s 1d3s 2G白 2D白 3G1p 3d4p 4G2m 4D2m 1G1m 1d6s 2G2m
* 2d3m 3G5m 3d9s 4G6m 4d白 1G南 1d1m 2G6p 2D6p 3G1s 3D1s 4G南 4D南 1G9p 1d南
* 2G5p 2d4s 3G中 3D中 4G3s 4D3s 1G北 1d4p 2G6m 2D6m 3G4m 3d9s 4G1p 4D1p 1G5p
* 1d9p 2G北 2D北 3G1m 3d西 4G4p 4D4p 1G7s 1d北 2G8s 2D8s 3G9s 3D9s 4G7p 4d5s
* 1G3p 1d5p 2G6p 2d発 3G5s 3d8s 4C6s7s 4d5s 1G8m 1d3p 2G2s 2R 2d発 3G白 3D白
* 4G中 4d6m 1G5p 1d3s 2G6p 2D6p 3G5p 3d1m 4G1s 4D1s 1G7m 1R 1d5p 2G西 2D西
* 3G6m 3d6m 4G西 4D西 1G9p 1D9p 2G白 2D白
>>730
>StdAfx.hでインクルードする「283_AI.h」は、283_v007.hの間違い?
はい。そのとおりです。直すの忘れてました(^^;
>男チャ漬けさんのAIは、今後どの方法を使う予定でしょうか?
えーと、今のところ>>526のやつを応用しようと考えています。シャンテン数、期待できる役の数、有効牌数を評価して
捨て牌の検索ができるようにしたいなと。最終的には期待値まで計算できればライブラリとして公開できそうですね。
でも、選択肢で言えばどれになるんでしょう(^^;
0736252
NGNGC++でなくても、普通のCでOK。
また、AI作成ではプログラミングは適当に使えればいいと思う。
数学的センスの方が重要と思われる。
あと、前にも書いたけど、デバッグがきついのでDelphiの方がいいかも。
0737252
NGNGあらら。もしかして、手牌に字牌しかなかったら国士テンパイになるのか・・・
これもはやめに。
>>526のやつ、あんまり理解してなかったかも。
有効牌だけ抽出して、期待値計算かな。
あとから捨て牌の検索をするんでしょうか?
先に切っておいて、14種の形から有効牌を抽出のほうが簡単そうに思う。
でも、1m2m5m9m9mの形なら、たとえば
�@1m2m9m9m 有効牌3m
�A1m5m9m9m 有効牌4m6m9m
こんな感じだが、そもそも有効牌とは、どこまでのことを言うのか・・・
�@の場合、1m2m9mをツモれば、それも形が変わってテンパイになるし、
�Aも同様に1m3m7m9mでもテンパイ。う〜む。
分類だけど、ちょっと変えて、
・総当り
...・ほんとに総当りする
...・有効牌だけ期待値を調べる ←これかな
...・モンテカルロ
・ターツに重みをつける
...・パターンマッチング
・その他
0738男チャ漬け ◆VmNuOcUpJs
NGNGこちらの方も先に切ってから有効牌を調べる方式にしてます。
そちらの例えに、メンゼンで他に3つ順子がある形で
1m2m5m9m9mとある場合でメンツ検索します。
その場合頭は省くので実質上1m2m5mのみで検索します。
役なしでリーチのみの手にする場合(YAKUTYPE_BASEの場合)
手牌=1m2m(9m9m) 向聴数=0 有効牌=3m 役の数=0←形式聴牌である
役を平和にする場合(YAKUTYPE_PINFUの場合)
手牌=1m5m(9m9m) 向聴数=1 有効牌=4m6m 役の数=-1←聴牌していない
役をタンヤオにする場合(YAKUTYPE_TANNYAOの場合)
手牌=2m5m9m9m 向聴数=2 有効牌=2m3m5m4m6m7m 役の数=-1←聴牌していない
タンヤオですと頭とみなされないので9mを含んで検索を行います。
有効牌に関しては「役を形作るのに必要な牌」と定義できるかもしれませんね。
あとは実装のみなのですが問題点も幾つかありまして。
・固定された牌の検索方法(一気通貫、三色同順、チャンタ、イーペーコーなど)
・ピンフの検索方法(両塔子をいかに残すか、どう検索するか)
・孤立牌の処理方法(孤立牌をどう生かすか)
上の3つが主な問題点です。
0739男チャ漬け ◆VmNuOcUpJs
NGNG302さんのAIが国士無双上がって、
253さんのダミーAIが箱下になっているにもかかわらず
試合が続行しています。東風ルールとは合わないのですが、
緊急を要するほどのバグではないです。
↓をご覧ください。すごくいい試合ですよ(^^)
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=44&fi=no
0740725
NGNG>>726
漠然としたアイデアしかないが、AIとまではいかず、一昔前のエキスパートシステムの発想が頭に浮んでる。
例えば私は、配牌を見た瞬間次のような順で考えている。
1.役牌のトイツ、タンヤオ、ピンフ、ホンイツなど狙い易い手は無いか。
2.その手を上がっても問題無いか。(主に点差の問題)
このうち、1.は主に過去の経験に基づいたパターンマッチングが大半。
パターンは確率計算に基づいてAIで計算してもいいけど、データベース化の方が良サゲ。
このデータベースを書くためにも、ルール化した表記が欲しい。
たとえば(今パッと思いつくだけ)こんな感じ。
特定の牌を示すのは、今の表記に従う。(m1とかs5とか)
$1〜:任意の字牌、#1〜:任意の数牌
[]:メンツ、<>:頭
で、ピンフを示すパターンは(例えば)こんな感じ。
<($1|#1)($1|#1)>[(#2)(#2+1)(#2+2)][(#3)(#3+1)(#3+2)][(#4)(#4+1)(#4+2)][(#5)(#5+1)(#5+2)]
これだけだと、役牌が頭でもマッチしちゃうんで、役牌とか否定とかの表記も勿論居るけど。
手牌が、これにどこまでマッチするか(あと何枚)、なにが入ればマッチするか(なにで上がれる)が返ってくれば、ロジックはだいぶ楽になりそう。
あとパターンの表記には、19牌とか、ドラとか、牌種とか色々いるし、カンの処理が難しいけどね…。
0741男チャ漬け ◆VmNuOcUpJs
NGNGなるほど。面白そうですけど、いろいろと難しいかもしれません。
うーん、ルールとかは色々新たに自作して使うことになるんでしょうね。
あと、頭はメンツの一部としてメンツすべてを<>にすれば[]の本来の意味が
取り戻せるのでもし実装するのであればその方向で逝きそうですね。
ちょっとピンフをパターン化させて見ます。
$1〜:任意の字牌、#1〜:任意の数牌
<>:メンツ +:前要素のインクリメント
\j:自風 \b:場風 \y:ヤオチュウ牌
ピンフ : <([^\j\b白発中])\1><(#1)(#1+)(#1++)><(#2)(#2+)(#2++)><(#3)(#3+)(#3++)><(^\y)\1+>
タンヤオとか、どうしよう(^^;;
0742男チャ漬け ◆VmNuOcUpJs
NGNGメンツ検索としていかに効率よく制御できるように決めるかに掛かってますね。
+も$も#も全く違うものだし。何かいい方法はないのだろうか?
0743男チャ漬け ◆VmNuOcUpJs
NGNG新バージョンに関してはもう少しお待ちください。
0744252
NGNG僕は忙しくはないのだが、いろいろ悩み中。
パターンマッチングはおもしろそうだけど、
見える役から切る牌を決めるのはどうかなあと。
というのも、いろいろHPをみたりしていると、
今のルールの場合、いかに先制リーチをかけるかが、勝敗を分けるらしいので。
一発、裏、ツモとかがなければ違うだろうけど。
今読んでる本・・・「確立統計であばくギャンブルのからくり」
役に立つのかどうかは不明・・・
0745252
NGNG大阪商業大学の論文らしい。何が書いてあるんだろ?
Webで読めるといいんだけど・・・
0747デフォルトの名無しさん
NGNG役判定を作ってておもいっきりわからなくなった、誰か助けてくれ。
上がった牌14枚を役判定に渡したらありえない重複の仕方をしてしまうわけだ
たとえばチャンタイーペー三暗刻とか。
とりあえず今できているのは、14枚を渡すとそれがその役になっていれば
OKが帰ってくる関数はできてる。 つまりそのありえるところとありえないところ
の境界線を作りたい。あとは、ありえる最高の組み合わせをだすアルゴリズムを誰か
考えてくれないか・・・
自分でもかいててよくわからないが 興味示したら誰か助けてくれ・・・
ヨロシク。
0748デフォルトの名無しさん
NGNG1m1m1m2m2m2m3m3m3m7p8p9p北北
こんな手だったら
1m1m1m 2m2m2m 3m3m3m 7p8p9p 北北
1m2m3m 1m2m3m 1m2m3m 7p8p9p 北北
こんな風に4面子1雀頭が取り得るすべての組み合わせを求めるアルゴリズムを考えればいいと思われ。
具体的には・・・よく分かんない(´・ω・`)
0749デフォルトの名無しさん
NGNG面子を基準にした役判定処理にする。以下の手順で役判定。
1、面子を使用しない役の判定をする
2、>>748の様に、取りえる総てのパターンの面子を作る
3、その面子パターンおきに役判定する
4、その中で一番高い役を役とする
で出来る。
ただし何時何をツモったか等々の状況が多いので、それも考慮して役判定する。
0750デフォルトの名無しさん
NGNG三暗刻形と一盃口形ってのはたいてい重なるわけだ。これは当たり前。で普通は
高い方の役形を採る。
重複する役形というのは決まっていて麻雀のルール本でも見れば書いてあるだろ。
決まった条件で起きることなんだからそれで条件分岐書けば良いだけだと思うが。
順子系か刻子系かで役の合算して高い方で見れば?
0751747
NGNG111222333 78999
こういうときはピンフジュンチャンイーペー + 三暗刻三連刻
チャンタのときは三暗刻だめなのかとおもいきや
111 999 111 789 99
このときは ジュンチャン 三暗刻 になる
つくった役判定関数はおのおのが別々で存在していて、判定にひっかかった瞬間に
フラグを立てていくようにしてあるんだ。
その状況でどっちの役を優先してあがれば点が高くなるかっていう
判定の関数を作れないだろうか・・・・
やはり>>749のいったように
何種類かある面子パターンを作ってそれごとに判定するべきだよねぇ
ありがとう。頑張ってみます。
また追ってカキコします。
0752デフォルトの名無しさん
NGNG普通、採用されてないぞw
0753747
NGNG0754749
NGNG>その状況でどっちの役を優先してあがれば点が高くなるかっていう
>判定の関数を作れないだろうか・・・・
役だけなら有るかもしれない、考えたこと無い
どうせ、符計算もする時、面子の取り方で符が変わるので、面子パターンは
作らないと、高い点を算出できない、結果的に面子パターンは必要。
0755デフォルトの名無しさん
NGNG厨厨厨五六七九九12334 ツモ2
は厨とツモで2翻 符はフーテイ20符+ツモ2符+厨暗刻8符 だと思われがちだけど
12334を13と234で見れば2のカンチャンなので+2符
よって700-1300になる
0756デフォルトの名無しさん
NGNGただしプログラムは素人なので
後三ヶ月まってくれ
いまから勉強する
0757756
NGNG東風R2100のプログラム暦なしの奴だったら
三ヵ月後どっちが強いプログラム作れるだろうか?
0758デフォルトの名無しさん
NGNG0759デフォルトの名無しさん
NGNG・プログラミングはベテランだが麻雀はルールを知ってる程度で打った事はない
どちらかのタイプが強いプログラムを作れそうな気がするから後者。
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG自分でプログラム組むなんて言ってませんが、何か?
痛いところ突いちゃったかなw
0762デフォルトの名無しさん
NGNG東風のRはあてにならんからなー
プログラミング暦もあてにならんけどな
0763デフォルトの名無しさん
NGNGタコ突っ張りなプログラムを作るヨカーン
0764デフォルトの名無しさん
NGNGイタイのがいるなw
学生とかなんだろうなぁ
0765デフォルトの名無しさん
NGNGプログラマー自身が麻雀を勉強するのかな?
それとも麻雀に詳しい人に協力を仰ぐ?
0766デフォルトの名無しさん
NGNG麻雀好きなプログラマが作るんでないかな。
そうでないと、ゲーム作成プランも上がらないと思う。
0767デフォルトの名無しさん
NGNG麻雀エンジンだけ外販している所(シャノアールだっけ?)もあったはず。
あと、市販のゲームは
プロ雀師監修とか、麻雀連盟公認とかいろいろあるよね?
どれくらい制作に関与しているんだろうか?
>>764
むしろヲヤジ?
0768西家
NGNG756じゃないけど、「最強」プログラムを3時間もかけて作成。
全ツッパリのタコプログラムだから、心してかかれ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_45/psyche_v001.zip
0769男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。早速試してみたところ、どうやら有効牌を結構逃しているみたいです。
どういう処理しているのかソースが無いので良く分かりませんが(^^;
次バージョン期待しています。
こちらの状況なのですが、今メンツ情報ライブラリの雛形を作成しているところです。
まだ、いろいろと問題があるので公開できませんが近日中に公開する予定です。
2月上旬辺りまでには何とか公開できる形にしないとなぁ・・・早く完成させねば。
0770デフォルトの名無しさん
NGNG仕事でやれっつーたら、調整含めても半年くらいで申し分のない奴ができると思っているが、
趣味の範囲で作ったプログラムは弱弱w
えーと、3000円で1000本売れると300万だな。
そーすっと、6で割って月50万か・・・。
じゃ、やーめた、ってなっちゃうんだよなーw
0771252
NGNG麻雀エンジンはメディアリュウムというところかな?
でも、まだできてないっぽいけど。
シャノアールは麻雀悟空とか作ってる会社。エンジンはないんじゃないかな。
HPをみると「イカサマなし」という単語が何度も出てくる。
シャノアール「麻雀における思考ルーチンについての考え方」
http://www.chatnoir.co.jp/engine/index.html
>「天竺」は、ファジー理論に基いた思考ルーチンです。
ファジー理論というのがよくわからんが・・・
>>768
何を持って最強と称するのか?
しかもたったの3時間とはスーパーハカーですか?
0772252
NGNGメンツ情報ライブラリというのは、>>738のやつ?ガンガレ。
ところで、「12599 あと3メンツ」となっている時に、
ペンチャンを落とした方がいいのかどうかということだが・・・
凸HPの掲示板で、
>テンパイした後というのは手変わり牌が2種類とかしかない場合が多く、そういう
>場合には手変わりを待たないほうが良いことがわかっています。
と書かれていた。これを読む前から考えてはいたのだが・・・
ツモる牌を、さいころを振ることに例えると、
�@3が出る確立・・・1/6。
�A4または6が出た後、
4が出たときは3か6、
6が出たときは4か7が出る確立・・・2/6×2/6 = 4/36 = 1/9
�Aの方が悪い。しかも、これは6面のさいころだからまだいいが、
麻雀だと4/100〜4/50(4枚の同一牌は別々に考える)くらいになってしまうので、
「4/100」と、8/100×8/100 = 64/10000 = 「0.64/100」の差になってしまう。(6.25倍)
しかも、リャンメンになればいいが、カンチャンになる場合もある。
最後の牌はロンできるので、リャンメンがさらに倍くらい得だとしてもなぁ・・・
間違ってたら指摘よろしく。
0773デフォルトの名無しさん
NGNGペンチャン落しをテンパイ時点で考えるのが遅く、3〜1シャンテンの間に考えるべきだと思われ。
0774デフォルトの名無しさん
NGNG東風荘につぎ込んだリソース代と時間x時給を計算してみることをオススメしまつ。
>>771
シャノアールは外販してますね。
明言している会社もあるし、それ以外にもいろいろなゲームで採用されてます。
クセのある打ち方(w)をするので、すぐ解る。
0775デフォルトの名無しさん
NGNGぶはっははは。
趣味ってのはそーいうもんなの。
仕事とは違うのさ。
0776デフォルトの名無しさん
NGNG「趣味の麻雀は強いのに、趣味のプログラムは趣味だからって弱いんですか?(w」
って事だと思うんだけれどな。774の冗談の意図は。
770の発言の後半は金勘定してるだろ? まああれ自体は何とでも解釈が出来るけど、
それを「こんなもんにそんな時間かける気も湧かんしなぁ」の意と見て774の返しが通じるのに、
そこで「趣味と仕事は違いますよ」と言われても会話がつながらないよん。
つながらないよん。
つながらんよ〜ん。
さて、「ぶはっははは」が何を意味していたのか解明キボンヌ。
0777252
NGNGテンパイ時だったらという話なので。
ところで、1シャンテンのときは、いつでもペンチャン落としがいいだろうか。
たとえば、12 5 99 3 67あと2メンツという場合、
リャンメンになる手変わり牌が4種類16牌ある。
この場合も、
「4/100」と、16/100×16/100 = 256/10000 = 「2.56/100」の差になる。(1.56倍)
しかし、これならまあなんとかいいかもしれない。
12 5 99 2 67あと2メンツという場合・・・は孤立の2を切ればいいか・・・
>>774
へ〜〜、しらんかった。
0778252
NGNG4X XX X X X X XXX X X X X XXX X X X
3X O X X X X X X XXX X X X
2X O X X O X X X X XXX X X X
1X O OO X OO O X O X XOX X XXX X X X
01234567890123456789012345678901234567890123456
・「O」を全部消すのが目的。
・OはまずランダムにXのない位置へ14個置かれる。
・Oは消すとXになり、上から下へ積みあがる。
・消したOの上にOがあると、Oは「ぷよぷよ」みたいに下へ落ちる。
・Oを消すには、縦か横に3つそろえる。または、1度だけ縦に2つでもいい。しかも、この操作はいつでもできる。
・上記以外で、Oを1つだけ選んでXにすることができるが、この場合は空いた位置のどこかにOが追加される。
多少は単純化されて、考えやすくないだろうか・・・
ぜんぜん変わらんと理由付きで言われたら、考えるのをやめるw
0779デフォルトの名無しさん
NGNGそれ、パチンコ麻雀そのままのような気もする。
考え方は面白いと思うが3枚又は2枚で消えた場合、その消えた物に関連があったときの応用が
効かないと思う。(麻雀として考えた場合)
0780252
NGNG雀球を見て思いついたのは見破られたか・・・
3枚又は2枚で消すのは、「いつでもできる」ので、最後までやらないことも可能。
だから常に最後までやらない方がいいが、これをつかって(将来的に)鳴きの処理ができる。
目的のところで、「速く」というのが抜けてた。
あと、Xが上から伸びるとか、Oが下から伸びるというのはなくてもよさげ。
縦の列は自由に交換可能とすればいいかな。
0781デフォルトの名無しさん
NGNG限定して考えるのも良いけど、テンパイ時になってくるとペンチャンの牌確率より、
場の状況の方が関連が多いと思われ。
>ところで、1シャンテンのときは、いつでもペンチャン落としがいいだろうか。
777で書いてあるように、場合によりけりでは。
で、その場合は1シャンテンより前のシャンテンで落とせればより優位になると思われ。
0782デフォルトの名無しさん
NGNG>3枚又は2枚で消すのは、「いつでもできる」ので、最後までやらないことも可能。
>だから常に最後までやらない方がいいが、これをつかって(将来的に)鳴きの処理ができる。
了解、Xの発想が面白いと思う。色々妄想して楽しめた^^
0783デフォルトの名無しさん
NGNGスレ違い
迷惑
0784デフォルトの名無しさん
NGNG勘違いしてんるんじゃないか
0785デフォルトの名無しさん
NGNG「損得勘定するのは結構だが、既に東風荘に費やした無駄な時間(=費用)の事を忘れてんじゃないの」
って言うから、
「麻雀にはずいぶん時間使ってるし、そりゃまあ無駄なんだけどさ(笑)、
そいういう損得勘定はあくまでもビジネスでの話で、趣味ってのは無駄でも成立するからね」
と答えたんだが。
0786デフォルトの名無しさん
NGNGじゃ、やーめた、ってw(プゲラッチョ
0787デフォルトの名無しさん
NGNG0788男チャ漬け ◆VmNuOcUpJs
NGNG↓リーチかけてないのに裏ドラ載っちゃってるバグ発見しました。
===== 東風戦:ランキング卓 300卓 開始 2003/01/01 00:00 =====
持点27000 [1]MJSimAI R1500 [2]253Dummy R1500 [3]302v012 R1500 [4]253v003 R1500
東1局 0本場(リーチ0) MJSimAI 13600 253Dummy -1000 302v012 -1000 253v003 -11600
30符 四飜ロン 役牌1 ドラ3
[1東]2m6m6m6m7m8m5p6p5s東発中中
[2南]2m4m5m1p3p5p8p9p1s3s9s9s発
[3西]8m3p4p1s3s5s6s7s7s8s南発発
[4北]8m9m1p2p8p8p2s4s4s南西北白
[表ドラ]2p [裏ドラ]6m
* 1G白 1d発 2G8m 2d発 3G2m 3d南 4G中 4d西 1G5s 1d白 2G東 2D東 3G9m 3d2m 4G北
* 4d南 1G2p 1d東 2G7m 2d2m 3G1p 3D1p 4G東 4d中 1N 1d2m 2G2s 2d9p 3G5p 3d1s
* 4G3m 4d東 1G6s 1d5s 2G4p 2d1p 3G9s 3R 3d3s 4G白 4d3m 1G3m 1D3m 2G6s 2d8p
* 3G4s 3D4s 4G1m 4D1m 1G4p 1d2p 2G中 2D中 3G4m 3D4m 4G4p 4d1p 1G8s 1D8s 2G3m
* 2R 2d6s 3G4m 3D4m 4G7s 4D7s 1A
0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNG何か私生活でで困った事でもあったのか。
0791デフォルトの名無しさん
NGNG1,マナー違反(コンピュータには、無理ポ)
2,限度を超えた長考。
3,自分の手しか見ない捨て牌を全く考えない“引き込もり麻雀”
4,点数差や、巡数、など状況を全く考えない“場違い麻雀”
人間だと良く見かける(w
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG>人間だと良く見かける(w
つまり、そういうことを行わない AI は人間らしくないので
AI の名に値しないと言うことか。
0794252
NGNG縦方向の意味がないので、結局は
・Oの数のヒストグラム(0,0,0,1,0,1,3・・・)←>>778のやつのヒストグラム
・空白の数のヒストグラム(0,4,3,2,4,1・・・)
になるだけだけど。
で、これを使った解法は思いつかないわけだが・・・
>>788
うわ。加カン、テンパイ判定とあわせて修正します。
0795252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_46/MJSim_000509.lzh
・加カンしたときログがおかしくなるのを修正。
・テンパイ判定が間違っているのを修正。
・リーチしていなくても裏ドラが乗ってしまうのを修正。
男チャ漬けさん、バグ報告さんくすこ。
しかし、基本的なバグだなぁ・・・
0796男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。
さあ、こちらも早くバージョンを上げないと。
次は283_v008で、シャンテン数と有効牌しか見ないAIを作ります。
強く仕上がるといいなあ・・・
0797デフォルトの名無しさん
NGNGチイトイのリーチが流れた時チョンボになってしまいます。
0798252
NGNGうひぇ〜。
ループ回数間違い。
チートイツで中があるときに起こる。
MJSim 0.5.10
MJSim 0.5.9からの差分のみ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_48/MJSim_000510_sabun.lzh
0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG今まで出てきたのは5種類5人。
0801デフォルトの名無しさん
NGNG現状では早く聴牌して早くリーチした人が勝っている状況ですが、降りに対する処理をするAIが出てきたらどうなるのか楽しみです。
聴牌すらできねぇ。。。
0802男チャ漬け ◆VmNuOcUpJs
NGNG今まで名乗り出て実際に作ったのは多分
252氏、253氏、302氏、七対子氏、西家氏と、あとは私ですか。
今作ってる人っていう意味では過去ログ見る限り252氏と私かも。
私のほうはアルゴリズム作るのに思いの外てこずってます。
>>801
今作っているのですか?確かに聴牌にするのも結構難しいと思いますが、
過去のソースを参考にして作ってみるといいと思います。
0803デフォルトの名無しさん
NGNGついさっき聴牌できるようになりました。過去のソースをパクリまくってますw
ツモ上がりは出来るようになったのでロンあがり出来るようにしているところです。
最強には程遠い_/ ̄|○
0804男チャ漬け ◆VmNuOcUpJs
NGNGそれはおめでとうございます。
もし出来上がりましたら是非オリの作成をしてみましょう。
253氏に勝るとも劣らないAIが出来るといいですね。
0805デフォルトの名無しさん
NGNGありがとうございます。ぅぅぅ、永かった・・・・
オリジナルの作成はほぼ無理かと思われます。目指しては見ますが。
今現在の253さんAIに追いつくにはあと1年くらいかかりそうですw
253さん、男チャ漬けさん、西家さん、自分でやっていますが、トップ率2%くらいです。
10%くらいを目指してがんがるぜええええええええええええええええええええええええええええええええええええ
0806デフォルトの名無しさん
NGNGPlayer[暗カンした人].Tehai[暗カンした牌] は0になるんでしょうか?
例えば1万を暗カンした場合に、Tehai[1]は0になるのかどうか?という質問なんですが。
0807デフォルトの名無しさん
NGNG「ふっ 背中が煤けてるぜ」
0808デフォルトの名無しさん
NGNGカン、ポン、チーしたら、Tehaiの中身は消えるよ。
0809デフォルトの名無しさん
NGNGわかりました。ありがとうございます。
こうなってくれてたら便利なのに、っていう仕様になってるもんですねw
0810252
NGNGいや〜、不親切なところも多かったりして。
鳴いたらTehaiからその牌が消されるというのは普通だと思っていたが、
意外と分かりにくいのかな。この種の質問は前にもあった気がするし。
説明書に追加しとくか・・・
0811デフォルトの名無しさん
NGNG0812男チャ漬け ◆VmNuOcUpJs
NGNGそれに、なかなか上手く出来上がらないんだよなー
無限ループの嵐で。構成練り直そうかなーと考え中です。
0813デフォルトの名無しさん
NGNG役判定の一番効率の良いルーチンもかなりほしい気がする。
0814252
NGNG自分も考え中。
結局、完全に読みきるのは無理なので、
何らかの方法で、何を切ればいいか評価しなければいけない。
今考えてるのは、
�@最大14種類ある、切った後の形を作る。
�A1つ1つについて、そこから予測できる上がりの形をいくつか作る。
�Bそのときの「点数×その形になる確率」を足していく。
�C最も高得点になる捨て牌を捨てる。
�Aをどうやってやるか、どこまで調べるのか。
モンテカルロ法では、
乱数でツモる牌を決めておく。(切った後の形すべてで、ここで決めたツモを使う)
�A1つ1つについて、上記のツモをくっつけてみる。
�B上がっていたら点数を足す。
とやっていた。
あと、�Aでホンイツとチートイツを、それ以外の上がりとは別に調べるつもり。
あれ・・・これパターンマッチングか・・・?
>>813
↓みたいな上がりチェック関数を使ってメンツを切り分けて、
あとは、役ごとにその役があるかどうか調べるという方法以外があるだろうか?
http://www.interq.or.jp/snake/totugeki/mjcom_p0.htm
そういえば、過去レスで役判定作っているといってた人どうなっただろう・・・
0815男チャ漬け ◆VmNuOcUpJs
NGNG>↓みたいな上がりチェック関数を使ってメンツを切り分けて、
>あとは、役ごとにその役があるかどうか調べるという方法以外があるだろうか?
>http://www.interq.or.jp/snake/totugeki/mjcom_p0.htm
私の場合は各役ごとに有効牌種と有効面子を設けて検索しています。
例えば、ピンフでしたら
・有効牌種=数牌+オタカゼ
・有効面子=ジュンツ3つ+トイツ1つ+両ターツ1つそれ以外は無効、鳴きも含む
トイトイでしたら
・有効牌種=制限なし
・有効面子=コーツ、トイツ、ポン、カン以外全て無効
三色でしたら
・有効牌種=(9 * i + j),(9 * i + j + 1),(9 * i + j + 2){i=0~2,j=1~7}
・有効面子=トイツ1つ、チーを含み有効牌種がいくつあるか、ターツ1つ,
ポン1回まで、カン1回までそれ以外は無効
と定義して以上の条件をどれだけ満たしているか検索かけていく方式を採用しています。
でも、切り取るパターンが幾つかある上、この方法だとイッツー、三色、ペコとかだと
検索の効率が悪くてどうも・・・困ったなあ(^^;
0816デフォルトの名無しさん
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_49/816v001.lzh
0817男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。
試して見たのですが、時々「終了します」とエラーがでて
終了されてしまうようです。どんな内容なのかはソース
がないので良く分かりませんが次回作期待しています。
0818816
NGNG対策予定。
0819816
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=50&fi=no
・約1000回落ちなかった、直ってると思います。
・ノーテンリーチしていたのを修正。
・その他幾つかのバグ修正。
0820デフォルトの名無しさん
NGNGttp://page.freett.com/intteliart/index.htm
0821男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。確認しました。
こちらのAIなんですが雛形なんとか完成したのですが
リリースするとバグってしまって困ってます。
エラーが直るまでソース、dllは公開出来ませんが代わりに牌譜用意してみました。
↓でDL出来ます。「MJSimAI」ってのが私のAIです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_51/MJSimScore.zip
なぜか前バージョンより弱くなってしまいました。何故??(^^;;
でも、よく見ると確かに無駄切りがよく目立ちます。余ってたら普通に真ん中切ってるし(^^;
ただ、これでシャンテン数と有効牌で判断するだけでは弱いことが立証されました。
後は工夫のみです。精進します。
0823デフォルトの名無しさん
NGNG0824252
NGNG302v012、253v0003、253dummyのメンツで300試合打たせてみた。
結構勝ってる。
他のメンツも即リーゼンツだけど、なにがちがうんだろ。
特徴とかアルゴリズムとかの解説とかあるといいな。
>>821
まあ、普通にシャンテン数を落としてる感じですな。
0825252
NGNGAIの強さをRateであらわせるといいんだけどなあ。
東風荘のRateは、いちおうあれで実力がなんとなく分かるし。
どれかひとつ基準になるAIが、東風荘でRいくつって分かるといいけど・・・
いちいち総当りとかはせずにすむ、なにかうまい実力評価方法がほしいところ。
例えば、253Dummy.dll×3と自作AIで1000試合して、最終的なRateの値とか
(いまのところMJSimではRate変わらないけど、できすぎくんの安定Rとか)。
あと、AI発表のときに、こんなんあったらいいなと思ったもの
(あくまで希望なんで、なくても一向に構いませんが)。
・特徴とかアルゴリズムとかの解説。
・20試合程度のログ(ダウンして動かすまでやらない人も見るかも)。
・なんらかの強さの指標(上で書いたみたいなもの。これは考え中・・・)
プログラミングはしない観戦者用に、対戦するAIをGUIで選択するツールでも作ろうかと思ったが、
ログがあったほうが手っ取り早いな・・・と>>821をみて思った。
0826816
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=52&fi=no
・特徴とかアルゴリズムとかの解説。
捨て牌決定は場の状況による、行動決定と手牌分析+1ツモ先の先読み。
場の状況は、局・ツモ順目・順位・点差・他家のリーチ・手牌の内容・等を少しだけ。
人間が思うような状況判断は全然出来ていません。
・20試合程度のログ(ダウンして動かすまでやらない人も見るかも)。
一応UPしてみたけど、適当に切り取ったので特長が出てるか不明。
実際特徴が出てるのを探そうと思ったが、多すぎるログから取り出すのは困難。
・なんらかの強さの指標(上で書いたみたいなもの。これは考え中・・・)
欲しいです
302v012+253dummy*2との1761試合のできすぎくんの情報から特徴が見て取れるもの。
・降りが有るので、放縦率が少し低い。
・点よりトップを目指しているので、局辺りの全収支がマイナス。
詳しく見方を知らないので、他に有ったら教えてください。
0827男チャ漬け ◆VmNuOcUpJs
NGNGあの〜すみません。
↓「283v007」にあるCalcRateじゃあ駄目なんでしょうか(^^;
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_43/283_MJSimAI.lzh
確かに「出来すぎ君」の第2安定レートと全く同じ結果になりますけど
おっしゃるような実装は一応ほどこしているつもりなのですが(^^;;
因みに、CalcRateで、>>825と同じような処理を施して実力を調べたところ
253v003=1536,816v001=1596,302v012=1601,283v010=1156
てな結果が返ってきます。MJSimにもきっと応用可能でないかと
思いますが、どうでしょう?ソースはVBSですが。(^^;
>>826
私の場合、勉強のためにこちらの企画に参加しているので。
何かと勉強に出来るものがあれば有難いのですが。
0828デフォルトの名無しさん
NGNGいま計画していることを素直に作っていけばいいと思います。
それに、デバックの仕方を身近な経験豊富な人に聞くといいですよ。
単一プログラムのよく暴走するバグは、簡単に対処できるバグですから
デバックの仕方を身近な人に聞けばそれだけで、レベルUP確実です。
0830デフォルトの名無しさん
NGNG0831252
NGNGさんくす。
しかも、できすぎ君の画面もつけるのはたいへん便利。
1ツモ先の先読みというのは、具体的にはどういうものでしょう?
捨て牌を捨てた後の手牌に、全種類の牌を1つずつツモってみて、
「良い」と評価できるのが多かったやつを捨て牌にする・・・とかかなあ。
>実際特徴が出てるのを探そうと思ったが、多すぎるログから取り出すのは困難。
これはたしかに。
20試合と書いたのは根拠なし。もう少し多いほうがいいのかどうか・・・
>・点よりトップを目指しているので、局辺りの全収支がマイナス。
勝っている場合、プラスになりそうだけど、なぜ?
4位だけ異常に少ないなあ。これが平均順位に効いている感じ。
ここをこうしたらとかは、今は思いつかないや。
しかし・・・和了素点より和了時収入が少ないってどういうことだろ。MJSimバグってるのかなあ・・・
0832252
NGNGスマン。正直、最初にCalcRateを見た頃は、Rについてはあんまし考えてなかった・・・
ソースを見たけど、安定Rをだしてるのかあ。
>因みに、CalcRateで、>>825と同じような処理を施して実力を調べたところ
これは、253Dummy×3ってことかな?
いまのところ、こうしないといけないと思う。
MJSimがRを変化させないので、
強いAIをメンツに入れてしまうと、そのときだけ安定Rが下がってしまう。
Rが変化するようになれば、253Dummyが1つでもいれば、
それとのR差を指標とすればいいかな?根拠なし(;´Д`)オシエテ
0833252
NGNG>253v003=1536,816v001=1596,302v012=1601,283v010=1156
これが今のところ強さの指標と考えていいかな。
100程度差がついていると、強さに差があるといえるのかな?
816v001と302v012がいまのところもっとも強い、と。
時間があるときに他のAIもやってみるわ。
ところで、253Dummyを1500と考えて計算しているけど、
東風荘では、いくつくらいになるんだろうか。1000くらいかなあ・・・←適当
そう考えると、東風荘代打ちツール「ドラえもんβ」の1400±100はめちゃくちゃ強いな・・・
http://doranizm.hp.infoseek.co.jp/
ちなみに将棋でのレーティングは↓こんな感じ。アマチュアのみ。100毎に級または段が上がる。
http://internet4.shogidojo.com/amaren/a_rating.html
プロはレーティング制じゃないけど、だいたい最低R2500以上で、名人となると3000くらいらしい。
将棋AIで最強に近い「YSS」のレーティングは、2077(アマ3段)だって。
http://www32.ocn.ne.jp/~yss/24rating.html
麻雀のプロってどのくらいだろ。
0834816
NGNG>「良い」と評価できるのが多かったやつを捨て牌にする・・・とかかなあ。
これとほぼ同じ。
>勝っている場合、プラスになりそうだけど、なぜ?
3,4着だと、積極的に上がりに向かうので、だめだった時、点数はもっと低くなり。
1,2着だと、防御的になるので、あまり点が伸びません。
それにリーチして上がれずが多いので、他支出が多くなってマイナスに。
どれかAIが東風にデビューして、安定Rが出れば、それを基準に強さの比較ができるといい。
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNGそれに動機が次の2つしかない。
1.プログラミングの勉強のため、実力を試したいためのAI自作する人。
これは、とても少ない、ほぼ無視してもいい人数。
2...実力でAI以上のRが取れない人で、卑怯にも他人のAIでRを取ろうとする卑屈な人。
最初は良くても直ぐ飽きるか、自分の無能を自覚して止める。
なので、そんなに使われない。
0837デフォルトの名無しさん
NGNGのコードを参考にさせてもらってるのですが
for(i=0;i<44;i++)
if(2<=tehai[i]) //頭を抜き取る
のi<44ってのは43の間違いですか?それとも何か意図が?
一応どちらでも動作はしたのですが…
それとif(tehai[i+1]&&tehai[i+2]) //シュンツとして抜き取れる場合
なのですがこれだと字牌を東南西などで持ってたら順子として数えちゃいませんか?
i<30などとした方がいいでしょうか?
0838デフォルトの名無しさん
NGNG>for(i=0;i<44;i++)
>if(2<=tehai[i]) //頭を抜き取る
>のi<44ってのは43の間違いですか?それとも何か意図が?
たぶん配列が終了の0を含み「44」あるのかもしれません。
>それとif(tehai[i+1]&&tehai[i+2]) //シュンツとして抜き取れる場合
>なのですがこれだと字牌を東南西などで持ってたら順子として数えちゃいませんか?
東南西は30,32,34と1つずつ離れてるのでシュンツにはならないです。
0839デフォルトの名無しさん
NGNGあ、離れてるんですか。
よく見ずにすいませんでした(;´Д`)
俺のコードの手牌番号が30,31,32...となってました。
ちなみに上の44は43でもいいですかね。
手牌配列は自分は43個の宣言なのですが。
0840デフォルトの名無しさん
NGNG頭の検査は43でもいいと思います。
>手牌配列は自分は43個の宣言なのですが。
中が[42]個目なら[43]に0を入れておかないと、配列先のデーターに0以外が有ったら
シュンツになってしまうので、配列は44で0エンドがいいですよ。
30までしかシュンツを探さなければいいのですが、
安全のためにも最後に0を入れるのをお勧めします。
0841男チャ漬け ◆VmNuOcUpJs
NGNG>>因みに、CalcRateで、>>825と同じような処理を施して実力を調べたところ
>これは、253Dummy×3ってことかな?
はい。その通りです。 因みにソースはとつげき東北氏のページの
公式集を参考に作りました。よって「出来すぎ君」の第2安定レート
と全く同じ結果になります。多分(^^;
>>253v003=1536,816v001=1596,302v012=1601,283v010=1156
>これが今のところ強さの指標と考えていいかな。
>100程度差がついていると、強さに差があるといえるのかな?
そうですね。ただ、1000試合で検索したとしてもやはりレートにばらつきが
生じるようです。↑のは何回かやった結果の平均を四捨五入したものですが
それでも結果が間違ってる可能性は大です。
0842デフォルトの名無しさん
NGNG人工知能の現状を知るべし
http://page.freett.com/intteliart/index.htm
0843デフォルトの名無しさん
NGNGなんか宣伝ぽく見えるけど。そうじゃないならスマソ
で、本を買った目的教えて?何のAI作ってるのor作るの?
0844デフォルトの名無しさん
NGNG俺、過去スレの過去スレに
そのアルゴリズム出した覚えがあるんだけど、
もうそのスレは消えてしまっているね・・・
ttp://piza.2ch.net/tech/kako/980/980791374.html
0845252
NGNG>>「良い」と評価できるのが多かったやつを捨て牌にする・・・とかかなあ。
>これとほぼ同じ。
まあ、何がどれだけ良いのかってのが問題だけど。
メンツが増えたら10点とか・・・
今後、まだまだ強くなっていくんでしょうか?
>>841
>よって「出来すぎ君」の第2安定レートと全く同じ結果になります。多分(^^;
なぜ第2なんでしょ?
>そうですね。ただ、1000試合で検索したとしてもやはりレートにばらつきが
>生じるようです。↑のは何回かやった結果の平均を四捨五入したものですが
>それでも結果が間違ってる可能性は大です。
どの程度ばらつくんでしょう?
まあ、強さの差が、ある程度分かれば充分かと。
>>842
学習機能はおもしろそうだけど、使えるかなあ・・・
0846816
NGNG>今後、まだまだ強くなっていくんでしょうか?
その予定。
やれる事はたくさん有るが、一つ一つに時間がかかりそう。
>学習機能はおもしろそうだけど、使えるかなあ・・・
学習機能は内容を限定すれば使えると思います。
が、まったく万能ではなく、AI同士対戦学習では
3すくみ問題が有って適用範囲を絞るのが難しい。
0847デフォルトの名無しさん
NGNG同サイトで紹介されている聴牌チェック関数の作り方がイマイチわかりません。
一枚足してagari_check()を呼べばいいわけですが、
そこから待ち牌を得る綺麗な方法(国士無双を除いた最高の待ち数である9個の配列を作って
順番に入れるくらいしかおもいつきませんでした)と、
待ちの形の求め形がわかりません。
どなたかアドバイスをいただけないでしょうか?
0848デフォルトの名無しさん
NGNGその文章ではいったいどれが分からないのか分からないが、とりあえず回答してみる。
>そこから待ち牌を得る綺麗な方法
int i, mati[43] = { 0 };
for(i=0;i<43;i++){tehai[i]++;if(agari_check()) mati[i]=1;tehai[i]--;}
とやって、mati[i] == 1 であれば、それは待ち牌
>待ちの形の求め形がわかりません。
mentu_cut() の
if(tehai[i]==3) //コーツとして抜き取れる場合
と
if(tehai[i+1]&&tehai[i+2]) //シュンツとして抜き取れる場合
および、agari_check() の
if(2<=tehai[i]) //頭を抜き取る
の条件が成立したとき、各面子と雀頭を記録。
for(;!tehai[i];i++)if(i>=43){return;} //上がっている場合ここが実行される
にきた後、記録しておいた各面子と雀頭をみて、
上がり牌が
・コーツの面子の中にあれば -> シャンポン待ち
・シュンツの真ん中にあれば -> カンチャン待ち
・シュンツの端で逆側の牌が1か9の場合 -> ペンチャン待ち
・シュンツの端で逆側の牌が1か9でない場合 -> リャンメン待ち
・雀頭の場合 -> タンキ待ち
0849デフォルトの名無しさん
NGNG某ゲーム会社のオンラインゲームのNPCを作ってます。
あまり詳しい事は言えませんが。
その仕事が終わり次第、麻雀もやってみようかと。
本当はいろいろレスしたいのですが、事情がありまして。
という事で、ROMメインですがよろしく。
0851252
NGNGRは次のような条件で出した。
・それぞれのAIと、253Dummy×3のメンツでの1000試合対戦。
・253DummyはR1500固定。
・できすぎくん安定R(第1東風荘)の数値(ルールが第1なので)。
・環境は、MJSim 0.5.10。
言い換えれば、253Dummyにどの程度差をつけて勝てるか、という感じ。
あくまで参考値とお考えください(もっといい方法があれば提案プリーズ)。
しかしながら、大きく数値が離れている場合は、強さに差があると考えられる。
ここでのR1500は東風荘のものと同じレベルではない。東風荘では1000くらい?
「特徴」は、いい加減なものですので、作者さんが気分を害したら申し訳ない
(間違いがあればご指摘ください。また、今後紹介してほしくない場合は言ってください)。
紹介順は、だいたい出てきた順番で。
0852252
NGNG・特徴:即リー全ツッパ。たまに鳴く。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_43/283_MJSimAI.lzh
----------------------------------------------------------------------
・AI名:253v0003 ・作者:253さん ・R:1528 ・提供方法:バイナリ
・特徴:即リー全ツッパ?たまに鳴いて上がったりする。先読みしているらしい。詳細不明。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_37/253v0003.lzh
----------------------------------------------------------------------
・AI名:253Dummy ・作者:253さん ・R:1500 ・提供方法:バイナリ
・特徴:即リー全ツッパ。シャンテン数を落とすように切る。このAIをRの基準にしています。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_39/253Dummy.lzh
----------------------------------------------------------------------
・AI名:302v012 ・作者:302さん ・R:1599 ・提供方法:バイナリ
・特徴:即リー全ツッパ?詳細不明。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_30/302v012.lzh
0853252
NGNG・AI名:chitoi ・作者:七対子さん ・R:763 ・提供方法:ソースコード
・特徴:ひたすら七対子のみを狙う。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=18
----------------------------------------------------------------------
・AI名:Ryoko ・作者:252 ・R:500 ・提供方法:ソースコード
・特徴:モンテカルロ法で打牌選択する。かなり動作が重い。ちゃんと上がりに向かえておらず激弱。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_41/Ryoko_0000.lzh
----------------------------------------------------------------------
・AI名:psyche_v001 ・作者:西家さん ・R:902 ・提供方法:バイナリ
・特徴:頭とメンツがそろったらリーチするだけらしい。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=50&fi=no
----------------------------------------------------------------------
・AI名:816v002 ・作者:816さん ・R:1570 ・提供方法:バイナリ
・特徴:1ツモ先読み。状況を見て打つ。牌譜等が>>826にあります。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1071668170&res=50&fi=no
0854252
NGNGpsyche_v001のダウンロードURLが間違っていた。
・ダウンロード:http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_45/psyche_v001.zip
0855デフォルトの名無しさん
NGNG俺もそんな感じに作ってみたいものだ。
そんな俺は今日も雀荘…(;´Д`)ハァ勉強シヨウゼ
0856デフォルトの名無しさん
NGNGttp://members.at.infoseek.co.jp/chippan21/ita04.htm
ttp://homepage1.nifty.com/~mumrik/itatyo.exe
0857男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。やっぱり皆強いですね。
私のやつもいい加減強くなって欲しいものだ・・・
>>855
正直そうでもないと思います。
私も雀荘は時々通いますよ。
0858252
NGNGhttp://www5e.biglobe.ne.jp/~tatano/program/mahjong/index.html
0860デフォルトの名無しさん
NGNGちなみにフリテンもなかったよ。
遊びでチョンボの画面みようとしたら普通にあがっちゃってんの
0861男チャ漬け ◆VmNuOcUpJs
NGNG0862男チャ漬け ◆VmNuOcUpJs
NGNGAIの方も忙しくて作れないよヽ(`Д´)ノウワァァァン!
0863252
NGNG保守乙。
まあ、またーりいきましょう。3年計画くらいでいいんじゃない?
ニューラルネットの本を読んでみた。まだ、よくわかってないのだが・・・
これ、結局何ができるかというと、「組み合わせ問題が高速に解ける」みたい。
たとえば、「Nクイーン問題」は、クイーンの置き方に膨大な組み合わせがあるが、こういうのに使える。
http://web.sfc.keio.ac.jp/~t01613mt/java/Nqueen/Nqueense.html
http://www.neuro.sfc.keio.ac.jp/demos/gallery/ ←のnqueen.cがCで書いたソース
上のリンクには、Σの入った長い式があるが、「動作式」というもので、
どうやって解いているかの説明になっている。
別にこれ無しで、いきなりプログラミングしても良いが、説明するときに便利。
プログラムで書くと、nqueen.cで70行(画面表示部抜きで)くらいになる。
Σはプログラムではfor文になる。
で、麻雀に使えるかどうかだが・・・ワカラン。
とりあえず、上がりチェック(4メンツ1雀頭あるかどうか)はできそう。
まあ、上がりチェックは、しらみつぶしでやっても何とかなっているわけで、どうでもいい。
上がっていないときに、将来上がりやすそうなターツの組み合わせは多いから、
その中で最善の組み合わせを出すのに、これを応用してやれないかなあと考え中・・・・
ニューラルネットで、「タイル問題(ポリオミノ)」を解く方法があって、これが麻雀に似ていると思う。
0864252
NGNGそんな状態。誰かフォローしてくれないかなあ・・・
0865252
NGNG>上がっていないときに、将来上がりやすそうなターツの組み合わせは多いから、
>その中で最善の組み合わせを出すのに、これを応用してやれないかなあと考え中・・・・
上がっていないときに、すべてのメンツ、ターツ、孤立牌に分ける組み合わせは多いから、
この中から最も上がりに近い組み合わせを探して(残り牌やドラとかも考慮して)、
要らない牌を切れるようにするのに、これを応用してやれないかなあと考え中・・・・
上がっていないときには4メンツ1雀頭にはならないわけで、解答は無いが、
ニューラルネットでは、だんだん解へ近づいていくように動くので、できるんじゃないかなあと。
0866男チャ漬け ◆VmNuOcUpJs
NGNGお疲れ様です。
8クイーン問題って案外簡単に解けるものですね。
しかも高速化とは恐れ入りました。
ニューラルネットの概要はソースを読んでなるほどなあと思いました。
こちらのAIなんですがメンツ検索まだ時間が掛かりそうなので先に
オリの方をつくろうかなと考え中です。次のバージョンはリーチが掛かったら
即オリ、もしくは状況を見て降りるAIの作成に入りたいと思います。
暇があれば(^^;
0867252
NGNG>ニューラルネットの概要はソースを読んでなるほどなあと思いました。
ソースだけで分かる?
説明を何度も読んでようやく理解できたのだが・・・
>オリの方をつくろうかなと考え中です。次のバージョンはリーチが掛かったら
>即オリ、もしくは状況を見て降りるAIの作成に入りたいと思います。
凸HPのベタオリかな?
今のところ、ほとんど誰もおりない状況だが、おりると強くなるのかなあ。
またどの程度強くなるのだろうか。
4着になる可能性は低くなり、平均順位は上がるかな。
0868816
NGNG>またどの程度強くなるのだろうか。
>4着になる可能性は低くなり、平均順位は上がるかな。
もし暇がありましたら、下の816Dummyを使用してスコアーを出してみてはいかがでしょうか?
降りの機能がありますよ、253Dummyとほぼ同じスピードで機能します。
前回UPしたのから先読みだけを切っています。多分驚かれると思います。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_53/816Dummy.lzh
0869男チャ漬け ◆VmNuOcUpJs
NGNG>>ニューラルネットの概要はソースを読んでなるほどなあと思いました。
>ソースだけで分かる?
>説明を何度も読んでようやく理解できたのだが・・・
式をどうやってプログラムに応用しているかはよくわかりました。
Σの部分を上手くfor,while文で繋げてるなあって。
すみません。完全に理解したわけではありません。
>>868
お疲れ様です。しかしよくできてますね〜。勉強になります。
0870男チャ漬け ◆VmNuOcUpJs
NGNG0871デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNGソース公開しないと面白くないし、話題発展していかない・・・
0874デフォルトの名無しさん
NGNGそれを言うためには、貴方がAIを作成し公開すべき。
作ってもいない人が、公開公開と騒いでも発展しない。
0875デフォルトの名無しさん
NGNG>>873ではないが、先人がソースを出してこそ後が続くってものだと思うが。
「お前が先に・・・」なんて子供の喧嘩じゃあるまいし。今作って持ってる人から
出していくしかないじゃない?
0876デフォルトの名無しさん
NGNG0877デフォルトの名無しさん
NGNG実際に動作してるのを見ると、まだブツを作ってないこちとらもやる気になる。
0878252
NGNGいくつかやってみたけど、結論から言うと、ばらつきすぎてよくワカラン・・・
1000試合程度では、予想通りにはならないみたい。
もうちょっとはっきりと効果が現れるのかと思ったが・・・
>816Dummyと253Dummy×3
>816Dummy R1639 和了率22.55 放縦率10.48
816Dummy強いなと思って、前回保存しておいた816v002のを見てみる。
>816v002と253Dummy×3(前回)
>816v002 R1570 和了率21.39 放縦率11.13
Dummyの方が和了率が高いのはおかしいなあと思って、再度816v002をやり直してみる。
>816v002と253Dummy×3(今回)
>816v002 R1647 和了率22.87 放縦率12.34
なぜかRがかなり上がった。和了率が1.5%もあがってる(放縦率も1%上がってるけど)。
816v002と816Dummyでは、816v002が和了率1%高く、放縦率も1%高いようだ。
結局強さは同じくらいということかな?
わからんので、直接対決させてみた。
>816v002と816Dummyと253Dummy×2
>816v002 R1636 和了率22.73 放縦率11.44
>816Dummy R1526 和了率2074 放縦率12.66
816v002の方が強いみたい。(このときは)
816Dummyの放縦率が高いが、たまたまか?
0879252
NGNGまあ、ぼくもよくわからんけどね(´Д`)
>>872
AIプログラミングの力試しに来てる人はソース公開しないでしょう。
簡単にまねされては、力試しにならないし。
自分も強いのができて、ぎりぎりの戦いになるようだったらソースは出さないかも。
今のところそれを考える必要は無いが・・・
ちなみにMJSimはイカサマ防止のため常にソース公開。
だれかが、これを元に(しても、しなくてもいいけど)、
もっといい感じのやつを作ってくれればいいなぁという希望もあり・・・
0881816
NGNG差ほど変わらないです。
特に、降りについては100%まったく同じ処理です。
また、同じAIは戦略がほぼ等しいので、強さの強弱はあまりはっきりと出ません。
302さんとか他のAIとの試合で意味があるものと思います。そちらをやっていただければ
違いがはっきりします。牌効率と全つっぱのAI、253Dummyより実戦的な降りが出来る、
816Dmmyを基準にAIの強さを測ったほうが良いと思われます。
また、全つっぱ同士の戦いでは単純に牌効率がいいAIが高い勝率を出しますが、降りが
出来るAIと全つっぱだけのAIではTOPを取る強さの違いが有り。
その点も検討してみてはいかがでしょう。
0882デフォルトの名無しさん
NGNGつまり相手が降りるか降りないかの行動アルゴリズムの推定を行う必要があるということですね
0883816
NGNG相手の行動を推定するのは有用なアルゴリズムだと思います。今はそこまでは考えていません。
今言えることは、「最高に速くリーチする」と言った点では302さんが今のところ最高です。
実は、302さん並に高速なアルゴリズムを作りましたが、いくつか試行した結果、何かを追加すると
必ず遅くなってしまいます。
今あるAIは最短リーチを目指し、テンパッたらリーチのAIではほぼ上限が見えてきました。
より賢いAIを作るためには、それ以外でのアドバンテージを作らなければならないです。
それが、816Dummyの状況判断です。
先読みをしていない分、最短リーチ性能は低いが、状況判断が補っています。
この事は、すなわち、最短リーチ以外の色々な事を付加出来ることを意味しています。
0884816
NGNGこちらでは勝っているのですが、自己判断では証明できないし、とほほ・・・
上記>>883は、816が弱いとまったくの説得力がありません。残念。
0885252
NGNG>302さんとか他のAIとの試合で意味があるものと思います。そちらをやっていただければ
>違いがはっきりします。
ぼくが何か勘違いしてるような気がしてきたが・・・
とりあえず302v012×3とやらせてみた。
あんまり違いは無いが、816Dummyのほうが放縦率が1%程度低いくらいかなあ。
302v012にもちょっと勝ってる。
816Dummy 2.45位 302v012�@ 2.52位 302v012�A 2.47位 302v012�B 2.55位
816v002は、2.489位 302v012�@ 2.486位 302v012�A 2.488位 302v012�B 2.53位 微妙だ・・・
>牌効率と全つっぱのAI、253Dummyより実戦的な降りが出来る、
>816Dmmyを基準にAIの強さを測ったほうが良いと思われます。
単純なAIが相手の方が、効果や問題点が分かりやすいかなと思って、253Dummyを使用したんだけど。
降りるやつの方が実戦的かもしれず。
253Dummyを使用した強さの基準は、たたき台になればいいと思って、とりあえずやってみただけなので。
0886252
NGNG牌譜を見ていて、テンパイがもう少し速くなるんじゃないかと思ってた。
具体的には、トイツを残すことが多いなと。
たとえば、1m3m7m1p1p2p4p6p7p9p9p3s7s 5s (序盤)
というときに7mを切った。1pか9p切りのほうが広そうだけど・・・
期待値計算とかしたわけでないので分からないけど。
>追加、↑とは言ったものの、このスレ上では816のデータは弱いですね^^;
>こちらでは勝っているのですが、自己判断では証明できないし、とほほ・・・
いや、816v002は今のとこスレ内では最強レベルかと。
相手によって成績がかわってしまうのは前にも指摘されてたなあ・・・
0887816
NGNG>今のところ、ほとんど誰もおりない状況だが、おりると強くなるのかなあ。
>またどの程度強くなるのだろうか。
>4着になる可能性は低くなり、平均順位は上がるかな。
これの為に816Dummyを出したので、それを816v002と比較したので、あれあれと思い。
300ぐらいの試合結果では結構ランダムなので、簡単にはいえないのですが。
私が見た範囲では、降り機能はトップ取りには貢献していると思っています。
0888816
NGNG>降りるやつの方が実戦的かもしれず。
この辺は確かに難しいかな。
いけいけバンバンなAI同士だと単純により効率の良いAIの勝率が高い。
性格のAI同じだと少しの違いでも、勝ち負けがハッキリとしてくる。
816v002、816Dummyは状況判断で行動が違う性格なので、確実に勝とうとするが
いまは、たくさん勝てる様にはなってはいない。
確実に勝てて、尚且つたくさん勝てるように出来ればいいのだが・・・・
他のAIよりは少しだけ人間の考える方法に似ているので、対人間には他のAIより
強いかもしれない。(次に続く)
0889816
NGNG>具体的には、トイツを残すことが多いなと。
>たとえば、1m3m7m1p1p2p4p6p7p9p9p3s7s 5s (序盤)
>というときに7mを切った。1pか9p切りのほうが広そうだけど・・・
>期待値計算とかしたわけでないので分からないけど。
雀譜を見るとその場面をよく見かける、人間が考える牌効率とコンピュータが
計算で出す牌効率は意外と違うものが出てくる。
>今あるAIは最短リーチを目指し、テンパッたらリーチのAIではほぼ上限が見えてきました。
これは、コンピュータが計算で出す牌効率が今の方法では限界が近い感じがして書いています。
違う計算方法が有るかもしれない。
元々は、最速テンパイ即リーのAIは強いのか?の疑問が有り、状況判断を作ってみた。
意外と効果が出たと考えている。この結果から、最速テンパイ即リーのAIは対人間に対しては
パターンが読まれやすく弱いと思われる。(あたり前か^^;、実際の結果が出たと言うことで)
0890252
NGNG>>4着になる可能性は低くなり、平均順位は上がるかな。
>私が見た範囲では、降り機能はトップ取りには貢献していると思っています。
そういうことかぁ。
で、順位を見てみると(対302v012の1020試合の成績)
名前、1位、2位、3位、4位、平均順位
816v002、240、266、289、225、2.48
816Dummy、257、267、266、230、2.45
4位が少なくなるわけでなく、全体的によくなる感じか。
>これは、コンピュータが計算で出す牌効率が今の方法では限界が近い感じがして書いています。
>違う計算方法が有るかもしれない。
あると思うけどなあ。
で、リーチ関係を見てみる(対253Dummyの成績)
名前、リーチ率、リーチ平均順目、先制リーチ率、リーチ和了率
312v012、44.69、9.50、29.06、53.38
リーチ率(自分がリーチした局/誰か1人でもリーチした局)を下げずに、
リーチ順目を下げれば、リーチが速くなったといえるかな。
または、リーチ平均順目を遅くせずに、リーチ率を高めるとか。
816v002は状況判断しているということなので、ここだけ取り出して312v012と比較すべきでないが参考で。
816v002、37.31、9.13、26.86、56.22
816Dummy、36.13、9.17、25.55、58.56
0891816
NGNGそんな感じだと思います。簡単に降り機能って言ってますが中身は結構複雑で
状況判断だけでもパラメータが500以上あり、設定もある意味適当なので改善の余地あり。
>あると思うけどなあ。
私も有るとは思うけど、単純なアルゴリズムではないような感じが・・・。
>リーチ率(自分がリーチした局/誰か1人でもリーチした局)を下げずに、
>リーチ順目を下げれば、リーチが速くなったといえるかな。
>または、リーチ平均順目を遅くせずに、リーチ率を高めるとか。
ここが難しいところで、最速テンパイ即リーAIはテンパル事に対しては人間より明らかに速いです。
できすぎくんはリーチした順目のみの集計で、その数字的には人間と変わらないのですが、
AIは終盤でも期待点が低かろうが平気でリーチしますが、人間は終盤ではあまりリーチしないので
結果として9順目辺りが出ます。AIも終盤のリーチを止めれば8切ります。
因みに、これからの改善案に以下のものが有ります。
1.安牌を持つ、(今は危険パイばかり持っている)
これは、面子ターツが揃っている場合、余分の1枚は安牌を持つようにする。
2.ペンチャンカンチャン待ちリーチを減らす。
3.TOP子の時、鳴いて早上がりが出来る時は鳴く(状況判断に追加)
これは、全体に対する効果が少なそう。(作っても目に見えた数にならないかも)
4.上がり点数まで考慮した状況判断をする。(今は上がり点数は見ていない)
5.リーチ率を上げるアルゴリズムを考える。
6.現在の状況判断パラメータを最適化する。
何が一番いいと思いますか?又は他に入れた方がいいのは有りますか?
ただ、人間が考える理想が10とした場合、AIに出来ることは1以下です^^;
尚且つ出来るのはずいぶん先で、出来るかも不明ですが^^;
0892252
NGNG>状況判断だけでもパラメータが500以上あり、設定もある意味適当なので改善の余地あり。
xシャンテンならおりない、点差がx点以上ならおりる、とかそういうやつでしょうか?500も?
>AIは終盤でも期待点が低かろうが平気でリーチしますが、人間は終盤ではあまりリーチしないので
順目はここをキープで、リーチ率はまだ高まる・・・などと断言はできないが・・・
>何が一番いいと思いますか?又は他に入れた方がいいのは有りますか?
自分の場合、予定としては、
�@リーチ率、リーチ順目を高める。
�A上がれなさそうなとき、鳴いたほうが点が高い場合は鳴いて上がる。�@�Aで和了率をひたすら高める。
�Bおりる。放縦率をひたすら下げる。
�C細かい状況判断。
�D最適化
まあ、�@でとまっとるわけですが・・・
無理やり順序付けると↓
>5.リーチ率を上げるアルゴリズムを考える。
>2.ペンチャンカンチャン待ちリーチを減らす。
>4.上がり点数まで考慮した状況判断をする。(今は上がり点数は見ていない)
>3.TOP子の時、鳴いて早上がりが出来る時は鳴く(状況判断に追加)
>6.現在の状況判断パラメータを最適化する。
>1.安牌を持つ、(今は危険パイばかり持っている)
いろいろ書いたけど、ヨワヨワAIしか作ってないやつの言うことなので(´Д`)
0893816
NGNGそんな感じです。状況判断と行動をテーブルにしたら500超えました。
一つだけ愚痴をいわしてくれないか
> 873 名前:デフォルトの名無しさん 投稿日:04/02/29 18:54
>ソース公開しないと面白くないし、話題発展していかない・・・
そこの君、情報も話題も提供しているが、やっぱり貰うだけなんだね。
まあ、匿名だから仕方ないが、少し悲しいよ。
0894デフォルトの名無しさん
NGNG0895816
NGNGうんうん、書き忘れてたけど、追加はあれなので書かなかったです。
形式聴牌は、上の中では比較的簡単に追加できます。
ただ、条件が、
・他者がリーチしていない
・イーシャンテン。
・残り牌が10個以下(ここの数が微妙かな・・・いい案が無い)
の時に、無条件にチー又はポンして形式聴牌を取るを考えていますが、
どうでしょうか?
0896252
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_54/MJSim_000511.lzh
・牌譜出力を修正。できすぎくんで、流局時の局が認識されないことがある(点数の移動が無かったとき)。
・ハコ下になっても終わらなかったのを修正。
・初期設定で連荘するようにした。
・連荘するかどうかをiniファイルで指定するようにした。
・デバッグモードをiniファイルで指定するようにした。
★注意★コマンドラインで指定できなくなりました。
※MJSim.ini記述例
[Setting]
;デバッグモード。0:OFF(初期設定) 1:ON
DebugMode=0
;連荘するかどうか。0:連荘なし 1:連荘する(初期設定)
RenchanMode=1
※DebugMode、RenchanModeがiniファイルになくても初期設定で動作します。
0897252
NGNGいろいろやっていたらバグを見つけたので修正。
と同時に、初期設定で連荘するようにした。
AIが上がれないものだと1試合も終わらないので、連荘「しない」ようにしていたが、
iniファイルで設定できるようにしてみた。
で、連荘ありで、
816v002を253Dummyと500試合ほどやらせてみたらR1660。
816DummyはR1590くらい。
前回の結果より少し良くなっているなぁ。
0898252
NGNGこういうのまだありそうなヨカーン。見つけたら指摘よろしく。これが間違っていると話にならん・・・
※できすぎくんのリーチ率って「誰か1人でもリーチした局」が母数だと思っていたが、局が母数でした。
先制リーチは、誰かがリーチした局だけど。
で、他がツモ切り×3のとき、どうなるか見てみると、
302v012で、リーチ率67%、和了率50%(239試合、3495局)
816v002で、リーチ率56%、和了率47%(168試合、2639局)
単純に比較はできないが一応。毎回例に出してスマン。
手順ミス (裏目を含む) がない場合の向聴数の推移
http://www.comjong.com/article_nomiss/index-j.html
手順ミスがなければ
>70%以上の確率で自摸和了れます。聴牌まで加えれば、90%以上です。
ってことで、勘だけどリーチ率75%くらいはいけるんじゃないかなと。
0899男チャ漬け ◆VmNuOcUpJs
NGNG一向聴の時は残り10牌動いていいと思います。
個人的には残り15牌の二向聴で動いてもいいかなと思いますが。
>>896
お疲れ様です。
コマンドライン使えない事に関しても了解しました。
0900816
NGNG>単純に比較はできないが一応。毎回例に出してスマン。
いえいえ、とても参考になります。
816v002がリーチ率が低いのは2つ理由があります。
1、純粋な牌効率より、少し手作りが入っています。
前に示したように、最高スピードに何か手を加えると遅くなってしまう、が有りその点が少し。
2、に付いては、すみません今のとこ内緒にしておきます。結構簡単な方法なので
知れ渡ると楽しみが減ってしまうので、すまそ^^、この点がリーチ率に大きく影響しています。
1、については、もっと色々アルゴリズムを検討する必要があります。
2、に付いては、微妙で私は効果があるとは思っていますが、まだ数字的な分析は出来ていません。
今、7種類のAI行動があり、1つ以外は総て守備のための行動です。
次は攻め方の種類による行動定義を追加したいと思う反面、独断的に効果があると思う実装が
沢山あり、それが実際に効果があるのか分析したいと思っています。
事実500以上のテーブルデータは、多分こうだろうと思うあいまいなデータが入っています。
>手順ミス (裏目を含む) がない場合の向聴数の推移
このデータの向聴の時の待ちの形の分布が見れるといいんだけど・・・
>勘だけどリーチ率75%くらいはいけるんじゃないかなと。
そこまでいけるといいな〜〜、問題はペンチャンや19含むカンチャンを嫌って単独の456牌を
選んだ時本当にリーチ率が上がるかどうかですね、AIに組み込んで統計を取ってみたい。
実装方法は見えているのですが、複雑で時間がかかりそうです。
>>899
>一向聴の時は残り10牌動いていいと思います。
>個人的には残り15牌の二向聴で動いてもいいかなと思いますが。
お疲れ様です&ありがと〜〜。
残り15牌の二向聴も作り込んで、2つのDLLを出して統計を取って効果を見てみたいですね。
0901252
NGNG>1、純粋な牌効率より、少し手作りが入っています。
和了時平均点は、>>898のデータで、
302v012 和了素点6755、和了時収入8825
816v002 和了素点6524、和了時収入8754
まあ、これはリーチのときばっかりのデータなので、
鳴きを含む戦いになると変わってくるのかも。
>独断的に効果があると思う実装が
>沢山あり、それが実際に効果があるのか分析したいと思っています。
強くするためのポイントと、それを計測するやり方を発表してもらえれば。
形式聴牌については、凸HPでは、
http://www.interq.or.jp/snake/totugeki/kouza5.htm
↑の「いつから形テンを目指すか」に、
>平場であれば一般に、残り17枚くらいの段階からケイテンを目指すといい
など書いてあるけど、あんまり根拠とか書いてないな。
0902252
NGNG0.5.11からの差分のみ
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1071668170_55/MJSim_000512_sabun.lzh
・牌譜出力を修正。MJStatで役のカウント、雀友で上がりのカウントが不正になっていた。
局終了時の点数がソートされていなかったため。
ソートされてないといかんのか・・・
できすぎくんで流局がスルーされたのも、流局の時の局収支の部分に
半角スペースがあるかないかの違いだったしなぁ。
Readmeの「既知のバグ」にも書いたけど、できすぎくんとMJStatで局数が違うことがある。
見つけたログでは、約2000局で50局くらいMJStatの方が多い。なにゆえ・・・
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNGこのスレの荒廃ぶりならば、な。
0907 ◆R/rLuLKeEI
NGNG0908デフォルトの名無しさん
NGNGだろうね。各人それぞれでやってるだけだと一人抜け二人抜けで廃れていくだけ。
0909252
NGNGもしDAT落ちしても、強いのできたらまた立てる。
しかし、燃料というか話題がほしいねえ。
0910男チャ漬け ◆VmNuOcUpJs
NGNG0911デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNG0914816
NGNG>おまいら最強の脱衣麻雀プログラムしてみろよ!!
CPU側最強の脱衣麻雀なら、裸絵無くても出来る。(100%負けないので)
・・・釣られないクマ----(AA略
ギャグは置いといて、麻雀AIに、基本的なアルゴリズムが無い点が
話題の無さと、その為にアルゴリズムを0から作り上げるのは時間がかかる点が。
例えば、より早くシャンテンを減らすアルゴリズムはいくつか有り、シャンテンを
減らす性能は高い。でもこれは麻雀の極一部だけをAI化しているだけで、
その他のほとんどがアルゴリズムとして確立されていない。(公開されていなとも言える)
私の方では、幾つかのアルゴリズムを入れて試しているがパラメータが増える一方で
その設定値の正当性や妥当性が有るか疑問でなかなか先に勧めない。
だから、分析ソフトを作ろうとしている。あまり進んでないけど。
それに、誰かと競ってないとモチも減少気味で^^;
0915デフォルトの名無しさん
NGNG0916252
NGNG>だから、分析ソフトを作ろうとしている。あまり進んでないけど。
たとえば、どんな分析をするんでしょう?
>それに、誰かと競ってないとモチも減少気味で^^;
精進します・・・
0917816
NGNG>たとえば、どんな分析をするんでしょう?
ログファイルから分析します。
できすぎくんは人間に対応した分析で、AI的にはあまり向かない感じです。
やりたい事はたくさん有りすぎますが一例で。
・テンパイした時の形の統計
・フリテン時の統計
・裏目のはまり率
・他家リーチのときの自分のシャンテンと余り牌の危険率。
・他家リーチ時の降り牌決定後のシャンテン変化、回し率
・他家リーチ時の自分の順位と行動決定時の勝率
・行動決定とその正解率
・手回しをした場合のシャンテン上昇率、テンパイ率、上がり率、上がり点率
・色属性趣向の可能性分析
・その他にもたくさん。
上記がやりたい事の一例です。やりたいのは自分のAIが持ってるパラメータを
数値的に見えるようにした分析。ただ、AI作る並みの作業量があり、
手配の分析AIが有るので、それを使って作るのは難しくないのですが
作業数の多さが大変で・・・
0919男チャ漬け ◆VmNuOcUpJs
NGNG0920男チャ漬け ◆VmNuOcUpJs
NGNG本業の方が忙しくて機会が少ない。
C++の勉強になってよかったんだけどねえ。
活動再開にはちょっと時間がかかりそうです。
0921252
NGNGて、麻雀の方も考えねば・・・
0922デフォルトの名無しさん
NGNG0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNGまあみんな本職で忙しいんでしょ。
俺も、GWくらいには再開したいなぁ。。。
0927男チャ漬け ◆VmNuOcUpJs
NGNGお。2週間ぶりの書き込みでしたか。
では、私も暇ができたら進めてみたいと思います。
まだ、捨て牌分析完成してないし。
せめて、それぐらいは提供したいですしね。
先はまだまだ長い・・・
0928252
NGNG凸掲示板で最近話題になっている、
「カンチャンだろうがペンチャンだろうが先制なら常に即リーがよい」
というのにはショック。ずーっとリャンメンにしてたよ・・・
0929デフォルトの名無しさん
NGNGそんなの、時と場合によるでしょ・・・。
0930252
NGNG「常に」は言い過ぎか。まあ、ほとんどってことで。
時と場合によるけど、少なくとも人間同士では、
細かい状況を加味してどうするか考えるより、常にリーチしたほうが勝てる、という意味だと思う。
AIなら、そこらへんもう少し考えられるだろうけど。
0931デフォルトの名無しさん
NGNGというか、>>928の状況はおかしいぞ。
即リーしないつもりなのにカンチャンやペンチャンが最終型に残ってて、
しかもそれを聴牌後に落としていく、なんて最悪の動作だろ。
(ダマでロンできるならまた話は別か。でもそんな話じゃないんだろーなぁ)
聴牌即リーのつもりだったならば、最終待ちが多少悪くてもリーチするしかないし、
「ペンチャンリーチなんてとんでもない」と思ってる奴なら最初っからそんなとこを残さない。
0933デフォルトの名無しさん
NGNG速度は確実に落ちてるけど(面子のタネ叩き切ってるんだから)、
手役をつけるためならおかしくないだろうね。
その形ならタンヤオとか三色とか・・・・ってどっちも付かないだろその形じゃ・・・・。
0934デフォルトの名無しさん
NGNGその間でTCP/IP接続出来ました
誰かが東風荘のサーバー側の役目を果たすプログラムを作ってくれれば
皆で接続して対戦を1万回ぐらい行ったら強さが分かるんじゃない?
0935デフォルトの名無しさん
NGNG君が作ったそれでいいよ。
0937934
NGNG麻雀のサーバープログラムを作ったのではなくて
ただ単に二つのプログラム間でTCP/IPによる接続に成功しただけ。
つまり超初心者です。
0939デフォルトの名無しさん
NGNG某winnyみたいにIPアドレスを直接打ち込んで相互通信。
ついでにファイル交換もできれば人も増えて(ry
0940デフォルトの名無しさん
NGNGつーかTCPコネクション使うなら必然的にどちらかがサーバになるわけだが
それに麻雀というゲームのシステムからしていずれか一台が配牌や他家の
打ちデータの面倒をみないといけない
0941デフォルトの名無しさん
NGNG↑が言ってるように麻雀はサーバー無しでは無理だね
ってわけで誰か作れ
0942男チャ漬け ◆VmNuOcUpJs
NGNG0943デフォルトの名無しさん
NGNG今問題にあがってるような1卓対戦で環境もクソもないだろ
ネットワーク接続できるならそれでもうOKなわけだが
0944デフォルトの名無しさん
NGNGだから、ルールさえ決まれば、たとえばhttpで大丈夫なような。
0945デフォルトの名無しさん
NGNGプロトコルの意味が分かってないだろ?
httpで通信したいというならデータをまずHyperText形式にしなくちゃならんわけだが
0946デフォルトの名無しさん
NGNGど素人はどっか逝ってください。
なんだよ、HyperTextって(w
0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNGなったもの。バイナリ・スタイルならオクテット区切りでのデータ配列規則が必要だし
テキスト・スタイルならコマンド等のキーワードや区切り文字を設定しなければなら
ない。ただそれもこれも扱うべきデータがまずあっての話。
この場合は、スタンドアロンの麻雀プログラムがあって、その中で使用する変数が
決まっているなら、そこから通信型のプログラムに書き換えが進む。どの変数を
クライアント間で取り交わすか、ゲーム進行に関する制御系の通信をどう行うか
が先にないとプロジェクトとして進まない。
いきなりhttpっていうのはちょっとトンチンカンだね。
0949デフォルトの名無しさん
NGNGはっきりいって実装するのがめんどくさい
もっと単純なものでOK
0950デフォルトの名無しさん
NGNG>いきなりhttpっていうのはちょっとトンチンカンだね。
トンチンカンなのはあんたのほう。
専用の鯖を用意しなきゃならんみたいなことを上で言ってるからだ。
そんな必要はないということ。
>>949
他のやり方だとそれ用の鯖が必要だろ。
だれかが鯖を用意できるなら、あんたの言うとおり。
0951デフォルトの名無しさん
NGNGなんだ専鯖無しで考えてるのかい?
だったらレンタル鯖でCGIチャットみたいなやりかたでデーター交換するくらいしか手が無いね
0952デフォルトの名無しさん
NGNGそれはともかく、鯖ナシだとサンマをやるときに面倒だったりしないかね?
わざわざコンピュータでサンマなんかやらんか・・・。
0953デフォルトの名無しさん
NGNG×鯖ナシだと
↓
○P2Pもどきだと
0954デフォルトの名無しさん
NGNGwebサーバ間に置いて・・・なんてことは誰も提案してないよ。
だいたいそんなことしたらサーバ・プログラムが大変になるだけ。
2者接続にしろにしろどちらかがサーバにならなければならないというだけの話。
クライアントとして接続するかサーバとして接続するかは大した問題じゃないだろ。
ネットワーク・インタフェースを介してプレイできるならloopback使って単一ホスト
で対戦させることも可能になるし、そういうところがそもそもの利点だろ?
0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNGネタもってこいよ。
0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNG何がしたいんだ?
0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNG0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNG0979デフォルトの名無しさん
NGNG0980デフォルトの名無しさん
NGNG0981デフォルトの名無しさん
NGNGレス数が950を超えています。1000を超えると書き込みができなくなります。