群像シミュレーター開発記 その1

大きな仕事がやっと落ち着いて、少し余裕が出てきた。

相変わらずGoを学んでいるけれど、ちまちまと作っているサービスでは、言語として踏み込んだ使い方が中々出てこない。 そこで、ずっと作りたかったものを題材として、Goの学習を進めることにした。

群像シミュレーター

中学生の頃、『フランケンシュタインの末裔たち』という佐倉統の著作で、人工生命の概念に出会った。 そこでライフゲームを知り、トマス・レイのTierraを知り、手書きでリンデンマイヤーのL-Systemの真似事をしたりした。 あれ以来人工生命という試みはずっと頭を離れない。 でも生命の探求としては、本質に迫っているように見えても、結局事例集に感じた。

少し後になって、高校生の頃 Memetics に出会った。 元々神話や文化史が興味の中心だったので、概念自体はとても魅力的だったけれど、ミームという単位がしっくりこなかった。 模倣や伝播は重要だけれど、模倣子として落とし込むことに無理を感じた。

こういう経験をしながら、もしも、生きたり殖えたり繋がったり創ったりする人間らしい個体が、寄り集まって蠢く様を眺められたら、それを自分で作り上げられたらと考えるようになっていった。

自分ではライフゲームboidの変種を書く程度で、群像シミュレーターは概念を弄くってばかりだった。 時々小さな小さな単位で試作してみたこともあるけれど、続かなかった。

少しずつだけれどGoを学んでいて、この言語が随分気に入ってきた。Gopherくんもかわいい。 ずっと作りたかったものと、やっとまともに学ぶ言語と、それぞれまともに取り組む気長な課題として、群像シミュレーターはちょうどいいなと考えた。

目指さないもの

多分、自分の作りたいものは既存しない。 けれど表面的に似ているものは沢山あってややこしいので、まずは目指さないものを洗い出す。

問題解決のためのシミュレーター

社会や集団で起こる問題の解決に、人間的個体を用いた群体を使ったシミュレーションは、色々と使われている。 例えばこの、歩きスマホシミュレーション。

全員歩きスマホin渋谷スクランブル交差点

何かの問題を取り扱いたいわけではなく、充分に複雑な個体が集まって起きる、訳の分からない創発が見たい。 削ぎ落とされたパラメーターとしての個体群では、面白くない。

自殺したり、寝ぼけたり、笑い転げたり、一日ぼけっとしたりする、そんなことも可能な個体を扱いたい。

よって、個体を可能な限り複雑に、実際の人間に近づけていく。

ロールプレイ

コンピューターゲーム、特にオープンワールドのものでは、知能を持って見える個体が多数登場するのが一般的になってきた。

例えばBethesdaのSkyrimでは、「Radiant A.I.」と呼ばれるAIシステムによって、リアリティある世界の住人たちを生み出しているという。

Radiant A.I. - The Elder Scrolls Wiki 日本語版 - ウィキア

しかしこうしたゲームに登場する人物たちは、魅力的な物語を演じる演者に過ぎない。 一見複雑に見えても、ロールは固定され、その範囲での複雑さがゲームプレイに揺らぎを与えているだけである。 勝手に新たな集団を形成して戦争をふっかけたり、鍛冶屋のおやじが食い物屋のねーちゃんと不倫したり、見知らぬ英雄がいつの間にか世界を救っていて手持ち無沙汰になったりしない。

これはその世界が、プレイヤーに一定の範囲のロールプレイを楽しんでもらうための舞台装置なのだから、当然の仕様である。 勝手に動かれて統制できない舞台では、用意された物語を語り進められない。 語っている間に勝手に魔王が倒されたのでは、語り部は黙るしかなくなる。 しかし作りたいものは、壮大な物語の舞台装置ではなく、勝手に物語を生む群体である。

よって、個体にロールを与えない。 個体は等しく群の一個体であり続ける。

あるべき社会

コンピューターゲームの中では、Simsというシリーズが最も自分の作りたいものに近いのかもしれない。

ザ・シムズ - ホーム - 公式サイト

複雑で、欲求と計画を持ち、交流し生きてゆく個体たちは、集団となって一定の創発を見せる。 しかし、そこに現れる社会とは、統制され固定されたものになっている。

Simsは、アバターたちに楽しく複雑な人生を歩ませるシミュレーションゲームである。 その社会は、より大きな社会を背景に置き、シビアな生存とは無縁の理想化されたものである。 Simsたちは、生きるために隣人を殺したりしない。ヤク中のポン引きに殴られながら街角に立ったり、安全な水を求めてさまよった挙句に行き倒れたりしない。 安全で、明るく、楽しい社会をどう生きるか、それを楽しむゲームだからだ。 しかし、用意された社会での群像を見たいわけじゃない。

よって、社会を規定しない。 社会は個体が作り出す。

仮まとめ

目指さないものを幾つか考えて、目指すものが少し見えた。

  • 人間を模した充分に複雑な個体
  • その個体群による自律的な社会の創出
  • 個体群が生きる世界

もう少し、具体例を考えてみる。

  • 将来に悲嘆し、残された者を思いつつ、自殺する個体
  • 取得可能な可食物がもたらす食文化の創出
  • 愛、関心、妬み、激情、虚脱、狂気
  • 生きるための絶え間ない営み

ほんの一部なのに、とてつもなく壮大だ。 これまで何度も考えてきたことではあるけれど、改めて書き出すと、やっぱり作りたいものが大きすぎると感じる。 それでも、これを目指すことそのものが愉しみであり、ついでにGoの学習も進むなら言うこと無い。

どこから始めるか

やはり、まずは個体を少しでもGoで取り扱う術を学ぼう。

試しに人間を少しだけ定義してみよう。

type Human struct {
  name string  //個体名
    age    int   //年齢
    water  int32 //水分量
  weight int32 //体重
}
func (h *Human) intake(f Food) {
  h.water += f.water
}

生涯かけても終わらないようなものに取り組むのだから、100回や200回、一から書き直すつもりでいたほうが良い。 拙くても少しずつ進めよう。