2017-08-28(Mon)
前回の続きです。
前回は鳴き判断が片付いて、次は通常打牌について手牌価値と危険度の兼ね合いをやっているのですが、かなり難航してます。
他家攻撃無しとか、対リーチとかはまぁ人間の感覚的におかしくない打牌になってるのですが、対1副露の序盤がだいぶおかしな打牌をやらかしてくれてて困っています。
問題の局面は例えばこんなものとか。

対1副露序盤に対してはまだ張ってないだろうから自手の都合で東とか中を切ってほしいのに、現物の9pとか8m対子落としをやるとか言ってきます。
遺伝的アルゴリズムで正答率が最も高くなるようなパラメータを求めたもの(一部抜粋)がこんな感じなのですが、

他家攻撃1の巡目域1(1~3巡目)の評価値比例部分係数が+1.9倍なのに対し、危険度比例の部分が-23倍とかいう極めてでかい値になってます。つまり、手牌価値の高さより危険度の小ささの方をかなり重く見積もっているということです。(序盤にもかかわらず。)
実際の生データ(csvファイル)で確かめてみても、確かにこの計算式だと正答率70%超えていてそれなりに高いので、パラメータの数値の求め方はおそらく間違ってはなさそう。
となると、評価値関数の作り方の問題かもしれません。
序盤で危険度が低いものを重く見ているというのは、序盤は字牌(危険度が低い)が切られることが多いから結果的に評価値の高さよりそっちが優先ということになってるのかも。
とりあえず、危険度比例部分を牌の種類(字牌・端寄り数牌、中寄り端牌)で分けて再度学習データの採取とパラメータの値設定からやり直しをしてみています。
この前の序盤役なし仕掛け多用事件といい、AIに自然な手を打たせることの大変さが身に沁みます。
前回は鳴き判断が片付いて、次は通常打牌について手牌価値と危険度の兼ね合いをやっているのですが、かなり難航してます。
他家攻撃無しとか、対リーチとかはまぁ人間の感覚的におかしくない打牌になってるのですが、対1副露の序盤がだいぶおかしな打牌をやらかしてくれてて困っています。
問題の局面は例えばこんなものとか。

対1副露序盤に対してはまだ張ってないだろうから自手の都合で東とか中を切ってほしいのに、現物の9pとか8m対子落としをやるとか言ってきます。
遺伝的アルゴリズムで正答率が最も高くなるようなパラメータを求めたもの(一部抜粋)がこんな感じなのですが、

他家攻撃1の巡目域1(1~3巡目)の評価値比例部分係数が+1.9倍なのに対し、危険度比例の部分が-23倍とかいう極めてでかい値になってます。つまり、手牌価値の高さより危険度の小ささの方をかなり重く見積もっているということです。(序盤にもかかわらず。)
実際の生データ(csvファイル)で確かめてみても、確かにこの計算式だと正答率70%超えていてそれなりに高いので、パラメータの数値の求め方はおそらく間違ってはなさそう。
となると、評価値関数の作り方の問題かもしれません。
序盤で危険度が低いものを重く見ているというのは、序盤は字牌(危険度が低い)が切られることが多いから結果的に評価値の高さよりそっちが優先ということになってるのかも。
とりあえず、危険度比例部分を牌の種類(字牌・端寄り数牌、中寄り端牌)で分けて再度学習データの採取とパラメータの値設定からやり直しをしてみています。
この前の序盤役なし仕掛け多用事件といい、AIに自然な手を打たせることの大変さが身に沁みます。
スポンサーサイト