5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

※麻雀ロジック研究会※

1 :1:05/01/10 13:48:12
麻雀のロジックについて研究しませんか?

麻雀ゲームなんかで強いCPUキャラクターとやると
どうしてもプログラムの方で積み込んでいるとしか思えません。
人間の思考に近づくロジックを話し合いませんか?

2 :デフォルトの名無しさん:05/01/10 13:52:52
成人記念2ゲット

3 :デフォルトの名無しさん:05/01/10 15:26:14
>>1
アナタの考えたロジックを叩き台にして進めたらどうだろう。
ということで、ネタ振ってちょ。

4 :デフォルトの名無しさん:05/01/10 15:56:13
よーし、俺がネタヲ振ってやるぜ
ファジイ推論でルールヲつくって
すべての牌について、それを切ったときの評価をだして
評価の高かった牌を切る

どうよ

5 :1:05/01/10 17:30:08
今のところ私が考えているのは、
キャラ毎に、ピンフ好き、タンヤオ好きとかにわけるしかないかなぁ
と、考えていますが、それだと上がれないですよね。
つまり強いCPUにはなり得なくなってしまいます。
ただ、前もって積み込みとかにしちゃうと、聴牌状態で
何巡目にリーチを書けて自摸る、とかいう設定になってしまいますし。。。
味気ないキャラクターになってしまいますよね。

ん〜難しいw

6 :デフォルトの名無しさん:05/01/10 18:14:53
まずは、上がりまでの起こりうる未来を全て列挙して、
その中から一番良いパスを選ぶことを考える。

多分、現在の計算機の能力ではできないので、
1)起きえないであろう選択肢をカットする
・ドラが2枚そろっていたら捨てない。
・終盤で、捨牌に出ていない牌は捨てない
など
2)最後まで読み切れないので、途中の状態で
得点を予測して、そのパスの得点とする。

を考える。

>>4 は 2) の一つの方法

1)でキャラクターの個性を出せるけど、最初は
最強プレーヤーを目指して作成して、機能制限
や評価項目の重み付けの調整で個性を作って
いった方が作りやすい

7 :デフォルトの名無しさん:05/01/10 18:27:28
http://pc2.2ch.net/test/read.cgi/tech/1048299493/
こんなのがあったな…

8 :デフォルトの名無しさん:05/01/10 18:54:15
>>7
その前の年にもあった。

1年に1度は麻雀ネタのスレが立つんだよ。


9 :デフォルトの名無しさん:05/01/10 19:24:26
>>6
>まずは、上がりまでの起こりうる未来を全て列挙して、
>その中から一番良いパスを選ぶことを考える。

「良さ」を計る関数の定義が出来ればほぼ終わったようなものな希ガス
関数を考えるに当たって
- 自分の上がりへの近づきとその点数の期待値
- 他家の手を進める、または振り込む期待値
くらいなのかな。

「上がりへの近づき」や「手を進める」というのをどう数値化するかが難しそう。

10 :1:05/01/10 21:02:21
>まずは、上がりまでの起こりうる未来を全て列挙して、
>その中から一番良いパスを選ぶことを考える。

手牌からその可能性を計算して、
ツモるたびにその可能性を狭めて行くやりかたですかね?
ある程度の前例をデータとして保持し、その型にあったやり方で
進行して行く訳ですか。

人間にも経験というものがありますし、これはいいですね。

記憶として対戦相手の思考もコピーしていくような、
ロジックもいれると面白そうですね。
役が成立するパターンの配牌を記憶し、
自分の配牌をそれにあてはめて、前例だとこの役が成立する予定だから
それを必死に集めるとか。

11 :デフォルトの名無しさん:05/01/10 22:28:43
振り込むリスクも考えないといかんなあ…
例えば相手の捨て牌から予想するような。

12 :デフォルトの名無しさん:05/01/12 01:01:49
>>1
ロジックを実装できるような
プログラムを用意するべきだと思います

13 :デフォルトの名無しさん:05/01/12 08:14:12
もうある

14 :1:05/01/12 11:09:47
>>12

プログラム自体はあります。
役判定はライブラリとか使ってますが・・・

ただ、決まった打ち方しか出来ないんですよね。
ピンフを中心に構成していくとか、
アンコばかり集めるとか・・・

さらにCPUを強化するには積み込むしかないし・・・

その辺を今後、研究していければいいと思っています。
将棋とか、囲碁と違って運もかなりゲーム要素に影響するので
なかなか難しいところではあります。

15 :1:05/01/17 10:59:28
牌に積み込む計算は
安全牌を計算しないといけないですね。
実装すると、モッサリしそうですが、
搭載したいきのうです。

16 :デフォルトの名無しさん:05/01/18 01:45:26
このスレの住人が、ロジックを適当な言語で実装したモノを持ち寄って
対戦させられるような仕組みがあったら面白そう。
>12の言ってるのもそういうことじゃないのかな。

17 :1:05/01/21 15:01:21
面白いかもしれないけど、みんな暇じゃないですよね。
私も、現在、納期前でいそがすぃし


18 :デフォルトの名無しさん:05/01/21 20:10:05
>>17
>私も、現在、納期前でいそがすぃし
後先考えずにスレを立てる暇だけはあったのか・・・


19 :デフォルトの名無しさん:05/01/25 23:54:34
こんなの見つけた
ttp://members.jcom.home.ne.jp/hennano/maujong/java/

20 :1:05/01/31 19:14:11
ごめんよ。仕事の合間にふと思ってさ。
軽はずみにスレ立てちゃいかんねv(>_<)v

21 :デフォルトの名無しさん:05/02/11 04:36:53
麻雀だと将棋スレみたく、最強を目指すと言うわけにはいかないのかな。
確率的に最善の手探しても、結局は運だろうから。

22 :デフォルトの名無しさん:05/02/11 20:48:40
将棋におけるCSAプロトコルみたいな、ある程度標準となるネットワーク対戦プ
ロトコルみたいのって麻雀ではないの?


23 :デフォルトの名無しさん:05/02/14 19:16:40
誰か、和了チェック関数見せてくれませんか?
漏れの使いかたが悪いのか、
http://www.interq.or.jp/snake/totugeki/mjcom_p0.htm
これを実装するとスタックオーバーフローになってしまいまつ。

24 :デフォルトの名無しさん:05/02/15 02:36:37
ループ終わらずにネストし続けてしまってるんだよね。

ぱっと見ありそうなのは先頭の
>for(;!tehai[i];i++)if(i>=43){return;} //上がっている場合ここが実行される
で i=0とかしてたり?


25 :デフォルトの名無しさん:05/02/15 02:41:42
i=0しても下スルーされるから関係無いか。

26 :デフォルトの名無しさん:05/02/15 02:58:24
すまん、やっぱりあるね。
自分の脳内トレーサじゃ >>24しか思い浮かばないや・・・

27 :デフォルトの名無しさん:05/02/15 16:27:30
>>24
あまり変数はいじってないんですけどね。
return の前に悪いやりかただろうけど大域変数のflagを使ってるだけで・・・
この人麻雀研究で有名だし、やっぱり漏れが悪いんだろうなあ。

28 :デフォルトの名無しさん:05/02/15 17:00:06
その関数は悪くないと思うよ。
どんな使いかたしてるの?
見てあげるからソース貼ってみそ。

29 :デフォルトの名無しさん:05/02/15 17:56:17
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/212.txt
クソコーディングすまそ。

最初、イーシャンテンでテンパイまでの受け入れ枚数を数えるプログラムを
作ってみようと思ったんですけど(鳴き、チートイ、国士はまだ)
どうもagari_checkのところで何かおかしなことになってるっぽいんです。

30 :デフォルトの名無しさん:05/02/15 18:19:05
そのままコンパイルして実行してみたけど、問題無かったよ。
この状態でスタックオーバーフローになるの?

31 :デフォルトの名無しさん:05/02/15 18:43:48
スタックオーバーフローは、恐らくなんですが・・・
VC++6のデバックモードだと、きちんと表示されるんですが
リリースモードと、BCCでは、最後のprintfが表示されないんです。
何が原因なのかなあ。

32 :28:05/02/15 18:49:23
>>29
tehai[43]で面子を作ろうとして無限ループ(再帰)してるな。
この関数はtehai[43]==0を前提にしているらしい。
tehaiの定義を 1増やして、
int tehai[44]=
{0, 0, 3, 0, 0, 0, 0, 0, 0, 0, //0-9
0, 0, 0, 1, 1, 1, 0, 0, 0, 0, //10-19
0, 2, 1, 1, 1, 1, 1, 1, 0, 0, //20-29
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //30-39
0, 0, 0, 0}; //40-43
で、うまくいくかも。

33 :デフォルトの名無しさん:05/02/15 19:05:53
>>32
おお、最後きちんと表示されるようになりました。
まだおかしなところがあるかもしれませんが、とりあえず前進しました。
ありがとうございますm(__)m




34 :デフォルトの名無しさん:05/02/15 21:36:58
http://www.vector.co.jp/games/review/1013/images_01.html
こんな牌のフリーの絵ってどこかにないですか?

35 :デフォルトの名無しさん:05/02/15 22:17:17
そんなに数無いんだし自分で作れば?
漢字フォント作るより楽だと思うよ。


36 :デフォルトの名無しさん:05/02/17 09:56:47
>>35
そんなこといわずに教えてください

37 :デフォルトの名無しさん:05/02/17 12:09:45
上がり得点/期待値が最も高い手になるようプログラムすればいいじゃん。
統計的には確実に強い打ち方になるぞ

38 :デフォルトの名無しさん:05/02/17 18:09:47
フリーの牌画像発見。ちょっと笑えた。
http://www.geocities.jp/aposhine/tiles.html


39 :デフォルトの名無しさん:05/02/17 18:14:48
ここにもあった。
http://www.mahjong.to/sozai/readme.htm


40 :デフォルトの名無しさん:05/02/17 18:49:48
1ソーがポイントだなw

41 :デフォルトの名無しさん:05/02/18 09:30:23
>>16
対戦させられるような仕組みは、
>>7の「MJSim」、>>19の「まうじゃん」というところか・・・
で、作っている人いるの?


42 :デフォルトの名無しさん:05/02/19 17:46:05
あがり判定とか役判定ってどうやんの?
それだけで結構難しくない?

43 :デフォルトの名無しさん:05/02/19 18:07:36
少し上にあるだろ

44 :デフォルトの名無しさん:05/02/21 00:25:39
麻雀のルールって、増築に増築を重ねた「九龍城」みたいなものだからな・・・

実際にさまざまなルールを統合してプログラムを作成しようとすると、
あちらこちらに矛盾点が出てくるんだよね。

実際にゲームをしている時には殆ど発生しない
レアなケースでのみ起こる矛盾点もプログラムにする以上、
ちゃんと解決しなくちゃいけないし。

例えば、「完全先付け」とかさ・・・

あれ考えた奴、脳みそのネジが5,6本、抜け落ちているんじゃないのか?


45 :デフォルトの名無しさん:05/02/21 00:56:34
>>44
C++の悪口はやめてください

46 :デフォルトの名無しさん:05/03/01 14:16:30
麻雀に関してのプログラムの書いてある本
何でもいいので教えてください

47 :デフォルトの名無しさん:05/03/06 21:02:00
age

48 :デフォルトの名無しさん:05/03/06 23:45:51
んとね、テクノポリスに書いてあった。
探すのめんどいから何号かは知らん。

49 :デフォルトの名無しさん:05/03/07 00:13:54
>>46
ゲームプログラミング
『遊びのレシピ』

ttp://www.cmagazine.jp/books/recipe/

50 :デフォルトの名無しさん:05/03/19 18:18:59
>>1
そもそも上がり、いやテンパイにまで持って行けるの?




と言ってみるテスト

51 :デフォルトの名無しさん:05/03/19 18:21:49
>>44
>例えば、「完全先付け」とかさ・・・

>あれ考えた奴、脳みそのネジが5,6本、抜け落ちているんじゃないのか?

タコ麻雀対策だろ。
麻雀格闘倶楽部やってるとたまに後付で勝つウザイ香具師が多い

52 :44:05/03/20 20:36:31
>>51
いや、俺が思うに、多分あのルールは
筋者の方々が素人さん相手に勝負をする時に
散々難癖を付けて、カネを搾り取るためのものだと思う。

その理由は・・・

1.ルールの出自が関西であり、今も関西でしか行われていない

2.「完全先付け」には様々なパターンと、それに対する様々な解釈があり、
それら全てをゲームの前に確認しておくのは不可能

3.その後のゲーム中で、事前に確認が取れなかったケースが
発生した場合、間違いなく腕力の強い奴の主張がまかりとおる

まぁ、そんな深読みをしなくても、実際にプログラミングをしてみれば
すぐ分かる。
「完全先付け」がどれほどトチ狂ったルールであるかが・・・


53 :デフォルトの名無しさん:2005/03/24(木) 10:25:10
「完全先付け」というルールの存在自体を無視することをお奨めする

54 :デフォルトの名無しさん:2005/06/08(水) 23:18:22
麻雀AIのロジック。

ツモ麻雀できるロジックを示しす漏れが来ましたよ。

A.総当り式
1、牌を積もる。
・上がっているーー>「ツモ!」
・上がってないーー>2、へ
2.捨てられるパイを仮捨てしてみる(捨てられる牌数分のパターンあり)
・積もる牌がまだ有るかーー>3、へ
・もう可能性ツモがないときは、
_・上がりリストから最良のデータを使い捨て牌を決定し捨てる−−>1,へ
_・上がりリストがない時は、牌評価数値表からいらないのを捨てる。
3、つもり可能性のある牌をつもってみる。(積もれる可能性分のパターンあり)
・上がりかーー>4、へ
・上がらないーー>2、へ
4.上がり評価
待牌の確立と点数の期待値を計算する。上がりリストに登録。
・次の可能性ツモ牌が有る時はーー>3、へ

興味があったらageみて。

55 :デフォルトの名無しさん:2005/06/15(水) 22:34:30
>>54
まず上がりの判定フローを示せ

56 :デフォルトの名無しさん:2005/06/16(木) 02:45:27
ほい、

BOOL 上がり判定(int 手牌[])
{
if(国士か(手牌)) { return TRUE; }
if(チイトイか(手牌)) { return TRUE; }
for (int i = 0; i < 34; i++) {
if (手牌[i] >= 2) {
手牌[i] -= 2;
if (面子確認(手牌)) {
手牌[i] += 2;
return TRUE;
}
手牌[i] += 2;
}
}
return FALSE;
}
3つの関数は自分で考えろ。
聞くだけなら、もう何も出ない。

57 :デフォルトの名無しさん:2005/06/25(土) 14:06:48
役判定のソース

ttp://software.nikkeibp.co.jp/software/download/down04c.html

58 :デフォルトの名無しさん:2005/06/25(土) 15:41:13
>>56
お〜い、それじゃフリテンと複数の可能性を考えられないぞ〜

59 :デフォルトの名無しさん:2005/06/27(月) 23:57:32
>>58
おまえの目は節穴、恥ずかしすぎるぞ。

60 :デフォルトの名無しさん:2005/08/23(火) 06:35:38
みんなで麻雀の思考ルーチンを作って、東風荘とかで対決してみたいなあ。
東風荘の画面から牌の情報を読み取ったりするライブラリは >>23のHPで公開されているから、
純粋な思考ルーチンの部分を作るだけでいいし。

age

61 :デフォルトの名無しさん:2005/08/23(火) 09:38:19
>>57
麻雀のソースずっと探してたんだ、ありがとう

62 :デフォルトの名無しさん:2005/08/23(火) 10:02:16
「振らない」というのはロジックにどう組み込みますか?

というか、捨て牌から手役の高さと待ちを読むロジックは
あまり研究されてない分野と思う

63 :デフォルトの名無しさん:2005/08/23(火) 10:08:57
板違いすぎ

64 :デフォルトの名無しさん:2005/08/23(火) 10:15:36 ?#
マージャンはルールが不明な部分が多いんだよな。

カンが四つで流れるってルールとスーカンツは両立しないけど、どうなってるんだとか。
・一人でカンを四つの場合は流れない
・カンを四つした時点でスーカンツができてなかったら流れる
・その他
とか、いろいろ考えられるけど、本屋に売ってるマージャンの本なんかには
載ってないし。
(なんとか協会とかのルールには決められてるんだろうけど)

65 :デフォルトの名無しさん:2005/08/23(火) 10:30:26
>>64
仕様(ルール)の振れ幅は決まってるんだから、たいした問題ではないだろう

66 :デフォルトの名無しさん:2005/08/23(火) 12:19:22
>>62
真面目に組むんだったら、捨牌戦略は割と簡単に組める

・裏筋チェック
・壁チェック
・自分の手牌と場に出た牌の数え上げ
・染め手系のチェック
・序盤の中張牌(変則待ち)チェック

・・・といろいろあるが、はっきり言って、上の3つ程度を行えば十分だし、
それ以上やったら、かえって弱くなる傾向がある。
(変則待ちや染め手を警戒するあまり、棒テンにぶち当たる)

本当はプレイヤーの待ち牌をチェックして出さないことだが、それはあくまでも反則ということで。

あと、日本プロ麻雀連盟の公式ルール(抜粋)
ttp://www.ma-jan.or.jp/rule.htm

あと、スーカンツは1人で4つのカンをした場合に成立し、その場合5つめのカンの発声および牌の提示とともに流局となる。
それ以外の場合は、全て4つめのカンが成立した時点で流れとなる。
カンの成立は、カンをした人が、リンシャン牌をツモり、手牌の中から不要な牌を打牌した瞬間。
(カンドラありのルールの場合、チャンカン時にはカンを行った人の打牌が行われていないため、新ドラが成立しない)

67 :デフォルトの名無しさん:2005/08/23(火) 15:37:30
>>66
日本プロ麻雀連盟の公式ローカルルールな

68 :デフォルトの名無しさん:2005/08/23(火) 15:39:48
>>66
手役の高さを推測し、期待値計算して自分の手の期待値と比較して
相手のノミ手より自分のとびまんを優先して 危険牌でも打つ みたいな
そういうロジックを組みたいよな
あと、当然ネットワーク対戦等の 神(サーバ)があり 打ち手(クライアント)
があるという構成での最強を目指したいよな

69 :66:2005/08/23(火) 16:03:00
>>68
実は色々やっているんだが、実は「リーチ一発・裏ドラあり」というルールや、
「カンドラ・カンウラあり」とか「赤五ピン・赤五ソーあり」とか
「ウラドラチップ制」などの、祝儀たくさんのインフレ麻雀になればなるほど・・・

(1)自分から見える情報だけで、もっとも待ち牌がたくさんある面子選択を面前で行う。
(2)字牌を除き9-10枚以上同種牌が無いとチンイツに行かない。(ホンイツは想定外)
(3)聴牌はもっとも残り枚数が多い形(たいていはリャンメン待ちかその変形)
を選択し、リーチを必ずかける(裏ドラが乗るため)
(4)相手のリーチはこちらが2シャンテンより遅い場合は全て無視

・・・という棒テン・即リー・タコツッパリ君AIが強かったりする。

逆に一発ウラドラなしルールだと、AIのウエイト変数を工夫した、
敵側の捨てパイ読み部分のプログラムの作成が楽しくなるのだが。

また同じAIを使っても、棒テン即リー君ばかりのAIx4人の相互対戦の場合とか、
染め屋さんAIが一人入るとか、なんちゃって鳴きの竜AIが入ってくるか、
・・・またそのAIがどこに座るかによって、対戦結果が有意(5%以上)違ってくるので、面白い。

まだまだ研究途上だけどね。

70 :60:2005/08/23(火) 20:35:25
>>61
Javaでいいなら、ここでダウンロードできるよ。

tp://www5e.biglobe.ne.jp/~tatano/index.html

71 :61:2005/08/25(木) 08:38:59
>>70
おお、ありがとう。思考以前に麻雀動かすだけで四苦八苦ですわ

72 :デフォルトの名無しさん:2005/09/01(木) 00:53:18
>>68
点差の問題や残り牌の問題もあるので相当難しくなりそう。
>>69
麻雀格闘倶楽部ではライフ制の香具師がライフ切れ落ちすると次局からCPUになるが
そのCPUの下家は圧倒的に有利w

73 :東風荘じゃ1600程度:2005/09/01(木) 11:33:02
おまいら教えてください

最強の麻雀ロジックを作るため研究を始めました。
まずポンチーカンロンなし、役もなしですべてのプレイヤーがひたすら上がりに向かうという
シミュレーションを行っているのですが、この状況で誰かが上がる確率が50%にしかなりません。

麻雀そのものにそれほど詳しくないのでこれが妥当なのかよくわからんです
次に今のアルゴリズムを書きます

74 :東風荘じゃ1600程度:2005/09/01(木) 11:36:55
>>73
一枚引いて14枚になったら・・・

IF 聴牌
 return どの牌を捨てたら一番待ちが多くなるか()

FOREACH hai IN 手牌
 仮想手牌 = 手牌からhaiを取り除く
 評価(仮想手牌)

return 一番評価の高かったhai


75 :東風荘じゃ1600程度:2005/09/01(木) 11:42:30
>>74
評価関数は・・・

評価(牌の配列)
 int SCORE
 WHILE 順子 がある
  配列から取り除いて、SCOREに順子値をプラス
 WHILE 刻子 がある
  配列から取り除いて、SCOREに刻子値をプラス
 WHILE 両面 がある
  配列から取り除いて、SCOREに両面値をプラス
・・・

という感じで重要な構成要素から点をつけています。
この両面値などを適当に調整しているのですが、この方法ではパラメータがプログラマの
マージャンの知識に依存してしまうし、仮定のような簡単な状況(役なしなど)でなくなった
場合に応用が利きません。

なにかよい方法はないでしょうか?

76 :デフォルトの名無しさん:2005/09/01(木) 12:21:23
>>73
>ポンチーカンロンなし、役もなしですべてのプレイヤーがひたすら上がりに向かう
という状況なら
>誰かが上がる確率が50%
そんなもんだろ
>>75
>この方法ではパラメータがプログラマのマージャンの知識に依存してしまうし、
>仮定のような簡単な状況(役なしなど)でなくなった場合に応用が利きません。
詰め将棋のように今の手配から上がるまでを総当りで調べる



77 :東風荘じゃ1600程度:2005/09/01(木) 13:03:24
>>76
>詰め将棋のように今の手配から上がるまでを総当りで調べる
これをやってしまうと10000回とかのシミュレーションが行えず(時間がかかりすぎるため)
悩んでいます。

しかし50%が妥当なのであれば、そろそろ次のステップに行こうかと思います
・ロンできるようにする
・捨て牌を見る
・役判定をいれる
くらいからはじめようかなと思っています

78 :76:2005/09/01(木) 16:28:14
枝狩り。理想は総当りだが、実際には時間に合わせて読むようにする
それか、数牌だけとか抽象化したモデルで先にデータベース化(定跡)するとか
さらに、こちらの番やアニメーション+音声の再生時に読むとか
これが難しいなら、積み込みや手牌透視ができるインチキ対戦CPUを作る


79 :デフォルトの名無しさん:2005/09/01(木) 18:45:41
>>78
それだととんぷうそうで勝てないんだよね・・・

80 :デフォルトの名無しさん:2005/09/05(月) 20:11:02
>>白木
それは違うぞ

81 :デフォルトの名無しさん:2005/09/05(月) 22:09:10
白木って誰

82 :デフォルトの名無しさん:2005/09/06(火) 20:30:20
>>78
あと、すり替えも。

83 :デフォルトの名無しさん:2005/09/08(木) 01:49:37
ブッコぬk(ry

84 :デフォルトの名無しさん:2005/09/08(木) 11:47:39
コンピュータ対戦も可能なネット麻雀を作ったら面白いな。
対戦相手はランダムな選出だけど、運良く二人以上が選ばれたら
通しもしていいというルールで。
まあ同一IPからの接続は二人まで、と縛っとけば
CATV以外の人はそう困らんでしょう。
山に対する仕掛けが出来なければそれなりにフェアだし。

85 :デフォルトの名無しさん:2005/09/08(木) 22:53:10
>>78
手牌透視とかはアーケードの某ネット対戦麻雀でも大々的にやってるらしいな


 315 名前:焼き鳥名無しさん[sage] 投稿日:2005/09/07(水) 03:54:12 ID:???
 金突っ込まないと上がれないようにする。これ当然の話。
 MJは知らないが、以前組んだオンラインマージャンシステムだと・・・

 まずは、リーチをかけようがポンしてもチーしてもツモ牌は変わらないようにする。
 すなわち配牌グループ13枚x4,ツモグループ17枚x4程度を事前に作る。

 投入資金をパラメータ化しておき、高額支払い者が比較的有利になるように
 乱数を使って、ほどほどに偏りのある有利度補正値を適宜決定する。  

 有利度補正値によって、配牌グループでは、(1)(2)(3)(4),ツモグループでは(1),(2)を作る。

 (1)中張牌の出現頻度を10,20,30,40%多いグループを作る
 (2)特定の柄(ピンズ、ソーズ、マンズ)が10,20,30,40%多い割合で選択されるグループを作る。
 (3)場風と字風と三元牌を2枚もしくは3枚含むグループを作る
 (4)ドラ牌を2枚もしくは3枚含むグループを作る。

 なお、何も補正を加えなくてもいい場合は、完全ランダムで牌を選ぶ。

 テストプレイでは、中張牌が20%程度多い配牌で、同様のツモグループにするだけで、
 飛躍的に得点が伸びるし、リーチ一発も多くなる。
 しかも、一見して細工しているのがわからない。

 役満(三元牌を5枚以上積み込む)などの露骨な細工は、(露骨過ぎるので)あまりしないでほしいといわれた。
 (ただ一色手方向の補正が大きくなると、大車輪・九連宝灯・緑一色などの出現頻度が高くなる...四暗刻も増える)



86 :デフォルトの名無しさん:2005/09/09(金) 00:49:19
おまえら、PS2の麻雀やろうぜ!2でも参考にしろ

87 :デフォルトの名無しさん:2005/09/09(金) 20:22:09
白木、出て来い

88 :デフォルトの名無しさん:2005/09/09(金) 23:20:10
>>87
こんちわー、白木です。
http://lovelovelicca06.web.infoseek.co.jp/minoru05.jpg


89 :デフォルトの名無しさん:2005/10/31(月) 00:35:54
age

90 :名前は開発中のものです。:2005/11/25(金) 19:01:36 ID:/aObainy
 

91 :名前は開発中のものです。:2005/11/25(金) 19:29:39 ID:ixk95QjQ
(´・ω・`)

92 :名前は開発中のものです。:2006/06/16(金) 15:06:48 ID:gys/BJwI
age

93 :名前は開発中のものです。:2006/06/22(木) 04:21:40 ID:2BUVy0Re
age

94 :名前は開発中のものです。:2006/07/04(火) 12:32:40 ID:RtEqyIQY
AI同士を対戦させるプログラムを作ってみようかなあ。

し よ う
基本は、>>7のMJSimと同じ。
・AI同士のみの対戦。
・東風荘ルール。
・東風荘のログを出す。

・AIは、.netで作る。作るの楽だし、開発環境無料だし。
・勝敗は、東風戦200回以上の合計得点で決める。
・「勝敗」にほとんど関係のない(めったに現れない)ルールは無しにする(役満、チャンカンなど)。

MJSimは、AIに「普通の麻雀」をさせようとして作るのが難しくなっている気がする。
麻雀のルールを、AIが作りやすい形に変えてしまえばいいのではないか。

まあ、できるかどうかわからん。
1ヶ月たって音沙汰が無ければ頓挫したと思ってくれ。

95 :名前は開発中のものです。:2006/08/05(土) 12:24:30 ID:huHp86V8
1月経った訳だが


96 :名前は開発中のものです。:2006/11/11(土) 10:51:40 ID:bfMsKF2A
東風荘の代打プログラムを作って、100試合ほど打たせてみた。
安定Rが1100しかなかった(´・ω・`)

実装した機能は以下の通り。
・普段は単純に聴牌一直線。具体的には、シャンテン数を落とさずに
 受け入れが広くなるように切る。ドラおよびドラ付近は評価を高めに。
・鳴きは役牌のみ。
・残り山枚数が20枚以下になると、形式聴牌を取りにいく。
・相手から先制リーチが入ると、現物→字牌→筋の順でベタオリ。

97 :名前は開発中のものです。:2006/11/11(土) 11:45:38 ID:z2w53djY
ベタオリ機能外した方がよくねえか?

98 :96:2006/11/11(土) 14:19:21 ID:bfMsKF2A
>>97
そうかなあ。
ベタオリ機能を実装してから、成績がだいぶ安定したから
必須機能だと思ってたけど・・・

99 :名前は開発中のものです。:2006/11/11(土) 20:49:33 ID:GfQHFT1U
ベタオリする条件を先制リーチと別に、もういくつか設定してみたらどう?

たとえば残り山数が少なく、シャンテン数が高いとか
切れる牌が危険牌だらけとか上がれそうもなかったら、ベタオリ。

まだ、山数が十分あるとか、シャンテン数が低いとか、切れる牌の危険度が
低かったら続行するとか。


100 :96:2006/11/13(月) 09:22:52 ID:duDFKbMP
>>96からさらに100試合ほど打たせてみた。
すると、その100試合の安定Rが1650で、
>>96の100試合と合わせた計200試合の安定Rが1450に。

まだまだ試合数が少ないから断言はできないけど、
今までは運が悪すぎたのかなあ。

とりあえずは旧上ランの入り口である、R1600を目指して
がんばります(`・ω・´)

101 :名前は開発中のものです。:2006/11/13(月) 19:32:23 ID:/l9lVeym
勝ちが安定しないって、ようは運任せで、アルゴリズム関係なしなんでは?


102 :名前は開発中のものです。:2006/11/13(月) 23:38:07 ID:BdVR9VSj
シャンテン数が高いときはベタオリにして、
それ以外のときは
ゆるくオリるような打ち方がいいんではないかと。

つまり、現物、字牌、筋、
リーチ者が序盤に切った牌の周りなどを
安全そうな牌としといて、
安全そうな牌かつシャンテン数を落とさない牌を打つようにする。

さらに精密にやるなら安全度を点数化するといいかも。

103 :名前は開発中のものです。:2006/11/14(火) 19:32:08 ID:MANy7Ws5
やっぱりベタオリは改善の余地があると思う。
勝ってるときはベタオリ、負けてるときは、続行とか。

あとは鳴きが役牌のみってところかな?
チンイツとかホンイツとかトイトイとか、いくつかの役に対して、シャンテン数計算して、
いくつ以下ならその手を目指してチーポンを積極的に行うとかはどうだろうか。


104 :96:2006/11/19(日) 22:34:00 ID:t1T5Qf2N
みなさんレスありがとうございます。
平日は忙しい上に、PCがつかえない環境にいるため、
返事ができなくてすみません。

ところで、他にも東風で代打プログラムを
動かしてみたいという方はいらっしゃいませんか?

もし、代打プログラムを作ってみたいが、とつげき東北さんが配布されている
MJexeIO.dllを使ってもスキルが足らずに作成できない・めんどくさいという方が
おられましたら、僕が作成したプログラムでよければ公開させていただきます。

今のところ搭載している機能・特徴は以下のとおりです。
1.とつげき東北さんが配布されているMJexeIO.dllに皮をかぶせて使いやすくしています。
  具体的には、
  ○画面から情報を取得する関数を自作の関数の中で適切によびだしているため、
   プログラマ自身が画面から情報を取得する関数を呼び出すタイミングに頭を悩ませる必要はありません。
   画面から取得された情報は、自作の構造体(手牌構造体やプレイヤー構造体など)に格納されます。
  ○自分の順番が回って来た時にどの牌を切るかを返す関数、チーやポンをするかどうか尋ねられた時に
   鳴くかどうかを決定する関数のみを実装すれば、自分の思い通りに動く代打プログラムが作れます。
2.一度起動すれば、プログラムを終了するか、東風が回線落ちするまで、延々と打ち続ける機能を搭載しています。
3.自分の手牌のシャンテンを計算する機能、場に見えている牌の枚数を数える機能、有効牌を計算する機能
  (ここでいう有効牌とは、自分の手牌のシャンテン数を下げる牌を意味します)、4人の捨て牌を時間順に並べる機能
  (この機能により、MJexeIO.dllのSimulateOrder関数に付きまとっていた、切られた牌の順序決定不可能性の問題
  を回避できます)など、代打プログラムを作成する上で、必要と思われる機能を搭載しています。
  (時間があれば、自分の手牌の役を認識する機能を搭載する予定です。)
4.僕自身はプログラミングを趣味としているただの学生ですので、スキル的な問題により、ソースコードは汚いですし、
  上記機能の処理速度も速くはありません。デバッグは十分に繰り返したつもりですが、バグがないことを保障できません。

105 :名前は開発中のものです。:2006/11/20(月) 03:34:26 ID:flZCi+aK
>>104
興味あり。公開してほしいな。

まあ、俺は代打プログラムを作れるような頭は持ち合わせていないが。

106 :名前は開発中のものです。:2006/11/20(月) 21:10:36 ID:8qCQQBvr
うちは、代打ちじゃなくて全部オリジナルで作ってるんで、
プログラム自体は必要ないけど、アルゴリズムとか、
どんなことをやってるかソース中にコメントとかあれば見てみたい。

作ってるのはエロゲなんで、強い思考ルーチンはいらないんだけど。


107 :名前は開発中のものです。:2006/11/24(金) 22:26:28 ID:WoA2EPYX
しかし、こんなにいるんや。
こんなこと考える人!

やっぱ、パラメタ、重みつけ。
あと、ひたすら統計になるんかなー?

108 :名前は開発中のものです。:2006/12/12(火) 23:21:53 ID:svbHb3hn
統計取るなら聴牌思考の指向性についても考えたほうがいいんじゃないかな
具体的には棒聴即リールーチンと期待値計算して遠回りしても高い手を和了るルーチンのどちらが強いか
ってのを東風かなにかで実戦に投入しながら統計をとるってことで

でも、麻雀の統計として具体的に何局ほどサンプルをとればいいんだろうか…
20万局ぐらい?

109 :96:2006/12/28(木) 20:24:12 ID:IWNuZXZH
>>100からさらに改良を加えて、200試合ほど打たせてみたところ、
安定Rが1600付近まで上昇しました。
特に、好調だった80試合を見ると、安定Rが1900強に。

改良点は以下のとおり。
<聴牌に向かっているとき>
今まで:面子手のみ。
   ↓
改良版:チートイツも組み込んだ。
<ベタオリ時>
今まで:2人が同時に攻めてきた場合、自分から反時計に見て
     近い方しか警戒していなかった。
   ↓
改良版:他家それぞれに警戒係数という指標を導入し、
     複数他家の攻撃にも正確にベタオリできるようにした。
<状況判断>
今まで:他家からリーチがかかったときのみベタオリ
   ↓
改良版:他家のリーチだけでなく、食い仕掛けにも対応。
     また、自分の手がよければ、先制されても攻めるようにした。
<牌効率>
今まで:シャンテン数を下げない牌を一枚切る。
     その際に、内側の牌・ドラ・ドラソバに高評価を与えていた。
改良版:一打一打ごとにモンテカルロシミュレーションを行い、もっとも手牌のあがりへの
     寄与が低い牌を切るようにした。

110 :名前は開発中のものです。:2006/12/29(金) 18:27:19 ID:sGXeTFgC
カルネージハート(或いは、FF12のカンビット)のように
みんながアルゴリズムを組みやすいアプリケーションがあればいいと思った。
麻雀がうまくてもプログラムなんて組めないって人多いだろうし。

111 :名前は開発中のものです。:2006/12/29(金) 18:38:40 ID:J1Q+yA/u
麻雀は、カルネージと違って、サブサンプション的にどうこうするってものでないからな
アルゴリズムというよりむしろ統計処理か

まあ、パネルプログラミング的なインターフェイスはあったら面白いかも

112 :名前は開発中のものです。:2006/12/29(金) 19:27:02 ID:XZsMB63t
>>109
研究用にソース欲しいんですけどオープンソースですか?

113 :96:2006/12/29(金) 21:53:15 ID:DWfKfu8r
>>112
僕のしょぼいソースでよければ公開させて頂きますよ。
言語はCです。
ただ、あくまで東風代打ツールとして作ってるんで、
研究用には使えないかと思います。

>>104で書いたんですけど、反応が薄かったんで、放置してました(笑)

114 :名前は開発中のものです。:2006/12/29(金) 22:12:09 ID:XZsMB63t
>>113
ありがとうございます。
リアルでも使える代打ちプログラムを作りたいと思ってるので助かります。

115 :96:2006/12/29(金) 22:17:26 ID:DWfKfu8r
>>115
いろいろ改良を重ねているうちに、ソースが汚くなってきたので、
ちょっと整理に時間がかかるかと思います。
明日の夜には間に合うと思いますので、
申し訳ありませんが、それまでお待ちください。

116 :高島易者のつぶやき:2006/12/30(土) 02:07:11 ID:6keB+Ie9
そんなことより、ちょいと聞いてくれよ、>>1よ。
昨日、あるホテルで高島易断の鑑定会やったんです。鑑定会。
そしたらなんか人がめちゃくちゃ少なくガラガラなんです。
で、よく見たらなんか貧乏臭い客がいて、「運勢鑑定3000円ですよね」、とかほざいてるんです。
もうね、アホかと。馬鹿かと。
お前らな、運勢鑑定如きで普段来てない高島易断に来てんじゃねーよ、ボケが。
御祈祷だよ、御祈祷。
なんか親子連れとかもいるし。一家4人で高島易断か。おめでてーな。
よーしパパ運勢鑑定頼んじゃうぞー、とか言ってるの。もう見てらんない。
お前らな、3000円やるから帰ってくれと。
高島易断ってのはな、もっと金持ちが来るべきなんだよ。
テーブルの向かいに座った奴に因縁話吹っかけてもおかしくない、
乗せるか逃げられるか、そんな雰囲気がいいんじゃねーか。女子供は、すっこんでろ。
で、やっと別の客が来たと思ったら、そのうちの一人がまた、3000円ですよね、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、3000円の鑑定なんてきょうび流行んねーんだよ。ボケが。
得意げな顔して何が、3000円の、だ。
お前は本当に3000円の鑑定を受けに来たのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、3000円の鑑定って言いたいだけちゃうんかと。
高島易者の俺から言わせてもらえば今、高島易者の間での最新流行はやっぱり、
年間36万円の因縁切りの御祈祷、これだね。
2年分72万円。これが通の頼み方。
御祈祷ってのは金がまとまって入る。そん代わり手間が掛からない。これ。
で、それに1年分100万円の特別祈祷。これ最強。
しかしこれを勧めるとと次からカモ(客)に警戒されるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。
まあお前ら貧乏人は、近所の神社でオミクジでも引いてなさいってこった。

高島易断について■part3
http://hobby8.2ch.net/test/read.cgi/uranai/1155287091/l50

38 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)