現在遊園地のシミュレーションを行っております。アトラクションの行列にどれだけ並んでいられるかの時間を「許容時間」と設定して実際にアトラクションの行列に並んだ時間との関係を調べ、満足度を計測しようとしています。 入場者ルールのプログラムのアトラクションでの行動でその計算を行っております。このままだと計算途中のものも出力されるのでUniverseルールのプログラムでの行動決定の際に(アトラクションを並んで体験した後アトラクション決定する)計算結果を出力しようとしています。 (以下から要望)
その際にどうやったら出力設定でグラフにできますか?できれば散布図で可視化したいと思っています。
また、ほかの設定で今回は得た満足度だけの測定ですが、どのアトラクションに並んでどの程度の満足度だったかも知りたく、設定したいです。
この2点お応えできる範囲で大丈夫なので、知識等をお持ちの方がいらっしゃいましたら、どうぞご教示ください。
入場者ルールのプログラム(一部抜粋)
Sub アトラクションでの行動() {
// 高速化のためにまとめて++
My.待ち時間 = My.待ち時間 + 1
My.滞在時間 = My.滞在時間 + 1
//満足度の更新
If My.待ち時間 <= My.許容待ち時間 Then
//My.アトラクション満足度(My.目標アトラクション.ID) += Log(My.許容待ち時間 - My.待ち時間 + 1) * 0.05
My.アトラクション満足度 = Log(My.許容待ち時間 - My.待ち時間 + 1) * 0.05
Else
//My.アトラクション満足度(My.目標アトラクション.ID) -= Log(My.待ち時間 - My.許容待ち時間 + 1) * 0.05
My.アトラクション満足度 = -Log(My.待ち時間 - My.許容待ち時間 + 1) * 0.05
End If
} Universeルールのプログラム(一部抜粋) Sub 行動決定(決定者2 as Agt ,tmpInt2 As Integer){
Dim r As Integer
Dim 総合効用値2(10) As Double
Dim maxアトラクション2ID As Integer
Dim max総合効用値2 As Double
maxアトラクション2ID =-1
max総合効用値2 = -2147483648
//満足度の更新
Universe.行列時間満足 = 決定者2.アトラクション満足度
For r = 0 To Universe.アトラクション数 -1
If 決定者2.情報フラグ == True Then
決定者2.混雑情報(r) = CountAgtSet(Universe.遊園地.アトラクション(r).待ち行列)
Else
決定者2.混雑情報(r) = 0
End If
総合効用値2(r) = 決定者2.アトラクション効用値(r) + 0.06* CDbl(決定者2.混雑情報(r))*(-1) +
-0.0025* (MeasureDistance(決定者2.X,決定者2.Y,Universe.遊園地.アトラクション(r).X,Universe.遊園地.アトラクション(r).Y,Universe.遊園地))
If 決定者2.未訪問フラグ(r) == True Then
If max総合効用値2 < 総合効用値2(r) Then
max総合効用値2 =総合効用値2(r)
maxアトラクション2ID = r
End If
End If
Next r
If maxアトラクション2ID <> -1 And 決定者2.満足度 < 決定者2.帰宅決定満足度 Then
決定者2.目標アトラクション = Universe.遊園地.アトラクション(maxアトラクション2ID)
決定者2.現在の状態 =1
Else
決定者2.現在の状態 = 3
End If
}
artisoc4では、散布図を出力できます。詳細はマニュアルの
2.4.3.5. 散布図出力設定
をご確認ください。
なお、やりたいことがやや複雑なので、artisoc4上ですべてを実現するよりは、
artisoc4ではエージェントの変数の値をcsvファイル出力して、
Excelやpythonを使ってグラフ作成した方が簡単だと思います。