【人狼知能】人狼知能への挑戦 作成日記^ー^【人工知能】

タイトルの通り。 COに関する状態遷移図まで実装済み。 ディープラーニング適用(GoogleのTensorFlow等)を目指す。
3
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業時間:12.5時間 進捗: ■占い先 ・自分と、自分の占い済みPLを除く ■CO ・0日目はCOしない ・初日は、対抗の初手黒を待ってからCO ・自分がまだ占いCOしてなければ、占いCO ■投票 ・自分の黒がいたら、そこを投票 ・自分の黒がいなければ、自分と自分の白を外す

2016-10-16 03:39:40
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:6h 進捗:狂人作成 ■CO ・100%占いCO ・初日白結果を出すときは1拍待つ。黒結果は即結果からCO ■占い先 ・自分と、自分の占い済みPLを除く ・白50%、黒50%(破綻する場合は反転する) ■投票 ・自分の黒がいたらそこを投票、いなければ自分と自分の白を外す

2016-10-16 20:07:39
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:2h 進捗:Udonの投票のソースコードを解読(途中)

2016-10-19 01:27:40
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:4h 進捗: Udonがどのようにしてその日の投票先、占い先、噛み先等を決定しているかの解読(途中)。 PL毎にスコアをつけ、その日一番スコアの高かったPLに対して行動しているようだ。 次回は、スコアの付け方、集計の仕方等をもう少し深掘りする

2016-10-20 00:15:20
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:5.5h 進捗: 村人作成。投票先を占い結果やCO数からスコアリングして決定する。 次回は占い師と狂人の投票の改良と、霊能を作成する。 行く行くは、占い結果やCO数から適切な吊り位置、占い位置、噛み位置、護衛位置を決めるにはどのようなスコアリングが良いかを、大局的に考える

2016-10-23 03:43:58
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:1.5h 進捗: 占い師と狂人の投票の改良(COしてるPL、片白のPLは投票を控える等)、霊能の作成(投票は今までと同じ)。 初日の霊COは2拍待ってからする。 次は狼を作るため、Udonの狼を解析する

2016-10-23 23:38:16
葵@令和の人狼を考える会 会長 @aoi_no_oheya

【人狼知能 途中報告^ー^】 作業:2.5h 進捗: 狼の作成と、第二回人狼知能大会 優勝者である、Udonニキのソースコードを大解剖!^ー^ Udonニキの各役職クラスは、"AbstractBaseStrategyPlayer" を継承します pic.twitter.com/Vr9KFpqQVg

2016-10-25 01:55:18
拡大
拡大
拡大
葵@令和の人狼を考える会 会長 @aoi_no_oheya

"AbstractBaseStrategyPlayer" は "AbstractRole" を継承し、initialize, dayStart, update, whisper, vote, divine, guard, attack, finish関数をOverrideします

2016-10-25 01:55:52
葵@令和の人狼を考える会 会長 @aoi_no_oheya

Udonニキの脳ミソは、initialize内で読み込む『各strategy』と、update内の『execGuess』と『execActionReserve』の2関数であるように見えるので、次回はここを更に解剖します。 具体的には、視点整理とスコアリングの仕方に注目します

2016-10-25 01:56:08
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:4.0h 進捗: execActionReserve, FixInfo, AnalysisOfRequestの解剖。 execActionReserveで各strategy(FixInfo等)のgetRequestを呼び出し、村の状況からPLのスコアを複数算出する pic.twitter.com/UnRAX5DfHi

2016-10-28 00:35:45
拡大
拡大
拡大
葵@令和の人狼を考える会 会長 @aoi_no_oheya

例えばFixInfoでは、死亡済の全てPLのスコアを0にする、自分が占い済のPLのinspect(占い先)スコアを限りなく0にする等。 最後にAnalysisOfRequestを呼び、算出した各PLの複数のスコアを掛け算し、その日一番スコアの高かった者に投票等を実行する

2016-10-28 00:36:07
葵@令和の人狼を考える会 会長 @aoi_no_oheya

僕からUdonへの問題提起は、いわゆる『正しい進行』をとるのが難しいこと。 例えば、初手黒と霊2CO出たときに霊ロラを選択したいとき、各PLのスコアを掛け算した結果、この状況では必ず霊PLのvoteスコアを最大にする必要あるが、その調整が難しいと思う(現在のUdonコードはこれ) pic.twitter.com/2xmNEFwpWt

2016-10-28 00:36:32
拡大
葵@令和の人狼を考える会 会長 @aoi_no_oheya

そこで『正しい進行とは』を考えたが、様々な仮定を踏んだ結果、人狼の正しい進行を定義することは難しく、人狼とは『駆け引き』であるという結論に至った(つまり正しい進行をとっても、狼が裏をかいたら高確率で村が負けるので、狼が裏をかいてるか否かを見極めるゲームである) pic.twitter.com/M4XwMocff7

2016-10-28 00:36:59
拡大
拡大
葵@令和の人狼を考える会 会長 @aoi_no_oheya

まずは『駆け引き』を定義するために、『詰み進行』=『吊り数 >= 人外候補数』 となる進行を定義する。 そのために、次回はある盤面における『吊り数』と『人外候補数』を考察する

2016-10-28 00:37:16
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:4.0h 進捗:Udonニキの内訳整理方法を解読。 PLを「村陣営」か「狼」か「狂人」のどれかに分類すると、12A欠け無しだと全部で495パターンとなる。 その内、例えば占い結果が出たら、その結果にそぐわないパターンは削除していく #aiwolf

2016-10-29 04:11:50
葵@令和の人狼を考える会 会長 @aoi_no_oheya

そしてあるPL視点で『2狼存在するパターン』が無くなったら、おそらくそのPLを『破綻』としている。 尚、『残り吊り数』=『(残り人数 - 1) / 2 ※端数切り捨て』にて表される。 次回は、Udonニキの『灰数の数え方』を解読し、『詰み進行』について考える #aiwolf

2016-10-29 04:12:12
葵@令和の人狼を考える会 会長 @aoi_no_oheya

(参考)12A欠け無しで、PLを「村陣営」か「狼」か「狂人」のどれかに分類したときの組み合わせは: ・2狼の組み合わせ = 11C2 = 55 ・村陣営9人の内、狂人が1人いるので  55 * 9 = 495 つまり全部で495パターンとなる。 ちなみに欠けありだと550パターン

2016-10-29 04:16:20
葵@令和の人狼を考える会 会長 @aoi_no_oheya

例えば各PLに1~11の番号を振り、各役職を「村陣営 = 0」、「狼 = 1」、「狂人 = 2」と表して、PL番号の小さい順に役職番号を表示すると「00101002000」のようになる(これはPL1が村陣営0、PL3とPL5が狼1、PL8が狂人2の例) #aiwolf

2016-10-29 04:34:15
葵@令和の人狼を考える会 会長 @aoi_no_oheya

初日例えば、PL1が霊COして「村陣営 = 0」が確定した場合、全パターンの内、PL1が「狼 = 1」と「狂人 = 2」のパターンを全て削除する。 また、PL3が「狼 = 1」が確定した場合、残ってるパターンからPL3が「村陣営 = 0」と「狂人 = 2」のパターンを全て削除する

2016-10-29 04:34:29
葵@令和の人狼を考える会 会長 @aoi_no_oheya

Udonニキはこのような作業をListで行っており、各PL番号をListのIndexにしている。 おそらく、だからUdonニキはAgentではなく、agentNoで色々なものを操作、管理しているのだろう #aiwolf

2016-10-29 04:39:41
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:7.0h 進捗: Udonニキのソースから、各視点の「確定村リスト」、「確定人外リスト」、「村/人外 不明リスト」の取得方法を理解。 ここぞとばかりに俺が考える最強の進行を組もうとしたが、ある盤面からの勝率計算が予想以上に難しい #aiwolf

2016-10-30 23:05:07
葵@令和の人狼を考える会 会長 @aoi_no_oheya

作業:1.0h 進捗: ある日の吊り位置、占い位置はやはり各PLの『スコアリング』が必要という前提で、そのためにはスコアリングの『基準』が必要と考え、その基準を『その日、あるPLが狼である確率』としてみたが、そもそも人狼は確率では表せなさそうと感じた。 #aiwolf

2016-11-01 01:38:03
葵@令和の人狼を考える会 会長 @aoi_no_oheya

どのように場合分けして確率を出そうか考えたところ、まずは『どちらの占い師が真か』で分けてみたが、例えば真占いがその日白を『引く』確率はある程度すぐ計算出来るが、狂人がその日白を『出す』確率は、狂人の『意思』が混ざるため、容易には計算出来なそう #aiwolf

2016-11-01 01:38:18
葵@令和の人狼を考える会 会長 @aoi_no_oheya

たぶん「真占いならこう」と考えて「でも狂人なのでこう」とか、その上で「真占いなのでこう」とか、でも更に「狂人だからこう」…みたいな感じで『自分の確率は自分の確率に依存』するんだと思う。 この確率の極限が収束するなら安定行動は存在するが、発散するならいよいよ正しい進行など存在しない

2016-11-01 01:50:44
葵@令和の人狼を考える会 会長 @aoi_no_oheya

もし確率が発散するなら正しい進行など存在しないのだが、あたかも「正しい進行がある」みたいな、いわゆる『環境メタ・人メタ』が存在している場合、それを取り入れ、学習し、その人の裏をかく、というのが人狼の強さとなるだろう。 つまり、もしかしたら初日に片白を吊るのもアリかもしれない

2016-11-01 01:56:58