<?xml version='1.0' encoding='Shift_JIS' ?>
<doc xml:lang='ja'>
	<head>
	</head>
	<body>
		<subsection title="シュガースケープに登場する事物">
			<subsubsection title="エージェントと行動の分析">
				<p>
					これまで述べてきた方法に従って、エージェントと行動の分析を行います。
					まず、セルを移動しながら砂糖を獲得するエージェントが存在することは明白ですね。
					そして、シュガースケープにはもうひとつ自動的に状態の変わる存在があります。
					各セルの砂糖の量です。</p>
				<p>
					シュガースケープモデルでは、各セルにおける砂糖が自動的に再生することは前章で述べました。
					しかし、基礎モデルにおいてはこの「自動的に砂糖を再生する」ということを実現するのは一工夫が必要です。
					なぜならば、自動的＝つまり、時刻の経過を示すTimeEventを受け取ることができるのはAgentだけだからです。</p>
				<p>このような基礎モデル上の定義に基づいて「自動的に再生する砂糖」を表現する方法はいくつかあります。</p>
				<dl>
					<dt>全セルにエージェントを置く</dt>
					<dd>シュガースケープの全てのセルに「セルエージェント」を配置し、
						再生及びエージェントへ砂糖を提供する行為を行わせる方法です。</dd>
					<dt>環境エージェントを置く</dt>
					<dd>
						全てのセルに置く代わりに全てのセルと砂糖の情報を管理する「環境エージェント」を用意する方法です。
						「環境エージェント」はセルのどこにも存在していませんが、エージェントを関係を持ち、砂糖の取引を行うことにします。</dd>
				</dl>
				<p>
					今回は後者の方法を採用することにしました。
					前者の方法でもいいのですが、後者の方がシンプルに実装できることと、前者ではエージェントの数が3000以上に達してしまうため、シミュレーションの負荷が高いと判断したためです。</p>
				<p>環境エージェントは以下のような役割を持つエージェントとして定義します。</p>
				<ul>
					<li>セルと砂糖を関連付ける情報をもち、セルを指定するとその場所の砂糖の量を返すことができる</li>
					<li>時刻の経過に合わせてセルの砂糖を再生させる</li>
				</ul>
				<p>このような分析過程を元に作成したエージェントと行動が以下のとおりです。</p>
				<figure id="fig:lastyear1" src="image/a_agent1"
					title="エージェントと行動のクラス図" />
			</subsubsection>
			<subsubsection title="関係">
				<p>それぞれやり取りを行うので、双方向の関係を定義してみます。</p>
				<figure id="fig:lastyear1" src="image/a_relation"
					title="関係のクラス図" />
			</subsubsection>
			<subsubsection title="財">
				<p>シュガースケープにおける財といえば、とりあえず砂糖があります。
					これも定義します。</p>
				<figure id="fig:lastyear1" src="image/a_goods" title="財のクラス図" />
			</subsubsection>
			<subsubsection title="情報">
				<p>
					情報に関しては、環境エージェントが持つセルと砂糖の情報などありそうですが、人工市場のところで判断したのと同様にエージェントの振る舞いを考えた後にもう一度考えることにしてみます。</p>
			</subsubsection>
		</subsection>
		<subsection title="振る舞いの分析">
			<p>さて、前段で定義した行動に基づき、そのやり取りを書いてみるといくつか問題が出てきました。</p>
			<figure id="fig:lastyear1" src="image/a_seq1" title="エージェント間のやりとり？"
				/>
			<p>問題と、その対応策について説明します。</p>
			<dl>
				<dt>エージェントの３つの行動の繋げ方</dt>
				<dd>
					エージェントの３つの行動ですが、分けるべきではないように感じられます。
					なぜならば、「砂糖探索行動」以外の２つの行動はそれぞれ前の行動に基づいて行われるためです。
					特に探索から移動に関しては別々の行動としてしまうとその行動間でデータの受け渡しを行わなければならないので面倒です。
					砂糖消費行動に関しては別でもいいかもしれませんが、調査→移動→獲得→消費という一連の流れでまとめる方がシンプルであるように思います。
					これらの行動は「エージェント基本行動」という名前でまとめてしまいましょう。</dd>
				<dt>環境エージェントの？な行動</dt>
				<dd>
					図を見て分かるとおり、環境エージェントの２つの役割が新たに発見されました。
					１つはエージェントの依頼を受けて砂糖の量を調査する行動と、同じくエージェントの依頼を受けて砂糖を返す行動です。
					そこで、これらを行動として新たに追加することにしました。
					環境エージェントのこれらの役割に順番はなく、同時に行われる可能性もありますね。</dd>
			</dl>
			<p>そして、新たに書き直した図が以下の図です。</p>
			<figure id="fig:lastyear1" src="image/a_seq2" title="エージェント間のやりとり○"
				/>
		</subsection>
		<subsection title="最終的に決定したエージェント、情報">
			<p>振る舞いの分析の結果、エージェントと行動は以下のように変更しました。</p>
			<figure id="fig:lastyear1" src="image/a_agent2"
				title="エージェントと行動のクラス図(改訂版)" />
			<p>
				書き直した振る舞いの図によると砂糖探索における調査についての情報のやり取りがあるようです。
				そして、砂糖をもらうための情報、環境エージェントが持つセルと砂糖の情報を定義します。
				これで情報も抽出できました。</p>
			<figure id="fig:lastyear1" src="image/a_info"
				title="シュガースケープにおける情報" />
		</subsection>
		<p>そしてここまで分析できたところで、設計フェーズに入っていきます。</p>
	</body>
</doc>
