- 1 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 21:47:50 ]
- めざせ最強の麻雀プログラム!
層の薄いこのカテゴリーなら、将棋やオセロよりも ずっと簡単にその地位を手にいれられるぞ!
- 180 名前:デフォルトの名無しさん [2007/07/30(月) 01:07:11 ]
- 数牌のメンツ分解と役判定を高速に出来れば、次のように手が求められます
14枚の牌を調べ、役が出来ていたらbreakして、 役が出来ていないなら見えていない牌の中から、ランダムに一枚加えて どれか一枚を捨てたら、役が出来るならその駒に役の得点を加算する さらに、もう一枚ランダムに加えて、どれか二枚を捨てたら 役が出来るなら、その駒たちに役の得点/2を加算する これを終局まで試行する そして制限時間がある限り、はじめからやり直して得点の加算を続ける すると、役が揃いやすい捨て牌に得点が集まります
- 181 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:10:04 ]
- >>180
糞仕様の話はいらないから早くソースあげてね。 それに、早くMJsimに実装してくれないか?
- 182 名前:デフォルトの名無しさん [2007/07/30(月) 01:11:48 ]
- ところで、みんなのとこのルールでは ダブ東の頭は4符?2符?
- 183 名前:デフォルトの名無しさん [2007/07/30(月) 01:15:15 ]
- 実は、プログラミングが苦手なんだ
数牌のメンツ分解数も、単独では正解にたどり付けなかったかもしれない 自分の解答よりも、他人の解答の正解率が高いだろうから だれか飜数計算を上げてくれないかと思っているところである
- 184 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:17:11 ]
- 苦手があるのはいい事だ。克服する喜びがある
- 185 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:18:07 ]
- >>183
ついにお前の本音が出たな。 俺もそう思ったよ。 つまり、お前がプログラム出来ないから、お前の糞仕様に 付き合ってくれる奴を探して、このスレを荒らしていたんだろう つか、プログラミング苦手なら、このスレに来るなよ
- 186 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:19:44 ]
- ルールは知らん。プログラムは苦手。なんでこのスレにいる?
- 187 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 01:21:05 ]
- >>154 >>160
言いますね〜(笑)アドバイス的確すぎやしませんか。 相当麻雀AI作成に熟知しているようにお見受けします。 私もアドバイス欲しいくらいですよ。 私もAIを組みましたので、牌譜あげてみます。 まだ鳴きも降りも教えてないのでドヘタゼンツ君ですがね・・・ ttp://uproda11.2ch-library.com/src/1118570.zip.shtml
- 188 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 01:22:17 ]
- >>187
DLパスは mjscore です・・・
- 189 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:23:56 ]
- 1118570.zip DLKeyが一致しませんでした
- 190 名前:デフォルトの名無しさん [2007/07/30(月) 01:28:30 ]
- >>185
いや、飜数計算は基礎なんだよ ここをおろそかにしたまま、各自が独自のMJSimの思考エンジンを作り出すようになっては たまたま、MJSimで計ったら強かった弱かったってなってしまうんだよ
- 191 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:28:44 ]
- DLできたよ
- 192 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:30:46 ]
- >>187
見ました、ずいぶんまともなAIですね。素晴らしいです。 聞いちゃうけど、オリジナル? サンプルの改変ですか? 答えたくなければ答えないでOKです。 もし私で、答えられる事が有ったら何でも聞いて下さい。
- 193 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:31:09 ]
- >>190
は?なんだそのウンコな反論は。 誰も、飜数計算をおろそかにしてないい。 お前の力で早くMJSimの飜数計算が正しいor 間違っていることを証明しろって言ってるの 出来ないなら何も書くな、糞野郎
- 194 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:36:02 ]
- ん〜、極端に間違っていない限り、同じコードで採点するんだから問題ないだろ?
それとも、それで差が付くほどの立派なものを組んだのか? 後々問題になるだろうが、それほどのものは出てないな
- 195 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:40:00 ]
- ちなみに、サンプルを強くするための一番簡単な方法論に。
もう1段検索を深くすることです。 それと、見えている牌から、見えない牌を割り出し、それの確率を入れると もっと強くなります。
- 196 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 01:46:53 ]
- サンプルで疑問点があれば、短文でなら説明します。
時間が少ないので、すぐ庭答えられないかも。(出来る範囲で) AIの性格付けも、単純であれば比較的楽に出来るかも。 明日休みだけど、フラフラでもう寝まつ・・・Zzzzzzzz
- 197 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 01:48:14 ]
- >>192
完全オリジナルですね。いくらか下積みがあって、牌譜化環境等もできあがってて、 最近ここが盛り上がってきたので、作ってたプログラムをいくらか形整えて 打たせたのが>>187です。 >答えられる事が有ったら何でも聞いて下さい。 ではお言葉に甘えて。 >>187のAIは、14枚の牌形から、 打牌候補を切り、1枚ツモり、打牌候補を切った時点で、評価関数を呼び出して 元の14枚牌形から打牌を選択しています。所謂一手先読み、になります。 これをN手先読みにすることが可能なのですが、現状の処理スペックだと 一手先読み・・・一回の打牌選択あたり0.001秒 二手先読み・・・一回の打牌選択あたり約2秒 となってしまい、現実的な処理時間では二手先読みが限界となっています。 そこで、単刀直入に申し上げますと、>>192氏のAIの性能(できればその手法も) 断片的でもいいので教えていただきたい。 サンプルでは、ターツ毎の評価をしていたようですが、今作成中のAIの路線も その方針でいくのでしょうか?
- 198 名前:デフォルトの名無しさん [2007/07/30(月) 02:15:19 ]
- >>197さんへ、>>180のようにやれば、最終手までの読みが出来ます
捨て牌を選んで、それごとに残っている牌からまたツモるとやっては分岐数が多すぎます >>180なら分岐は無いです すぐに終盤になります
- 199 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:17:34 ]
- >>198
まだ、お前の糞仕様を薦めてるのか。 お前の糞仕様の方が分岐が多いぞ。 それも気付かないのか、糞野郎
- 200 名前:デフォルトの名無しさん [2007/07/30(月) 02:20:57 ]
- もし分岐で読むのならば、手の優先順位を決めておき、MTD法がいいと思いますよ
概要としては、 f=予測値を決めておき、それより評価が良ければ、その枝はそこで読むのをやめ上位ルートへ戻ります fを超えるのが無かったら、もっとも評価の高い手の得点を上位ルートへ戻します
- 201 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:25:51 ]
- >>200
だからその分岐にどれだけ負荷かける気だよ。 「麻雀」と「プログラム」知らない奴が思いつきで書くなよ、糞野郎が
- 202 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 02:26:18 ]
- 別人ですが、参考になれば
ネックは4シャンテン前後なので塔子で分割してなら、それ用の評価関数を用意。 (例:単騎<辺塔子<間塔子<両塔子<対子<刻子<順子) で、面子候補それぞれに対して加算して求めてましたね。4シャンテンで最大100通り行くかどうか位 (※ただし、面子候補に単騎が二つ以上ある場合は別の方法にしてました。) これだけだと不満なので、残り枚数や色、三色などの評価もしたい所ですけど
- 203 名前:デフォルトの名無しさん [2007/07/30(月) 03:41:10 ]
- 4シャンテン以上なら枝もクソも無いだろw
普通に聴牌目指してひたすら不要牌切るだけ 相手の聴牌気配とか感じるのはそこまで出来た後の話だ
- 204 名前:202 mailto:sage [2007/07/30(月) 04:08:07 ]
- >>203
麻雀知ってる?
- 205 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 04:34:59 ]
- >>204
4シャンテン以上、ということはほとんどの状態で 孤立牌・不要牌が複数あるので、場風と手牌の偏り具合から 機械的に(=別の評価関数で)捨て牌選択が可能です。 というか、まずそれなりのものを作ってから順に次に取り組めよ
- 206 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 04:39:06 ]
- とりあえず何でも作って
土台を完成させろよ。 話はそれからだろ。 七対狙いオンリーの思考ルーチンでも 対戦用ライブラリのAPIに必要なエッセンスが 半分以上つまってんだからさー
- 207 名前:202 mailto:sage [2007/07/30(月) 04:57:17 ]
- 作ってあるけど?
これのメリットは手役の嗜好を作りやすい事。最強かと言われると・・・ 汚いソースだし書き換えるの面倒だから作り直してるさ〜
- 208 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 14:43:19 ]
- >>197 まずは、下のクラスを見て欲しい。
//======================================================================== // 手牌分析クラス //======================================================================== class CTatsu : public CBase { public: // // 評価用データ Analyze(void); で設定される // bool m_FuritennF; // フリテンフラグ int m_TenpaiNo; // 後幾つでテンパイ YAKU m_YakuType; // 現在の役タイプ int m_YakuNo; // 役の藩数 int m_YakuNotoN; // 役まで後N枚の役の藩数 int m_TurtuNo; // ターツの数 int m_MachiNo; // 牌の待ち数 int m_TotalPoint; // 合計ポイント int m_outHai; // 評価するときに排除した牌 int m_AtamaNo; // 頭の数 int m_AtamaHai; // 頭の牌番号 UCHAR m_MachiHai[PTBLMAX]; // 待ち牌データ int m_tehaiP[PTBLMAX]; // 手牌のポイント private: // // ターツ評価用データ // CMentu *m_pMD; // 親メンツデータポインタ int * m_ptehaiNAnko; // 元の手牌 コーツを取り除いてる int * m_ptehai; // 評価する手牌、面子と頭を取り除いてる
- 209 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 14:43:58 ]
- public:
void init(); // 初期化する。 int Analyze(CMentu *pmentu,int ahai); // ターツ評価 void AnalyzeNoHai(int no); // 数字牌の分析 bool tehaiCompar(CTatsu *pTD); // 手牌の優劣を比較、自分が低い:true, 以外:false bool tehaiComparTenpai(CTatsu *pTD); // テンパイ時の手牌の優劣を比較 void TenpaiMachiHai(); // テンパイの時の待ち牌作成 bool chkFuriten(); // フリテン試験 virtual bool chkThis(); // 自己オブジェクトの試験 virtual void DispData(); // データ表示 // // 役の分析 // void AnalyzeYaku(void); // 役の分析 bool AnalyzeYakuHai(void); // 役牌 場風、自風、白発中 bool AnalyzePinfu(void); // ピンフの分析 bool AnalyzeTanyou(void); // タンヨウの分析 bool Analyze34Anko(void); // 3アンコ4アンコの分析 bool AnalyzeToitoi(void); // トイトイの分析 bool Analyze112233(void); // イーペーコ bool chk123(int hno); // イーペーコイーシャンテン試験 bool AnalyzeChitoi(void); // チイトイの分析 bool AnalyzeKokushi(void); // 国士の分析 private: int getTenpaiNoAnalyze(); // テンパイまでの必要牌計算 int getKey(int * st); // キーの作成 };
- 210 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 14:51:28 ]
- class CMData : public CBase このクラスは大きいのでパブリックデーターのみ出します
public: char m_BlockNo; // ブロック番号 −1:空き 0〜:ブロックNO CHai m_tehaiw; // 面子頭引き後の手牌 int m_TotalPointAll; // 合計ポイント int m_TotalPoint; // 合計ポイント int m_TotalPoint3; // 合計ポイント int m_TotalPoint2; // 合計ポイント char m_MachiHaiNo3; // 面子牌の待ち種類数 char m_MachiNo3; // 面子牌の待ち枚数 char m_MachiHaiNo2; // 面子牌の待ち種類数 char m_MachiNo2; // 面子牌の待ち枚数 char m_AtamaHai; // 頭牌が有る時の牌NO // 解析結果データ char m_outhai; // 排除された牌 int m_AType; // 分析タイプ char m_TenpaiNo; // 後幾つでテンパイ char m_TenpaiTsNo; // シャンテンに対する余分のターツ数 bool m_FuritennF; // フリテンフラグ YAKU m_YakuType; // 現在の役タイプ YAKU m_YakuTypetoN; // 役まで後N枚の役タイプ char m_YakuNo; // 役の藩数 char m_YakuNotoN; // 役まで後N枚の役の藩数 char m_TurtuNo; // ターツの数 char m_T_XX_n; // リャンメンの数 char m_TX_X_Xn; // 2カンチャンの数 char m_TX_Xn; // カンチャンの数 char m_TXX_n; // ペンチャンの数 int m_AtamaNo; // 頭の数 int m_tehaiP[PTBLMAX]; // 手牌のポイント UCHAR m_MachiHai3[PTBLMAX]; // 面子待ち牌データ UCHAR m_MachiHai2[PTBLMAX]; // ターツ待ち牌データ
- 211 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 15:06:29 ]
- 上のクラスを見れば、どのような分析をしていたか想像がつくと思います。
見れば分かる通り、分析のし過ぎではないかと思うほど分析しています。 これは当初、初めてAIを作る上で人間の考える通りに動くAIが目標でしたから。 探索ツリーは 14枚の牌 ↓ ↓-----------------------↓ 構造1・・・・・・・・・・・・・・・・・・・構造N ↓ 捨てるパターンの数 ↓-----------------------↓ A牌捨て・・・・・・・・・・・・・・・・・N牌捨て ↓ 仮定のツモ牌 ↓-----------------------↓ 14枚の手牌1・・・・・・・・・・・・・14枚の手牌N ↓ ↓-----------------------↓ 構造1・・・・・・・・・・・・・・・・・・・構造N ↓ 捨てるパターンの数 ↓-----------------------↓ A牌捨て・・・・・・・・・・・・・・・・・N牌捨て これでようやく一手先読み。 のような探索ツリーです。非常に込み入った構造で尚且つ、分析結果がけた違いに増えます 1つの手配の分析は、総てのターツパターンを出します、その数は数十から200を越える時も。 例えば 2334 は 234と3 23と34 24と33 の3種類に分類。(とても簡単な例)
- 212 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 15:20:31 ]
- 添付のDummy1.dllは1手先読みだけのAIです、サンプルソースAIと同じ読みの深さしか有りません。
先読みが浅いのでスピードが速いく、それなりに強いのではないかと思います。 初めて作ったため、いろいろな試みをしています。初盤にペンちゃんや13のようなカンちゃんを 嫌うようにしてたり。私が思うような牌の切り方に近いようにしています。 その結果、ソースは膨大となり各所にバグがゴロゴロしているのではないかと思います。 雀譜を見れば分かると思いますが、面白い切り方をしたり、とんでもない牌を切ったりします。 まだまだ未完成です。 本ちゃんは二手先まで読んでいました、3手先までも作ったのですが、二手先とほぼ同じ感じです。
- 213 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 15:37:39 ]
- 手の役について
役は、上にあるように、ピンフ、タンヨウ、3アンコ、トイトイ、イーペーコ、チイトイ、国士 までしか分析していません。しかし、後幾つで役が確定するかも分析しています。 難しい所の一つに、役を目指すとフリテンが増えてしまうのが悩みどころでした。 最終的な手の評価関数はそれなりなのですが、最適化までには至らず、残念でした。 先読みについて 先読みが深いほど強いと思っている方もいるかもしれませんが。それは間違いだと 私の直感が宣言しています。それなりに理由もあるのですが、まだ、説得力があるほどの 論理的構築ができていません。参考程度に検討してください。 何処までの先読みがベストなのかは検討の余地が有ります。妄想では3手先も有れば 十分ではないかと思っています。
- 214 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 16:09:16 ]
- 分析と評価式
サンプルソースの様な手牌構造を理解せずに、評価関数で優劣を決める方法は 過去の物です。いろいろ欠点が有ります。 例えば、122334 の場合1が来たら4を捨てるのですが、中の数字を好む式だと 1を捨ててしまうかもしれません。(サンプルAIは4を捨てる) 例えば 2334は234の面子を優先して3を捨ててしまうかもしれません。 23と34の2ターツと考えた方がいい場合もあります。 例えば12のペンちゃんでテンパった時、有効牌が1枚しかなかったら、場合によっては 12を捨ててシャンテン数を下げても持ちを変えたほうが上がりには速いはずでしょう。 (簡単な例) 等々いろいろ有りますが、手配の構造を理解していないと解析が出来ません。 次世代AIには、手牌構造を分析するのが必要ではないかと言えます。
- 215 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 16:25:47 ]
- 作ろうとしているAI
問題は時間なのですが・・・、過去のAIは>>197のご指摘のターツ毎の評価(分析)が 主であるかもしれません。 次回は、人間の様にではなく、最速に速く上がれるAIを目指します。これは 最高に早くテンパルとは意味が違います。分析方法ですが、前はターツが主では あったかもしれませんが、今回は牌の構造に焦点を当てたいと思っています。 あいまいな表現で申し訳ありません。以前のAIの分析内容を見て分かる通り またも、複雑な事をやろうと画策しています。 作った結果、過去のAIに負けるかもしれませんが (大汗 振り返ってみて、過去のAIはいい経験になっています。いや、あの時はとても苦労した のですが、結果に落胆した・・・・orz、 今度は己に勝つ!
- 216 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 18:27:03 ]
- >>349
詳細な解説ありがとうございます。参考になることは数多いですが、その中でも >先読みが深いほど強いというわけでもない という示唆は非常に興味深い。 ara.moo.jp/mjhmr/statall.htm あら氏のシミュレーション結果(↑)を見ると 先読みが深いほど好結果がでていますよね。 すると、349氏のAIにおいて、先読みがさほど影響を及ぼさない原因に 評価関数の指向が関与しているのではないでしょうか。 というのはたとえば 56m2367p3488s東南西北 という手牌があったとして、これをターツ毎評価にぶち込んだ場合 「役に平和がつく(有力だ)」という評価ができると思います。 でも実際、平和がつくと確定するのは、和了形にして4手先、 テンパイ形にして3手先になります。 つまり手牌自体は1手先までの形しか予想していないけれど、 ターツ毎評価によって、部分的にはもっと先の形まで予想している、ということになります。 その結果、手構造自体の先読みの意義が薄れているのではないでしょうか? もちろん、そうなるのは評価関数が優れているためでしょう。
- 217 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 18:32:25 ]
- ちなみに、>>211の一手先読みでは一回の打牌決定あたり何秒くらいで打てます?
私の場合一打0.01秒程度なのですが、これだけ込み入った分析をした場合、やはり いくらか時間をくってしまうのでしょうか?
- 218 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 18:53:32 ]
- >>134、>>135
たいして高速化にもならんとは思うが、一応賛成。l で、MJexeIO.DLLという東風荘をプログラムから操作するDLLと同じ関数にしたらどうかな。 東風荘でも動かせるしね。 関数仕様はこれ。 ttp://www.interq.or.jp/snake/totugeki/MJexeIODLLfunc.htm まずは、全部は必要ない。 MJSimのデータ仕様は、無駄が多いし、わかりづらいと思う。 例えば、対戦相手の手牌のフーロしていない部分とかも見えるが(当然無効だが)、そんなの必要ない。
- 219 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:21:15 ]
- >>218
相手の手牌等のデーター領域はあっても中身は0で見えないようになってる。 卓で見える物しか見えない。
- 220 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:32:09 ]
- >>218
インターフェース用DLLを誰かが作ればいいんだけどね。私は時間がとても・・・ MJSimで、1つのAIに、2つのAIを繋げて動作を比較するツールを作ってる。 これ公開するから、参考に誰か作ってくれないかな? と期待。 MJSim ↓ 動作比較DLL ↓ ↓ AI1 AI2 (読み込まれた2つのAI
- 221 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:38:29 ]
- ルールは「まうじゃん」
ホストも「まうじゃん」 じゃなかったんだけ?
- 222 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 19:56:28 ]
- >>217
時間については計算したことがありません。どの様に算出しましたか? ダミーなら多分0.01以下ではないかと思います。 MJSimの実行が1秒間に100回以上しているので。 また、本ちゃんの二手先でも、けっこう速いのです。 手が染まっている時は遅いのですが、そうでない時は ダミー並とは言いませんが、早いです。 分析する必要があるのか無いかは、事前にチェックされ枝狩りされています。 手配の状況でスピードは数十倍以上違い産ます。 分析の種類が20-30以内の時と、200近くの時のその先の枝の数を想像してみてください。 極端に解析時間が違います。 読みについては後でまた。
- 223 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 20:18:52 ]
- >>222
切り番時、14枚の手牌+周辺情報(場に見えている枚数、ドラ等)を与えて 打牌選択関数を呼び出してから、その結果が出るまでにかかった時間を計ってます。 実質1手打つのにかかる時間ですね。ただしリーチ後のものは除いています。 ちなみに今計った所、一手あたり平均0.0087秒でした。 2手先で十分早いとなると相当なものですね。私の場合平均2秒ほどかかってしまいますから・・・ 枝かりが甘いのかなぁ・・・
- 224 名前:aa ◆BmUbLWewsM mailto:sage [2007/07/30(月) 20:27:45 ]
- >>222
には、説明不十分でした。 >分析の種類が20-30以内の時と、200近くの時のその先の枝の数を想像してみてください。 >極端に解析時間が違います。 データ数がそのまま時間ではないです。 データー数が多いと言う事は、不必要な分析がどんどん増えてくるのです。 説明は難しいのですが、同じ構造を何度も見つけてしまうのです。 そのため、重複排除やその他の時間がかかります。 おっと、>>223の時間はダミーのですか? 計測ありがとう。
- 225 名前:202 mailto:sage [2007/07/30(月) 20:46:41 ]
- AI作りの基本は自分と同じ打ち方させたい、ってのがあって・・・
そうするとどうしてもメンツ構成(塔子や単騎を含む)の分析が必要になるんだよなぁ でも、もしかすると牌効率最優先の方が強いかも分からないので、今それをどうしようか 考え中・・・
- 226 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 21:02:37 ]
- >>216
>あら氏のシミュレーション結果(↑)を見ると シミュレーションの0−3の違いはなんでしょう? 探したのですが見当たりません。
- 227 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 21:09:26 ]
- >>223
失礼、計測した平均時間は私のやつです。 0〜3は、それぞれそのシャンテン数未満のときに和了形まで予想して 点数計算を行う。それ以上の場合は簡易計算で済ますというものらしいです。 詳細は ara.moo.jp/mjhmr/simulation.htm
- 228 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 21:31:59 ]
- >>216
質問です。 >先読みが深いほど好結果がでていますよね.。 先読みが深いほど好結とは、どの部分を指しているのでしょう? 期待値の値ですか? 私はきた位置の計算自体に疑問を感じているのです。 もし意見が違うのであれば、話してみたいです。
- 229 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 21:34:02 ]
- ×きた位置
○期待値
- 230 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:05:19 ]
- 太らない程度の正しい食事と 適度な有酸素運動、そしてマッサージ
これを毎日徹底した自己管理で行えば Bカップ程度なら3年で育つ
- 231 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:07:17 ]
- 乳について語ってるのは誰だ!!
俺はCもあれば十分だと思ってる。Fなんざぁただの脂肪の塊としか思えん。
- 232 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 22:14:32 ]
- >>228
好結果の指し示すのは期待値の話です。 ただし、期待値が高いことが、好結果である必要十分条件ではないことに、 私も同意します。あくまで、期待値を一つの指標として挙げたまでです。 あら氏の期待値の重要性が実戦で崩れる要因として重大だと考えられる ものを挙げてみます。 1.18順の到達順目(=猶予順目)が保証されていること あら氏の期待値は、あくまで局が18順完了できる(かつテンパイ料を考慮しない) 条件下でのものでした。しかし実際は18順完了できることは それほど多くなく、全体の85%程度は和了による終了(自家和了含む)になります。 となると、実際では条件下等によって、到達可能な順目は変わってくるはずです。 たとえば、「ダブリーがかかった1順目」という条件下では、そうでない1順目よりも 平均到達順目が小さくなり、守備を考慮しないとしても戦略が変わってきます。 仮に100順分ツモ打牌が許されるなら、全局ヤクマン狙いが正着(=期待値高)になるでしょう。 しかし、18順で全局ヤクマン狙いの戦略では期待値は高くならないでしょう。 同様に、猶予順目が違うならば、戦略も変わってくるはずです。
- 233 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 22:16:52 ]
- 2.喰い仕掛け変化を意識していないこと
あら氏の期待値はあくまで、面前のみを対象としたものでした。 この条件では、喰い仕掛けを考慮しないため、「役をつけるためにシャンテンを落とす」 ということは少なくなります。 しかし喰い仕掛けを考慮すれば 123368m246p22688s ドラ2s というような場面から、打1mとしてクイタン狙いは有力手です。 当然、これはフーロを想定するからこそ有力手なのであり、フーロを考慮しない 期待値評価で打1mが選択されることはないでしょう。 フーロを想定するならば、喰い仕掛け可能な役を狙う意味が大きくなります。 3.守備を考慮していない 守備を考慮しなければ、ちょっとでも効率アップが考えられる牌は残すべきです。 しかし中終盤で、ほとんど効率が変化せず、かつ将来危険になるような牌は 残すべきではないでしょう。また、相手から攻撃が入った場合、各牌に失点指標 を導入しなければなりませんが、それも考慮されておりません。
- 234 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:26:09 ]
- とりあえず組んでみて思ったこと
・攻撃は何もなくても組みやすい ・守備は何かないと組みにくい ・俺よえぇ こんなとこか
- 235 名前:デフォルトの名無しさん [2007/07/30(月) 22:32:28 ]
- おまいら基礎が大事っていってるだろ まずは複数人で役計算を確定させようぜ
ルールは東風荘(第一)またはまうじゃんまたは今回作成したオリジナルルール
- 236 名前:78 ◆7rnrw5KbzE mailto:sage [2007/07/30(月) 22:32:56 ]
- >>234
守備を組むとっかかりには、結構各人の判断基準で強弱つくと思いますよ。 そういう面で、麻雀打ちとして強い人は有利になるでしょう。 <テーブル>は私の中に・・・
- 237 名前:デフォルトの名無しさん [2007/07/30(月) 22:36:36 ]
- プログラムくみやすいようにルールまとめたよ
単純化したオリジナルルール kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/4765.txt トンプウ荘ルール mj.giganet.net/yaku.htm
- 238 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/07/30(月) 22:38:14 ]
- >>232-233
詳しい説明ありがとうございます。 私は特に、次の点が実際と合わないと考えています。 あら氏の一人麻雀では、相手がいません。 したがって4人いる場合明らかに計算式が違います。 あら氏 期待値=自分の牌を見ただけの期待値。 4人麻雀 期待値=自分の期待値 ー 遅れた上がり順目分の他人の上がり期待値。 こらが本当の期待値です。あら氏のは一人麻雀での数値です。 いわゆる、0と3では、平均テンパイ順目が 0=11.56 3=11.76 3の方がテンパイが遅い、そして何より平均和了順目が 13.82 14.46と 0.64順ほど遅いのです。これは私にとっては大きなマイナス要員です。 コンピューター麻雀の場合、手の雰囲気が似てきます。だからこそ こちらが上がりそうなら、他の3人もあがりそうだと考えるのが普通でしょう。 その場合の0.64順遅れは、最強を作る上でマイナスだと考えます。 AI対戦の場合、他より少しでも速く和了する事が重要だと考えているからです。 その考えからすると、和了が速い0の方がいいのかもしれません。
- 239 名前:デフォルトの名無しさん [2007/07/30(月) 22:40:39 ]
- まずは、
数字19、2〜8、白発中、東南西北のコーツとトイツは同一視したときに 正しい飜数を返すプログラムを作ろうぜ これで多くは判定できるよ なぜならば、2のコーツと3のコーツを同一視しても、 それは別物であることは枚数から明らかだからだ
- 240 名前:デフォルトの名無しさん [2007/07/30(月) 22:44:42 ]
- 自牌だけ見ても駄目だぞ
なぜならば、敵は3人いるからだ 自分のあがる確率より、他人のあがる確率は3倍も多い 防御は重要
- 241 名前:202 mailto:sage [2007/07/30(月) 22:48:44 ]
- その上がりの早いAIは、上記のような塔子分解で有効牌が多いものを選んでいく方法で
とりあえず形になるのですが、理想とするシャンテン数には届かないです。 (理想←手牌+ツモる予定の16牌(17牌)でのシャンテン数) 理想が高すぎるのもあるのですが平均1シャンテン位は低いです(中盤12〜14巡目辺り)
- 242 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:49:39 ]
- 自分のプログラム、ひたすら上がり判定と先読みを枝切り高速化しまくって
3シャンテンくらいから期待値計算で考える子にしてみたんだけど、 2シャンテンから考える子は正常に動いたのに、3シャンテンまでがんばらせてみたら なんか動かなくなっちゃった。これだからバグはいくないorz
- 243 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:22:30 ]
- >>235=>>237=>>239=>>240の無視られっぷりにワラた
- 244 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:34:37 ]
- >>243
だってもう飽きたんだもんww
- 245 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:39:08 ]
- >>242
2手先まで読めてて、さらに1シャンテン下げるのは流石にムリでは・・・ 鳴いてもなんでもいいから形だけシャンテン下げるだけならなんとか。
- 246 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 00:56:18 ]
- >>235=>>237=>>239=>>240
犬のフンは無視するのが一番
- 247 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 01:06:32 ]
- >>245
あれ?自分なんか間違えてるかな? 2シャンテンから考える子は大体10ms以内とかだった気がするんだけど
- 248 名前:245 mailto:sage [2007/07/31(火) 01:15:47 ]
- アンカーミスった・・・スマソ
>>241ね
- 249 名前:202 mailto:sage [2007/07/31(火) 01:26:29 ]
- >>241ん?俺かw
いや、これは一手先読みだけですね。1牌切った状態でのシャンテン数が良くなる 候補の牌枚数をカウントして(有効牌数)、枚数が一番優秀な時の牌を切っていくだけ。 理想のシャンテン数というか究極が、引く予定の牌を含めた30枚でのシャンテン数として考えてます。 当たり前ですが究極には近づけませんw(エスパー能力があれば・・w) 有効牌数がそのまま塔子構成にも関わるので、そっちの評価は入れてないですね
- 250 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 01:51:17 ]
- おぉ、そっちかw
- 251 名前:デフォルトの名無しさん [2007/07/31(火) 02:08:04 ]
- 役牌って英語でなんて言うのかな?
- 252 名前:202 mailto:sage [2007/07/31(火) 02:19:04 ]
- ちなみに、>>249はそのまま積めません、遅すぎて。(面子候補で爆発します)
- 253 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:59:26 ]
- ttp://www.excite.co.jp/world/english/
役→Post 牌→Tile 役牌→Yacpai ううむ・・
- 254 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 14:06:49 ]
- 数牌のときはスートとシーケンスでいいと思うよ。
あと、役牌よりは字牌だろうね。
- 255 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 18:40:17 ]
- 自分で分からない言葉を使うよりは、ローマ字表記にした方がマシな場合が
多々あります。辞書を引きながら決めるなら↑の表記にした方が楽です。
- 256 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 18:52:10 ]
- 自分だけならな。
人が書いたソースでTaitoruとか使ってたら、そいつのコードは1行たりとも信用しない。
- 257 名前:255 mailto:sage [2007/08/01(水) 19:22:04 ]
- 上の役牌なら(翻牌?字牌?)ならYakuHaiでも良いとは思うが>>253を使って
PostTileなんて変にやられると逆に可読性が落ちそう。命名規則だけは保って欲しいな >>256 それは流石に同意w
- 258 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 19:27:34 ]
- >>256
奴の事か
- 259 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 19:46:51 ]
- 大体ローマ字表記で統一してるなぁ・・・
なんか幼稚っぽく見えるかもだがorz
- 260 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:15:43 ]
- サンレンコが一般的な役じゃないことが非常に美しくないということについ最近気づいた
- 261 名前:255 mailto:sage [2007/08/01(水) 20:17:27 ]
- 半端英語とローマ字混ざるのが一番辛くないか?
- 262 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:22:30 ]
- 私の場合変数名は 変数型1字+ローマ字に統一してる
あがりの際の翻数を入れるint型変数なら IAgariHon
- 263 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:29:26 ]
- 自分の場合ある程度の長さの変数名にして、後々気になったら置換してしまうw
この時にある程度の整合性を考える。ソースは上げるまでは自分だけのもんだしw
- 264 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:36:11 ]
- つpc11.2ch.net/test/read.cgi/tech/1180146315/
- 265 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:35:53 ]
- Hon・・・?
- 266 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:42:17 ]
- >>265
今気づいた正しくするなら IAgariHan だな 翻を変換するときに「はん」ではなく「ほん」で変換してるから 間違えてしまったみたい
- 267 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:49:32 ]
- >>264らじゃw
今実際に組んでる人どれ位いるのかな? 自分は今忙しくて凍結中 orz。ネタだけが増えていく・・・
- 268 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 20:51:07 ]
- 一応組んでるけどあんまり強いのできないかも
- 269 名前:デフォルトの名無しさん mailto:251 [2007/08/01(水) 21:37:27 ]
- 調べてみたところ、「役牌」は英語で value honros と表記するようです。
(ちなみに、 honors は「字牌」のことです) あと、プログラムを作成する上でわからない用語が、「捨て牌」です。 Table が真っ先に浮かんだのですが、なんかしっくりこないし・・・
- 270 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 21:51:01 ]
- たしか国によってルールが違うし、専門用語だし無理に訳す必要はないと思うんだけど、
ローマ字はなんか抵抗があるんだよなあ
- 271 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 21:54:24 ]
- もうある程度特別なケースは無視しても問題ない気しかしなくなってきた
- 272 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/01(水) 23:06:04 ]
- 今ごろが帰宅時間だ・・・orz
ゆっくり作ってるが何時出来る事か、完成したら面白い話が出来るかもしれない。 誰かAIをUPしませんか? 78さんAIをUPしませんか? 過去のAIならUP出来るけど、何処まで何を修正していたか、全然覚えて無い。 最終ビルドしたDLLならUP可能。
- 273 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:28:04 ]
- お疲れ様です。
個人的に燃料投下(DLLUP)して欲しいです。
- 274 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/01(水) 23:58:21 ]
- では、明日にでもUPしよう。
>>72さん >>211の構造間違えてます。調べて最UPしまつ、申し訳ない。数年前の話なので。 ネタ投下してみる。 構造の分析について 正確な点数計算は総ての手牌構造を出す必要が有る。 ちょっとだけめんどう。 テンパイして無い手をターツまで含めた手牌構造の総てのパターンで出そうと試みる。 とても大変。 手が染まっている手では、爆発的にパターンが増え、同じ構造を何度も検出する。 私のAIでは、考えられる総ての切り口で構造を取り出しているため、同じ構造を 何度も検出していまう。これの重複を検出するため、構造のキーデータを計算し ソートして有効な構造のみ取り出している。 >>209に有る int getKey(int * st); // キーの作成 これがそう 一種の枝狩りかな。 また、まじめにプログラムでターツを取り出すと、多分とても大変。 したがって、パターンデーターを持って、高速化している。 高速のために極一部の構造までは検出できない欠点ももっている。 事実上問題はないと判断したため、省いた。 私のAIの実装内容その1 でした。
- 275 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/02(木) 00:05:13 ]
- 追記
・パターンデーターでの分析は、とても高速だった。(参考までに) その実装方法は説明せず。皆さんに疑問を投げつけて、もっといい方法が出るのを期待。 実は欠点があってね、あの時はそれしかなかった。
- 276 名前:273 mailto:sage [2007/08/02(木) 00:24:19 ]
- パターンデータの実証は自分もしましたけど、なかなか有効でした
ただ、塔子などを考えるとまだまだ隙の多い気がしますね。自分のものは
- 277 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/02(木) 23:55:36 ]
- >>273
パターンデーターはいい方法論だと思うね、もっともっと良くなると思う。 標準化するほど一般化するかも。まあ、実装方法はいろいろ出てきていいと思う。 その中で、色々なアイデアが出たほうがいい。 ネタ投下その2 高速化の一つとして実装したのが。前分析データーの再利用。 私の分析ツリーは総てデーターでツーリー構造のまま残っている。 したがって、次のツモの先の分析データーが存在している。 それを再利用している。毎回既に広がったツリーの一手先を読むだけで 数手先を詠む事と等しい。しかし、多少スピードUP程度かな。 そうそう 明らかに関係しない牌をツモった場合は、前分析ツリーで簡単に意味が 無いと判断できるので、ツモ捨てしている。この方が高速化にはとても効いている。 単発の字牌とか、手牌より意味も無く離れたパイとかね。 手の重みでその辺も固まってくるし、前の分析データが利用可能なので。 この枝狩りは大きいかも。
- 278 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/02(木) 23:59:52 ]
- 今話しているのは過去のAIの話で、方法論のひとつにすぎません。
もちろん、もっといい方法は多々あるでしょう。無ければ新しいAIを作ろうとは思わないし。 ネタになるか参考にだしているにすぎない。ウザかったら言って、辞めるから。
- 279 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/03(金) 00:13:27 ]
- 追記。
物凄いメモリーの確保と廃棄が行われているのが理解できると思う。 オブジェクトの生成と廃棄では遅いと思い。高速メモリー管理ツール を最初は使用していたが、それでも遅いかと思い、完全にそれ専用の メモリー管理を実装した。これ以上の速さは無理なほど速くなったと思う。 メモリーの廃棄は1ステップ、確保は最短で確保。 どんなに良い物でも、専用にガリガリにチュンナップしたものが早いのは 当たり前と言う事で。 この辺は正直、趣味に走ってます、あははははは・・・・暇人だ・・・・ データーツリー構造の管理も趣味だよな〜・・・・orz 趣味が理解できる人だけ読んでちょ。
- 280 名前:349 ◆XrG.ETMFv6 mailto:sage [2007/08/03(金) 00:29:10 ]
- 注意!
しかしだ、そんなに強くないAIであった(泣き (実はもっと色々組み込んであるんだよ、戦術の話一言も触れて無いし・・・・・・orz) 私の落ち込みは、想像できるだろうか・・・・・・・・・ だって、結果が最速が強そうだったから。今度は最速でGOだ。
|

|