ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

個体群動態論に特化したマルチエージェントシミュレーション基盤 Re:Mobidyc
小田 朋宏
株式会社 SRA
tomohiro@sra.co.jp

Gael Dur静岡大学
dur.gael@shizuoka.ac.jp

要旨ている．例えば，LOGO は手続き型のプログラミング言語であり，タートルの移動のための専用の命令文や，変Re:Mobidyc は生物の個体群動態に特化したマルチエー

数への代入文や，条件分岐やループなどの制御構造や，ジェントシミュレーション (MAS) 基盤である．科学研究

手続き呼び出しにより，タートルの動きを定義する．プの道具としての要請に応えるために，Re:Mobidyc ではス

ログラミング言語のこれらの機能は，チューリング完全

ケーラビリティ，再現性，検証可能性を重視してモデリなプログラムを構成するものであり， 計算の表現の強ング言語，モデリング環境および実行系を設計した．本

力さとともに，ループの停止性やプログラムの副作用な論文では，Re:Mobidyc のモデリング言語，モデリング環

ど，ソフトウェア研究がこれまで取り組んできた多くの境および実行系について，個体群動態研究からの要求に困難をもたらす．また，環境学や生物学で扱う個体の機基づいた設計指針および実現について紹介し議論する．

能要素は必ずしも汎用プログラミング言語の機能要素と対応していない．例えば，LOGO のタートルを生物の個体のメタファーとして利用する場合，生物の変態による個体の行動の変容をシミュレーションに反映させるため

1. 背景には，ユーザプログラムによりその行動の変容の仕組みを実装する必要がある．IBM を構成するためには，プロAgent-Based Modelling and Simulation (ABMS) は，1990 年代以降の環境学研究に広く応用され，様々な構文および意味論を持つシミュレーションツールが開発さ

グラミング言語と環境学，生物学の間のギャップを埋めれてきた．特に，個体の行動をエージェントとしてモデ

シミュレーション結果が，他の科学者に理解され，そのリングする個体ベースモデル (Individual Based Model,

特性が検証され，再現可能であることが望ましい．本研IBM) は，個体差の表現や，各個体の一生の中での行動の変化（生活史段階），環境への適応と進化，個体から環境への影響などを表現するための柔軟性を持つことか

究では，生物学研究における個体群動態を ABMS の適用

ら，環境学や生物学の研究に用いられてきた [1]．現在でトシミュレーション (Multi-Agent Simulation, MAS) 環境

DSL) として設計し実現した．DSL を設計実現する上で，プログラミング言語の構文定義や意味定義，実行系の設計や実装については多くの技術が確立されている．本研が開発され，環境学や生物学の多様な領域の ABMS に

究では，特に汎用のプログラミング言語および処理系に利用されている．

はない，ABMS に特化した要求に注目して，モデリングる必要がある．

ABMS を科学研究に応用する場合，そのモデルおよび対象として，モデリング言語およびシミュレーション環
境を一種のドメイン特化言語 (Domain Specific Language,

も NetLogo [2] をはじめとする多様なマルチエージェン

ソフトウェア研究の視点からは，ABMS は LOGO を言語およびシミュレーション環境を設計・実装した．

はじめとするプログラミング言語の応用と見なすことが以後，第 2 節では，個体群動態の研究に利用されてきできる．それらのプログラミング言語は汎用のプログラ

た他の ABMS ツールを示し，本研究と比較する．第 3 節

ミング言語であり，プログラムの構成要素は生物学や環では，個体群動態のシミュレーションに求められる要求

境学の用語ではなく，プログラミングの用語で定義され

35

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)を議論し，第 4 節では本研究で開発しているシミュレー

ントの行動は基本的に Smalltalk のメソッドとして記述

ション環境 Re:Mobidyc で要求をどのように満たしたかされる．したがって，モデリングには Smalltalk プログラを説明する．第 5 節で Re:Mobidyc 上のシミュレーショ

ミングのスキルが要求される．Re:Mobidyc は，Cormas

ンの例を紹介し，第 6 節でまとめと今後の課題を示す．

と同じく Smalltalk 上に構築されているが，エージェン
トの行動を記述する DSL を外部 DSL として，構文や言2. 関連研究

語機能について個体群動体論特有の概念を取り入れている点が異なる．

2.1. NetLogo
2.3. Mobidyc
NetLogo [2] は Java で実装された LOGO ベースのマル
チエージェントモデリング言語であり，自然環境や社会

Mobidyc [3] は個体群動態のシミュレーションを目的での現象のモデリングに広く利用されている．NetLogoに Smalltalk 上に開発されたマルチエージェントモデリ

は移動可能なタートルと空間を格子状に分割したパッチ

ング環境であり，生活史段階を言語の基本要素としての，2 種類のエージェントを扱い，それぞれのエージェ表現可能なモデリング言語を備えている．Mobidyc でントを並行動作させる．各エージェントの動作は命令的

は，移動可能な個体を表す Animat，空間を格子状に分な手続きにより定義される．

割した Cell，時系列データの読み込みや記録をおこなう

NetLogo は個体群動態にも適用可能であるが，生活史ていないため，例えば各エージェントの生活史段階を属

NonLocatedAgent の 3 種類のエージェントでシミュレー
ションモデルを構成する．Animat の行動は，他の Animat
や Cell との相互干渉を行う Task のリストとして定義さ性として保持して，各手続きの中でその生活史段階に対れる．Eat や Move 等の多くの生物種の個体に共通したする条件分岐によって，各段階での振る舞いを記述する

行動が Task として組み込まれているほか，MathScript となどの工夫をする必要がある．また，各エージェントの呼ばれる DSL によってユーザ定義することも可能であ

行動の記述は命令型プログラミングそのものであり，モる．ユーザーは，シミュレーションに用いる生物種のそ

デリングにはプログラミング特有のスキルが要求される．

れぞれについて，卵，幼生，成体など複数の生活史段階

Re:Mobidyc は個体群動態のシミュレーションに特化し，を定義し，生活史段階ごとに Task のリストを定義する．

プログラミング特有のスキル要求を排除することを設計

Re:Mobidyc は Mobidyc の設計指針を受け継いで，個段階など個体群動態に必要な概念が言語機能に反映され指針としている点で異なる．

体群動態に必要な言語機能やモデリング環境を実現した
上で，スケーラビリティおよび再現性，検証可能性の向2.2. Cormas

上を図り設計された．

Cormas [4] は Smalltalk で実装されたマルチエージェン

3. 個体群動態シミュレーションに求められる特性

トモデリング言語であり，共有資源管理のための住民参加型の意思決定の支援を目的として設計された．シミュレーションによる理解共有を促進するために，Cormas の

本節では，現在おこなわれている個体群動態でのシシミュレーション環境は対話性および可視化を大きな特ミュレーションの利用状況から，個体群動態のためのシ徴として備えている．

ミュレーションに求められる特性を挙げる．

Cormas は，移動可能な社会的エージェント，および，

R1：生活史段階の表現
個体群動態において重要な概念が，生活史段階である．

空間を格子状に分割した空間的エージェント，さまざまな仲介を行う受動的エージェントの 3 種類のエージェン

生活史段階とは，個体の一生のなかで生態の変化を捉えトによりシミュレーションモデルを構成する．各種エーたもので，卵生の動物では大きく分けて卵，幼生，幼体，

ジェントは Smalltalk のサブクラスとして定義され，そ未成体，成体などの段階を持ち，種によってそれぞれよ

れぞれのエージェントの行動は Smalltalk ベースの内部

り細分化された段階を持つ．図 1 に動物性プランクトン

DSL により定義される．内部 DSL により統計関数など多くの機能が提供されるが，モデリングにおけるエージェの一種であるカイアシ類 Eurytemora affinis の生活史段

36

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

ングは，破壊代入や制御構造や再帰呼び出しなど，プロ
グラミング特有の概念を習得することが求められるため，その利用は最低限に留めることが望ましい．

R4：分析可能性，再現性
シミュレーションを仮説検証に用いる場合，シミュレー
ションするモデルが，検証対象である仮説に忠実である
ことが求められる．モデリング言語が LOGO 等の命令型言語である場合，個体の行動を変数への代入やループによる繰り返しによる手続きとして記述することになるが，その手続きが仮説を忠実にプログラム化したものであることを検証することは，一般に容易ではない．個体の行動を記述するモデリング言語は，数理的な分析に適図 1. 生活史段階の例

していることが求められる．シミュレーションを科学研
究で用いるため，シミュレーション上で発生した事象は，階を示す．卵から孵化してノープリウス幼生 (NI 〜NV I )同じモデル同じ初期条件から再現できることが望ましい．

の各生活史段階を脱皮により順に進み，NV I からコペポ

R5：スケーラビリティ
シミュレーションは一定の時間幅を決めた離散時間により，状態の更新を行う．筆者の 1 人はカイアシ類の個ディド幼生 CI に変態し，ふたたび脱皮により順に CIIから CV に脱皮し，CV では雌雄に分化する．
個体群動態のシミュレーションでは，大量の個体の行

体群動態の研究で Mobidyc 上のシミュレーションを行

動をモデリングしコンピュータ上でシミュレーションすなっている．これまでは，最長 5 年分のシミュレーショ

ることで，群れの個体数の分布や経時変化を予測する．

ンを 6 時間刻みで，すなわち 7,300 ステップを実行し，個体の行動特性は生活史段階により大きく異なるため，

最大 300,000 個体のシミュレーションを行なった．1 個個体の行動モデルは生物種ごとではなく，生活史段階ご

体あたり 64 ビットの数値データを格納する領域を 10 スとに定義される．生活史段階ごとに，個体の移動，捕食，ロット保持すると，300,000 個体を 7,300 ステップ実行

代謝，交配，生殖などの行動の定義に加え，次の生活史

すると，163G バイト強のデータ量になる．

段階への遷移（脱皮または変態）が定義される．

今後，シミュレーションによる個体群動態論研究を進

R2：個体および環境の相互作用
個体の行動をモデリングするために，個体と他の個体めるためには，より長いシミュレーション期間，より短および環境との相互作用を扱うことが必要である．例えンが求められることが予想される．Re:Mobidyc は，よば，動物の行動には，近接する餌を捕食するなど，他のり多くのステップ数や，より多くの個体数を求める要請

個体との間の相互作用として行動をモデリングする．まに応えることが期待されている．

い刻み幅，より多い個体数を対象にしたシミュレーショ

た，個体の行動は，水温，水の透明度，酸素濃度，二酸
化炭素濃度，餌など，位置に依存した局所的な環境が持

4. Re:Mobidyc の概要

つ量により影響を受けると同時に，個体が二酸化炭素を排出するなど環境に影響を与えることから，個体と局所

筆 者 ら は 現 在 ，Re:Mobidyc の 実 装 を 進 め て い る ．

的環境の間の相互作用を表現する必要がある．既存のシばれる小区画をエージェントとして扱い，個体をあらわ

Re:Mobidyc は Pharo Smalltalk 1 上に構築され，github
レポジトリ 2 上にオープンソースソフトウェアとして公開されている．開発はまだ完了していないが，既にいく

すエージェントとの間の相互作用が記述可能である．

つかの簡単なシミュレーションが実行可能になっている．

R3：プログラミングスキル要求の軽減

本節では，Re:Mobidyc の設計および実装にあたって基ミュレーション環境の多くでは，パッチまたはセルと呼個体群動態シミュレーションの目的は生物学や環境学準にした重要な指針を示す．

の研究であり，求められるプログラミング言語への習熟
1 https://pharo.org/

が可能な限り低いことが望ましい．命令的なプログラミ

2 https://github.com/tomooda/ReMobidyc/

37

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

4.1. モデリング言語

Goat i s Animat w i t h
blood sugar [ kcal ] .

Re:Mobidyc はマルチエージェントシミュレーション

Goat r e s p i r e namely l o s e where
my amount −> my b l o o d s u g a r
my l o s s −>min (my amount , 2000 [ k c a l / day ] ∗ Δ t i m e ) .

環境であり，シミュレーションモデルを構成する基本単位は，動物の個体を表す Animat，環境を格子状に分割した Cell，環境全体を表す World の 3 種類のエージェン

Goat move where
my h e a d i n g −> d i r e c t i o n neighbor ’ s g r a s s
my s p e e d −> 1 [km / day ] .

トである．各エージェントはその状態を特定するための属性と，取り得る行動を記述したタスクにより定義される．本論文では，エージェントの種類とインスタンスを

Goat g r a z e namely c o l l e c t where
my t h i n g −> my b l o o d s u g a r
here ’ s t h i n g −> here ’ s g r a s s
my g r e e d −> min (1 0 0 0 0 [ k c a l ]−my b l o o d s u g a r ,3 0 0 0 [ k c a l / day ] ∗ d e l t a time ,here ’ s g r a s s ) .

区別するために，後者を指す時には明示的にインスタン
スと呼ぶ．また，コンピュータ操作環境と，シミュレー
ションモデル中の空間を指す環境を区別するために，本論文ではコンピュータ操作環境をシミュレーション環境
またはモデリング環境と呼び，シミュレーションモデル

図 2. Animat 定義の例

中の個体の外界としての環境を単に環境と呼ぶ．

Animat は具体的な対象の種類ごとに定義される．⟨ R1：
生活史段階の表現 ⟩ として挙げた通り，個体群動態ではの計算式の中で次元の整合性の検査に使われる．属性の脱皮や変態によって生活史段階を遷移していくことが単位の宣言は，自然科学研究で用いられる単位を使って重要である．Re:Mobidyc ではそれぞれの種類の Animat

計算式の整合性を検査してモデルの誤りを発見することは，それぞれ 1 つの生活史段階を表現する．すなわち，

で，⟨R3: プログラミングスキル要求の軽減 ⟩ の実現に貢Re:Mobidyc では，1 つの個体は，その個体の誕生から献することを目的に導入した．また，計算式中の数値リ

死までのシミュレーション時刻を連続的にカバーし，かテラルや外部ファイルから読み込まれる数値データの単つ，同一シミュレーション時刻に重複しない，いくつか

位の違いによる誤りを防ぐことを目的に，数値リテラルの Animat のインスタンスを継いで接続したものとして

および外部ファイル中の数値データには単位を明示する表現される．図 1 のカイアシ類 Eurytemora affinis の雌ことを要求する．Re:Mobidyc 実行系は数値を全て国際の個体の場合には，Egg，N1〜N6，C1〜C4，C5f のそ単位系 (SI) に変換して計算を行う．属性値はメモリ中にれぞれのインスタンスを連結したものになる．

は SI に変換された値で保持され，属性宣言で与えられた単位に変換して表示する．

Cell は環境をグリッド状に分割した区画をあらわす．

図 2 の中で，エージェント Goat の属性は以下の部分

現在は矩形分割のみを実装しているが，六角形分割にも対応する予定である．Cell は 1 つのシミュレーションモ

で宣言されている．

デルに 1 種類のみ定義され，Cell という識別子で参照

Goat i s Animat w i t h
blood sugar [ kcal ] .

される．World は環境全体をあらわすエージェントであり，Cell と同様に，1 つのシミュレーションモデルに 1

属性 blood sugar が単位 kcal 付きで宣言されている

種類のみ定義され，World として参照される．

が，Animat は必ず空間中の位置を持つため，x 座標を表

図 2 に Animat の定義例を示す．Goat は，その属性

す x [m] および y 座標を表す y [m] が暗黙に宣言さとして x，y，blood sugar，タスクとして respire，れている．したがって，エージェント Goat には x，y，

move，graze の 3 つを遂行する Animat として定義されている．ただし，x および y は Animat に暗黙に定義されている属性である．

blood sugar の 3 つの属性が宣言されている．Goatの各インスタンスは，x 属性および y 属性として x 座標

属性の定義

して血中に蓄えられたエネルギーを kcal と同次元の SIおよび y 座標をメートル単位で，blood sugar 属性とRe:Mobidyc では，各インスタンスが保持する属性は単位であるジュール単位で格納する．

数値のみを扱い，全ての属性宣言に単位を宣言すること

一般にマルチエージェントシミュレーションでの各エーを義務付けている．宣言された単位は後述のタスク定義

ジェントの属性値の更新には，非同期的な更新を行うも

38

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)のと同期的な更新を行うものがある．非同期的な更新で

t o move i s
my d / d t x ’ = c o s ( t h e t a ) ∗ r
my d / d t y ’ = s i n ( t h e t a ) ∗ r
wheret h e t a = my h e a d i n g
r = my s p e e d .

は，タスクの実行による属性値の更新は直ちに反映され，同一ステップでの他のエージェントあるいは他のタスクの実行に影響を与える．同期的な更新では，各エージェ
ントタスクによる属性値の変更は即座には反映されず，シミュレーション時刻の 1 ステップ終了時に全インスタ

図 3. タスク定義の例

ンスの全属性値が一斉に更新される．非同期的な更新は，
手続き型言語をベースにしたシミュレーション環境や分表 1. 属性値更新の左辺値の種類と構文
左辺値種別 構文

散環境でのシミュレーション環境に多くみられる方式で，属性値更新のオーバーヘッドが少なく効率的に処理でき更新値る利点がある一方，エージェントおよびタスクの実行順‘my’, 属性名, ‘ ’エージェント参照,‘ s’, 属性名, ‘

序によってシミュレーション結果が影響されるという欠差分値点を持つ．Re:Mobidyc では，⟨ R4：分析可能性，再現性 ⟩ を目的に，同期的更新を採用した．同期的更新と擬’‘my delta’, 属性名, ‘ ’‘my Δ’, 属性名, ‘”

似乱数のシードの管理によって，Re:Mobidyc では任意

エージェント参照,‘ s delta’, 属性名, ‘のシミュレーション時刻での状態から次の状態の再現性

エージェント参照,‘ s Δ’, 属性名, ‘
微分値を確保している．タスクを実行するインスタンスの順序‘my d/dt’, 属性名, ‘ ’エージェント参照,‘ s d/dt’, 属性名, ‘

やタスクの順序に関わらず，同じ属性に対する同じ値へ’’’の更新が再現される．また，各シミュレーション時刻での全てのインスタンスの属性の値は上書きされずに記録

行目では，タスク名 move が宣言され，2 行目と 3 行目

される．したがって，Re:Mobidyc 上でのシミュレーショ

で，それぞれ属性値 x および y の更新が定義されていンは，初期状態から開始したそれぞれのシミュレーショ

る．4 行目は以降が局所定義であることを示し，5 行目

ン時刻における全属性値が記録され，かつ，再現されると 6 行目でそれぞれ局所定数 theta および r が定義さことから，シミュレーションモデル，初期状態，シミュれている．
属性値の更新定義には，(1) 値の直接代入，(2) 値の差

レーション結果の間の整合性を各シミュレーション時刻ごとに検証することができる．

分値，(3) 値の微分値の 3 種類の定義がある．表 1 に 3 種

タスク定義

類の更新定義の左辺値をまとめる．いずれの形式でも，Re:Mobidyc では，⟨ R2：個体および環境の相互作用

左辺値は属性値への参照と区別するために，末尾に ′ が⟩ はタスクにより表現する．すなわち，各エージェントの移動，捕食，排泄，代謝，生殖などの行動は，タスク付けられる．右辺値には，左辺値と互換性のある単位をとして定義される．タスクは，タスクを実行するインス

式を示す．

持つ任意の数式を記述することができる．表 2 に主な数

タンスを含む 1 つ以上のインスタンスの属性を変化させタスクによる属性値の変更は，直ちには反映されず，ることで，エージェント間の相互作用を定義する．⟨R3：

各シミュレーション時刻での処理の最後に一括して同期

プログラミングスキル要求の軽減 ⟩ および ⟨ R4：分析可的に行われる．値の直接代入は，右辺を評価した結果得能性，再現性 ⟩ のために，タスクによる属性値の変更は，られた数値を次のシミュレーション時刻におけるそのイ

各シミュレーション時刻での処理の最後に一括して同期

ンスタンスの属性の値になる．1 つのインスタンスの同的に行われる．各シミュレーション時刻において，それ一属性には，1 シミュレーション時刻につき 1 回しか直ぞれの属性の値は一定である．

接代入できない．値の差分値による更新定義は，右辺をタスクの定義は，タスク名，相手エージェント，事前評価した結果得られた数値を，次のシミュレーション時

条件，属性更新定義のリスト，局所定義のリストからな

刻におけるそのインスタンスの属性の値の増分とする．

る．ただし，相手エージェント，事前条件，局所定義は値の微分値による更新定義は右辺を評価した結果得られ省略可能である．図 3 に，標準ライブラリに組み込また数値とシミュレーション時刻の刻み幅の積を，次のシれているタスク move の定義のソースコードを示す．1

ミュレーション時刻におけるそのインスタンスの属性の

39

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

所定義の右辺値には，属性更新定義の右辺値と同様に，
表 2. 主な表現式の種類と構文
数式の種類 構文

数値リテラルや属性への参照を使った数式を記述する．

リテラル

数値, ‘[’, 単位, ‘]’

され，それぞれ，タスクを実行しているインスタンスの属性参照‘my’, 属性名
エージェント参照, ‘ s’, 属性名

heading 属性と speed 属性の値を取る．

差分参照‘my delta’, 属性名

Re:Mobidyc では，⟨R3: プログラミングスキル要求の軽減 ⟩ を目的として，ライブラリ化された抽象的なタス

図 3 の記述では，theta および r の 2 つの局所定義が置換によるタスクの適応‘my Δ’, 属性名
エージェント参照, ‘ s’ delta, 属性名
エージェント参照, ‘

クを，構文的置換により特化させることで，具体的なタs Δ’, 属性名

スクを定義する仕組みを実装した．図 2 の中で，エー

微分参照‘my d/dt’, 属性名
エージェント参照, ‘ s d/dt’, 属性名

ジェント Goat のタスクとして move が，以下の記述に

算術演算

数式 (‘+’ | ‘-’ | ‘*’ | ‘/’ | ‘ˆ’) 数式

して定義されている．

負数‘-’, 数式

関数適用

関数名, ‘(’, 数式, {‘,’, 数式 }, ‘)’

場合分け数式, ‘if’, 条件式, ‘,’,よって標準ライブラリの組み込みタスク move の特化とGoat move where
my h e a d i n g −> d i r e c t i o n neighbor ’ s g r a s s
my s p e e d −> 1 [km / day ] .

{ 数式, ‘if’, 条件式, ‘,’},数式

エージェント Goat のタスク move は，汎用の組
み込みタスク move の my heading を direction

擬似乱数‘uniform’, リテラル, ‘to’, リテラル

neighbor’s grass に，my speed を 1[km/day]方向‘direction’, エージェント参照に置き換えたものとして定義される．すなわち，下記の属性勾配‘direction neighbor s’, Cell 属性名

タスク定義と等しい．

距離‘distance’, エージェント参照

時刻‘time’

刻み幅(‘Δ’ | ’delta’), ‘time’

t o move i s
my d / d t x ’ = c o s ( t h e t a ) ∗ r
my d / d t y ’ = s i n ( t h e t a ) ∗ r
wheret h e t a = d i r e c t i o n neighbor ’ s g r a s s
r = 1 [km / day ] .

値の増分とする．差分値による更新定義および微分値にこ こ で ，direction neighbor’s grass

よる更新定義は，1 つのインスタンスの同一属性に 1 シ

はRe:Mobidyc の組み込み命令で，実行するエージェン
トが位置している Cell インスタンスの周辺の，属性

ミュレーション時刻につき複数回の更新定義することができる．シミュレーション時刻 t から t + 1 に移行する

grass の勾配の方向を返す．したがって，このタスク
は，インスタンスを Cell の grass 属性の値がより大きな方向に向けて移動させる．移動量は，1 日かけて時，インスタンス i の属性値 pi は以下の漸化式に従って更新される．

pi(t+1) =1km 移動する速度であり，仮にシミュレーション時刻の刻み幅が 6 時間の場合，1 ステップあたり 250[m] 移pi′(t) + Σjk (∆pi′jk (t) ) + Σjk (d/dt pi′jk (t) ∗ Δ time)
ただし，pi(t+1) は時刻 t + 1 におけるインスタンス i の動させる．

属性 p の値である．pi′(t) は，時刻 t にインスタンス i の置換によりタスクを特化させる時，特化によりタ属性 p への直接代入が行われた場合にはその値，行われスク名をより具体的な名前が適切になることがある．

なかった場合には時刻 t における当該属性の値とする．

Re:Mobidyc では，置換対象となるタスク名に続いてnamely 句により新しいタスク名を宣言することがで

また，∆pi′jk (t) は時刻 t に実行されたインスタンス j の
タスク k による差分更新の右辺値，d/dtpi′jk (t) ) は時刻

きる．図 2 の Goat エージェントの定義では，respiret に実行されたインスタンス j のタスク k による微分更新の右辺値，∆time はシミュレーション時刻の刻み幅とする．

タスクを以下のように lose タスクから特化させている．
Goat r e s p i r e namely l o s e where
my amount −> my b l o o d s u g a r
my l o s s −>キーワード where 以下では，局所定義を列挙する．局

40

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

中央の水平線より上の 4 つのメモリイメージは，主my Δp3' = max(my Δp1, my p2)
readanimat1 animat2
メモリ
アロケーション p1 p2 p3 p1 p2 p3

記憶上に保持された，現在実行中のシミュレーション時
write

刻における各属性値の読み出しや更新のための領域である．最上段の現在値とラベルが付けられたメモリイメー
ジは，現在シミュレーションしている時刻での各属性の現在値値を格納している．2 段目の差分値とラベルが付けられ

差分値
主記憶

たメモリイメージは，現在シミュレーションしている時
刻での各属性の，前のシミュレーション時刻での値から次の値の差分値を格納している．これら 2 つのメモリイメージ

次の差分値

は，インタプリタがタスクの属性更新定義の右辺値を計算するために利用され，インタプリタからは read-onlyアドレスである．例えば，このアドレス空間上に，2 つのインス
二次記憶

タンス animat1 と animat2 について，それぞれ属性
数分の連続領域がアロケートされ，それぞれ 3 つの属性

t-1

p1，p2，p3 を持っていることを仮定する．ここで，イt

ンタプリタがインスタンス animat1 のタスクとして属t+1

性地更新定義 my Δ p3’ = max(my Δ p1, my p2)を評価実行する時，まずは右辺値を計算する．my Δ p1

シミュレーション時刻の評価実行では，上から 2 番目の差分値のメモリイメー
ジから，インスタンス animat1 の属性 p1 がアロケー
トされている左から 1 番目のスロットの値を読み込む．

図 4. 時系列メモリモデルの概要

続いて，my p2 の評価実行では，上から 1 番目の現在
min (my amount , 2000 [ k c a l / day ] ∗ Δ t i m e ) .

値のメモリイメージから，インスタンス animat1 の属性 p2 がアロケートされている左から 2 番目のスロットの値を読み込む．2 つの値のうち，より大きな値が右辺4.2. 時系列数値データに特化したメモリモデル

値の値となる．
属性更新定義の左辺値への更新には，3 段目と 4 段目

Cormas 等の汎用プログラミング言語をベースにしたMAS 環境の多くは，ユーザが記録する属性を指定して，ファイル等にデータを出力する機能を持つ．それらののメモリイメージが使われる．3 段目と 4 段目のメモリ
イメージはそれぞれ，直接値による属性更新定義での更MAS 環境では，各インスタンスはヒープメモリ上にア
ロケートされ，シミュレーション時刻における属性値を新値と差分値および微分値による属性更新定義での更メモリ上に持つ．Re:Mobidyc は，⟨ R4：分析可能性，再タがインスタンス animat1 のタスク中の my Δ p3’

現性 ⟩ のために，ユーザが指定した属性だけでなく，初= max(my Δ p1, my p2) を評価実行する場合，4 段

期状態からの各シミュレーション時刻における全ての属目の次の差分値とラベル付けられたメモリイメージの，性値を記録する．全ての属性値の記録は Re:Mobidyc のanimat1 の p3 がアロケートされた左から 3 番目のス

設計の基盤である，時系列メモリモデルが行う．

ロットに，右辺値の評価結果の数値を加算して上書き新値を保存するための領域である．例えば，インタプリ

する．

図 4 に時系列メモリモデルの概要を示す．いくつかの，
水平方向に区分けされた横長の矩形が並んでいる．これ

中央の水平線より下のメモリイメージは，二次記憶にらの矩形はメモリイメージを表しており，複数のメモリ確保された，各シミュレーション時刻での全属性値を保イメージが 1 つのアドレス空間上にオーバーレイされる存するメモリイメージである．シミュレーション開始時

形で統合されている．このメモリモデルでのアドレス空には，まず，初期状態 (t = 0) でのメモリイメージが初間は，この横長の矩形を水平方向に区分けしたスロット期化される．各シミュレーション時刻 (t) の処理の開始の整数インデックスである．

時と終了時に，時系列メモリモデルはインタプリタを利

41

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

用せずに主記憶上の 4 つのメモリイメージの更新処理を

C e l l withgrass [ kcal ] .

行う．この更新処理は，インタプリタとは独立して，時系列メモリモデルが内部処理として行う．

C e l l g r o w g r a s s namely g a i n u p t o where
my t h i n g −> here ’ s g r a s s
my amount −> 2000 [ k c a l / day Δ ] ∗ t i m e
my maximum −> 1000000 [ k c a l ] .

シミュレーション時刻 (t) の処理の開始時の更新処理
として，時系列メモリモデルは主記憶中の現在値，差分値，次の値，次の差分値の 4 つのメモリイメージを初期化する．初期化には，まずその時刻でのメモリイメージ

図 5. Cell 定義の例

を現在値メモリイメージと次の値メモリイメージに転送
し，前時刻でのメモリイメージとの差分を差分値メモリ

る．山羊は，牧草地の中をより豊かな牧草地へ移動しなイメージの全スロットに書き込む．また，次の差分値メ

がら，牧草を食べて，牧草の栄養価を血中糖という形でモリイメージの全スロットを 0 に初期化する．以上の初エネルギーを獲得する．ただし，山羊はその代謝活動に期化により，タスクの評価実行に必要な主記憶上のメモよりエネルギーを失う．すなわち，牧草地と山羊が持続

リイメージが準備され，インタプリタは各インスタンス

可能なエネルギー系を構成するためには，太陽から牧草

での各タスクを評価実行する．評価実行により，次の値

地に供給されたエネルギーと代謝がバランスする必要がメモリイメージと次の差分値メモリイメージが更新されあり，その間のバッファとなるのが牧草の栄養価と血中る．シミュレーション時刻 (t) の処理の終了時の更新処

糖である．

理として，時系列メモリモデルは，次の値メモリイメー

牧草地と山羊のモデルでは，2 種類のエージェントをジの各スロットと，対応する次の差分値メモリイメージ定義する．牧草地の小区画を表す Cell と山羊の個体をのスロットの和を，二次記憶上のシミュレーション時刻

表す Goat である．このモデルでの Cell の定義を図 5

t + 1 のメモリイメージに格納する．

に示す．Goat の定義は図 2 で示された通りである．

インタプリタは時系列メモリモデルを通して主記憶

Cell のタスク grow grass は，太陽から供給された

上の 4 つのメモリスロットに対してのみ読み出しと書エネルギーを牧草の栄養価に変換する相互作用を表す．

き込みを行い，二次記憶上の各シミュレーション時刻でgrow grass は，当該区画の牧草の量を毎日 2000kcalのメモリイメージを扱う必要はない．この機構により，のペースで最大 1000000kcal まで成長させる．このタス

Re:Mobidyc は ⟨R5：スケーラビリティ⟩ について，シミュク定義でベースにしている組み込みタスク grain upto

レーション時刻に関するスケーラビリティを確保していは，インスタンスの 1 つの属性値を，上限値付きで一定る．また，時系列メモリモデルはファイルシステムなど量増加させるための抽象タスクであり，my thing，my

二次記憶の種類によって，インタプリタに対して互換性

amount，my maximum の 3 つの参照を具体化するこを確保した複数の実装が可能である．現在はメインメモとで，牧草の栄養価を獲得する具体的なタスクを定義す

リに保存するものとファイルシステム上に保存するもの

る．この grow grass タスクを定義している GUI のスが実装されている．今後，DBMS などに向けた時系列メクリーンショットを図 6 に示す．タスク定義 GUI は上段

モリモデルを実装していく予定である．

と下段に分かれており，上段でタスクの原型となる既存の抽象タスクを選択し，下段でその抽象タスクに対する

5. 例題：牧草地と山羊置換操作によって，特化したタスクを定義する．

Goat のタスクも同様にして定義することができる．
Re:Mobidyc は現在も開発が続けられているが，現時点で簡単なモデルを構築しシミュレーションを実行することができる．本節では，動物と環境の相互作用を表現し

特に，タスク graze は，Cell との相互作用によって，た簡単な例として，牧草地と山羊のモデルを Re:Mobidyc

いる．collect は Animat が位置する Cell から，ある上で実行する例を紹介する．

量を獲得し，Cell から同量を減少させる抽象タスクで牧草の栄養価を山羊の血中糖に変換するタスクであるが，これは組み込みタスクである collect をベースにして牧草地と山羊は，エネルギーの供給と消費のバランスある．Re:Mobidyc では，同一インスタンス内での量のを再現するモデルである．牧草地は太陽からのエネル

移動，インスタンス間での量の移動などを，抽象タスク

ギーを，光合成により牧草の栄養価に変換して蓄積すとして定義して，標準ライブラリの中で提供している．

42

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

図 6. タスク定義 GUI のスクリーンショット

図 7. シミュレーション条件設定 GUI のスクリーンショット

図 8. シミュレーション環境のスクリーンショット

43

SEA

ソフトウェア・シンポジウム 2021 in 大分 (オンライン開催)

ユーザーはこれらの基礎的な抽象タスクを利用して，さ追加実装すべき機能として，研究チームによるモデリン

まざまなエージェント間の相互作用を表現することがで

グおよびシミュレーションを想定した，ネットワーク機

きる．

能が挙げられる．1 つは，マルチユーザに対応したバー

図 6 の上段左側の Repositories とあるリストには，
Built-in および Model の 2 項目があり，組み込みタスク

ジョン管理機能付きのモデルレポジトリである．シミュのレポジトリを表す Built-in が選択されている．上段中の定義，抽象タスクの定義，シミュレーション結果など，

央の Actions には，左側で選択されたレポジトリに格納研究チーム内での共有を可能にする機能が必要である．

されているタスクの一覧が表示され，特化のベースとな

もう 1 つは，複数のシミュレーション実行をモニタリン

る抽象タスクとして gain upto が選択されている．そグするサーバである．LAN 上に Re:Mobidyc の実行状況の定義のソースが上段右側に表示される．下段では，左を監視・表示するためのモニタリングサーバを設置し，側で 3 つの置換が定義され，その置換を適用した結果が複数のコンピュータ上で Re:Mobidyc が実行されている右側に表示される．

時，どのコンピュータ上でどのモデルのシミュレーショ

レーションモデル全体だけでなく，個別のエージェント

シミュレーションの期間やセル分割，Animat の初期化ンが実行されているかを把握できるようにすることで，について設定する GUI のスクリーンショットを図 7 に示研究チームのメンバーがコンピュータ資源を有効に利用

す．during で始まる行で，シミュレーション期間を単位できるようにする予定である．

付きで指定されている．ここでは単位として day が使わ

参考文献

れているが，hour，second など他の時間単位を選択することもできる．Cell は 5km 四方の矩形が 10*10 個の計 100 個設定され，その属性 grass の初期値を 0kcal
から 1000000kcal までの一様分布から設定する．また，[1] Sameera Abar, et al. ”Agent Based Modelling and Simulation tools: A review of the state-of-art software”,

エージェント Goat のインスタンスを 100 個，初期状態

Computer Science Review, vol 24, pp. 13-33, 2017

として生成し，その属性 blood sugar を 500kcal から[2] Seth Tisue and Uri Wilensky. ”Netlogo: A simple environment for modeling complexity”, Proceedings of

1000kcal の一様分布から設定する．最上段の run ボタン
を押すと，図 8 にあるように時間経過とともにモデルの

the 5th International Conference on Complex Systems(ICCS’04), pp. 16-21, 2004.

状況が可視化される．

6. まとめと今後の展望[3] Vincent Ginot and Christophe Le Page. ”Mobidyc, ageneric multi-agents simulator for modeling populations dynamic”, Proceedings of the 11th International

筆者らは，個体群動態のシミュレーションを目的としたマルチエージェントシミュレーション環境 Re:Mobidyc

Conference on Industrial and Engineering Applicationsof Artificial In Telligence and Expert Systems: Tasksについて，個体群動態の科学的モデリングに求められる特性を起点として，モデリング言語および実行系を設計

and Methods in Applied Artificial Intelligence (IEA/AIE
1998), pp. 805-814, 1998.

し実装してきた．特に，シミュレーション環境の基礎となるモデリング言語では，生活史段階を言語機能に取り[4] Pierre Bommel, et al. ”Cormas: an agent-based simula-

入れることで，既存の汎用プログラミング言語をベース

tion platform for coupling human decisions with computerized dynamics”, Simulation and gaming in the net-にしたシミュレーション環境では直接的な表現が困難なモデルを，ユーザである環境学や生物学の研究者がそのwork society, Translational Systems Sciences, vol 9, pp.
387-410, 2016.

研究領域の語彙でモデリングすることを可能にした．また，その実行系の基礎となるメモリモデルでは，時系列の数値データに特化したメモリモデルを設計し実装する
ことで，シミュレーションの計算過程を検証可能な形で記録に残すことを実現した．

Re:Mobidyc の開発はまだ初期段階であり，これから

44

SEA