<?xml version='1.0' encoding='Shift_JIS' ?>
<doc xml:lang='ja'>
	<head>
	</head>
	<body>
		<subsection title="Typeを設計する">
			<p>
				まず、Typeを設計します。
				Agent、Goods、RelationのTypeに関しては、分析フェーズで作成した図をそのままTypeとして実装できるようにすればいいだけです。</p>
			<figure id="fig:lastyear1" src="image/d_types"
				title="タイプのクラス図（Agent、Goods、Relation）" />
		</subsection>
		<subsection title="Informationを設計する">
			<p>
				どのようなInformationがあり、それらがどのような振る舞いをするかを、まず分析フェーズからおさらいしましょう。</p>
			<dl>
				<dt>調査依頼</dt>
				<dd>エージェントから環境エージェントへ送られる。調査対象の情報を含む（ここでは自身と視界）</dd>
				<dt>調査結果</dt>
				<dd>環境エージェントからエージェントへ送られる。該当するセルと砂糖の情報のセットである</dd>
				<dt>砂糖要求</dt>
				<dd>エージェントから環境エージェントへの砂糖の要求。対象のセル</dd>
				<dt>セルと砂糖の関連情報</dt>
				<dd>環境エージェントだけが持つ情報。セルとそのセル上の砂糖の量を結びつける</dd>
			</dl>
			<p>そして、あといくつかエージェントの属性や、シュガースケープの属性として含まれるInformationもあります。</p>
			<dl>
				<dt>代謝率</dt>
				<dd>１ターンにおけるエージェントの砂糖の消費量</dd>
				<dt>再生率</dt>
				<dd>各セルの砂糖の回復量</dd>
				<dt>視力</dt>
				<dd>エージェントの視界の広さ</dd>
			</dl>
			<p>
				これらの情報を設計するためにいくつか利用できる部品が基礎モデルフレームワークに存在しています。
				CellパッケージとIntegerInformationです。</p>
			<subsubsection title="Cellパッケージ">
				<p>
					CellパッケージはBESPと同時に配布される、2次元セルのSpaceを実現するためのパッケージです。
					このパッケージを利用することで、エージェントのセルへの配置を行うことが出来ます。
					この配置はCellクラスとAgentクラスの関連付けによって行われ、この関連付けとそれを利用するためのインターフェースをCellSpaceクラスが持っています。</p>
				<p>
					このCellパッケージを利用することで、シュガースケープにエージェントが配置されること、そしてエージェントが移動することなどが表現できます。
					ただし、あるセルに存在する砂糖の量を管理するためにはCellパッケージだけでは足りません。
					そこで、Cellと砂糖の量を関連付けるSSFieldInformationクラスを作成します。</p>
				<p>
					Cellパッケージはもう一つ便利な部品を提供しています。
					それはScopeインターフェースです。
					Scopeインターフェースはこのシュガースケープでエージェントが行うように、あるエージェントの周囲を探索するためのデータ型を提供します。
					ScopeクラスはCellSpaceクラスによって相対座標から絶対座標に変換され、調査を行う処理を容易にしています。
					さらにCellパッケージではこのScopeの実装クラスとしてMooreScopeクラスを提供しています。
					これはムーア近傍によって視界を表現するクラスです。
					これをそのままシュガースケープにおけるエージェントの視界として利用することができます。</p>
			</subsubsection>
			<subsubsection title="IntegerInformation">
				<p>
					IntegerInformationはInformationを実装したクラスです。
					IntegerInformationの情報としての内容は単一の整数でこれを取得・設定するインターフェースをもちます。
					Informationが単なる整数であるとき、このクラスをそのまま利用することができます。
					ただし、クラスは同一なので利用するときは別途InformationTypeを定義する必要があります。</p>
				<p>
					エージェントとシュガースケープの属性をこのIntegerInformationを利用して表現します。
					また、これに併せていくつかのInformationTypeも設計します。</p>
			</subsubsection>
			<p>これらを踏まえ、最終的に出来たInformationが以下のクラス図です。</p>
			<subsubsection title="環境エージェント関連のInformation">
				<figure id="fig:lastyear1" src="image/d_envInfo"
					title="Informationのクラス図(環境エージェント関連)" />
				<p>
					環境エージェントに関連したInformationのクラス図です。
					Cellクラスに関連付けられたSSFieldInformationクラスを用意します。
					あとは、エージェントからの調査結果としてSearchResultInformationを用意します。
					これは有限個のSSCellInformationクラスを持ちます。
					このCellInformationがセルと砂糖を持つことによってエージェントの調査依頼に応じたセル（＋砂糖）の集合を返します。
					あとは砂糖の再生率としてIntegerInformationをクラスとしてインスタンス化したｒecoverを用意します。</p>
			</subsubsection>
			<subsubsection title="エージェント関連のInformation">
				<figure id="fig:lastyear1" src="image/d_agentInfo"
					title="Informationのクラス図(エージェント関連)" />
				<p>
					エージェントに関連したInformationのクラス図です。
					CellパッケージのScope、MooreScopeクラスをそのままエージェントの視界として保持します(この生成には視力属性を利用しますが、ここでは割愛しました)。
					このScopeとAgentそのものをセットにすればSearchRequestInformationができますね。
					あとは代謝率をIntegerInformationで実現したmetaboを加えればエージェント関連のInformationはこれが全てです。</p>
			</subsubsection>
			<subsubsection title="InformationType">
				<p>
					あとは、IntegerInformationを扱うためのTypeを追加します。
					実際に使われるInformationTypeはこれだけではないのですが、他のInformationTypeはクラス名と同じInformationTypeなので図には含めません。</p>
				<figure id="fig:lastyear1" src="image/d_infoTypes"
					title="InformationType" />
			</subsubsection>
		</subsection>
		<subsection title="Behaviorを設計する">
			<p>
				次に行動を設計します。
				分析フェーズのシーケンス図を設計用に書き換えて見ましょう。
				ポイントはBESPとTimeEventの追加です（あとは命名規則に従った英語化だけです）。</p>
			<figure id="fig:lastyear1" src="image/d_seq" title="設計フェーズのシーケンス図"
				/>
			<p>
				TimeEventによって砂糖が追加されること、エージェントが周辺の調査を開始することを設計しています。
				今まで触れていなかったのですが、エージェントが砂糖を取得する方法として、環境エージェントにセルそのものを送ってそれを環境エージェントが解決して砂糖を送ることにしましょう。</p>
			<p>
				さて、ここまでできればコンポーネントビルダーを使ってBehaviorを設計することができそうです。
				順番にSSAgentBasicBehavior、SearchBehavior、SendSugarBehavior、AddSugarBehaviorの状態遷移図を示します。</p>
			<figure id="fig:lastyear1" src="image/d_ssagentbasicb"
				title="SSAgentBasicBehavior" />
			<figure id="fig:lastyear1" src="image/d_searchb"
				title="SearchBehavior" />
			<figure id="fig:lastyear1" src="image/d_sendsugarb"
				title="SendSugarBehavior" />
			<figure id="fig:lastyear1" src="image/d_addsugarb"
				title="AddSugarBehavior" />
		</subsection>
	</body>
</doc>
