ねむねむ


ゴーストに「睡眠」を与える試み。
これはつまり、人間が眠りを欲し眠るロジックを数値モデル化する試みに近いと思うわけですが。
ゴーストならではの要件として、「起動していない時間」がある、というのがありますね。


思いつくままに簡単にモデル化するならこんな感じでしょうか。

  • ゴーストは(理想状態で)8時間睡眠+16時間稼動、のリズムとする
  • 変数は、「睡眠欲」と「活性」と「連続稼動時間」
  • 「活性」の値域は100〜0、この値が0の場合ゴーストは「寝ている」
  • つついたり話したりすると活性は少し(1〜10くらい)上昇する
  • 「睡眠欲」の値域は100〜0
  • 「寝ている」状態では、「睡眠欲」は毎分100/(8*60)ずつ低下する
    • 「睡眠欲」が0になると「自然に目覚め」、「活性」が100になる
    • 睡眠中につついたりして活性を0以上にすると、「無理やり目覚める」
      • 活性は100−(現在の睡眠欲の値)となる
  • 「起きている」状態では
    • 「連続稼働時間」0〜14時間では、「睡眠欲」は上昇しない
    • 「連続稼動時間」14時間以上だと、「睡眠欲」は毎分(連続稼動時間−14)ずつ上昇(単位は時間、小数点を計算する)
      • この計算で大体16時間で睡眠欲が100に達します
    • また、毎分「活性」の値から「100−睡眠欲」*0.02を減算
      • この計算で大体16時間で活性が0になります
  • 「活性」が低い状態(0〜10とか)だと、意識朦朧、おねむ

ここまでで、「つついて無理やり起こしておく」「自然に眠くなる」
「無理やり起こすとまだねむい」「無理やり起きてるとリズムが崩れる」
といった辺りの動作が大雑把に実現できるかと。


あとは、起動してない時の扱いですが、

  • 終了時に「睡眠欲」「活性」「連続稼働時間」を保存しておく
  • 終了時刻〜起動時刻の間の分数を求め、その間刺激がなかったものとして上記の演算を適用

することによりシミュレートできるかな。


終了から起動まで1日以上開いた場合などは、リズムが戻ったものとして、
システム時刻にあわせて個々の変数をリセットするのも手ですかね。


大雑把に考えただけなのできちんと計算していません。
考慮抜けとかいっぱいありそう。