これは天気の毎日の移り変わりやすさ(確率)と、各天気の時にどういう行動をするかという統計確率を元に今日とった行動だけを見て、隠されている情報(天気)を当てようというアルゴリズムを頑張って再現しようとしたものです。 行動数っていうのは観測する行動の数です。ようするにサンプル数で多ければ正確に天気を推測できます。 あとは任意のキーを押すと1日ずつ推測していきます。
sunny,rainy,cloudyの3つの天気とそれぞれの天気がどの程度の確率で遷移するかの情報(雨から晴れになる確率など)と、 それぞれ3つの天気のときにどんな行動を確率で行うかの情報(晴れの日はwalkする確率が50%、shopする確率が10%など)のみをあらかじめ知っているものとします。 確率に基づき天気と行動を自動で生成します。 その行動だけをもとに、もともとの天気を推測するプログラムです。 天気の移り変わりやすさ、ある天気のときの行動の傾向だけを把握しておいて 実際にどんな行動を取ったかをもとに実際に天気はどうだったかを推測します。 CurrentActionはサンプリングした(観測した)行動一覧です。!で日毎に区切ってあります。 その日、どの行動をどれくらい行ったか、結果の確率をtmpリストに保存してあります。上からwalk,shop,cleanです。(actionは目次の代わりで意味のないリストです) All_Weathersは答え合わせ用のリスト。実際、正解の天気一覧です。 今日の行動の確率から、それぞれの天気の時の行動確率理論値の差の絶対値を取り、前日の天気から遷移する天気の確率を1から引いて補正値として先ほどの絶対値の値にかけ合わせます。 値が小さいほど理論値に近いということになり、天気が当たる確率は高くなるはずです。 Result、ResultWeatherの1番目が第一候補です。 続いて2,3と候補が続きます。 Rainy→Sunnyのように変化が激しいかつ、Sunnyの行動確率のように分散している場合 推測することが難しい、もしくはこのアルゴリズムがそこをカバーできていません。