<?xml version='1.0' encoding='Shift_JIS' ?>
<doc xml:lang='ja'>
	<head>
	</head>
	<body>
		<p>
			シュガースケープとは、エージェントが生き延びるために摂取しなければならない一般化された食物資源の空間分布のことで、エージェントが食べる食物（砂糖）が配置された空間です。
			この空間に配置された複数のエージェントが砂糖を探索して移動し、砂糖を摂取しながら産まれたり、死んだりしていくモデルです。</p>
		<p>
			本章では、人工市場モデルに引き続き、このシュガースケープモデルの分析・設計・実装を解説します。
			シュガースケープをここで解説する理由は2点あります。
			１つは、シュガースケープでは2次元のセル空間を実現するためにCellパッケージを拡張して利用していますが、これを例にしてモデルコンポーネントの部品を利用する方法を学ぶことができます。
			もう１つは、シュガースケープモデルはフィールド上のエージェント、砂糖が視覚的に表現されるため、シミュレーション実行の際に起こる変化がわかりやすいからです。</p>
		<subsection title="シュガースケープのルール">
			<p>
				分析を開始する前に、今回実装するシュガースケープがどのようなルールを持っているかを定義します。
				前述したようにシュガースケープは世界に配置されたエージェントが砂糖を求めて世界を探索するモデルです。
				これに基づく基本ルールをシュガースケープの世界とエージェントにわけて定義します。</p>
			<subsubsection title="世界">
				<ul>
					<li>２次元格子、５０×５０のセル(Area, Location)で表現される</li>
					<li>開始時には４００体のエージェントが配置されている</li>
					<li>各セルには０から有限個の砂糖が配置されている</li>
					<li>時間経過はターン制で行われる</li>
					<li>１ターンで全てのエージェントは一回ずつ行動する</li>
					<li>各セルの砂糖は１ターンで０から有限個だけ再生する</li>
					<li>各セルに置かれる砂糖の最大量はそれぞれのセルで異なる</li>
				</ul>
			</subsubsection>
			<subsubsection title="エージェント">
				<ul>
					<li>エージェントは視力(整数）という属性を持つ。これは、砂糖を探索する範囲の広さである</li>
					<li>エージェントは０から有限個の砂糖を所持している</li>
					<li>エージェントは代謝量(整数）という属性を持つ。これは、エージェントが１ターンごとに消費する砂糖の量である</li>
				</ul>
				<p>また、エージェントは１ターンごとに以下の行動を行います。</p>
				<ol>
					<li>自分の周囲(視力に基づく広さ)を調査</li>
					<li>調査範囲内で最も砂糖の多い（かつ他のエージェントがいない）セルに移動</li>
					<li>移動したセルの砂糖を全て獲得する</li>
					<li>持っている砂糖から代謝量分の砂糖を消費する（消費できなければ死亡して世界から消える)</li>
				</ol>
				<p>
					砂糖の調査についてもう少し詳細に説明します。
					探索範囲は下図の例に示すように上下左右の４方向（斜めは含まれません）を眺めて、他のエージェントの存在していないセルの中で最も砂糖が多く、かつ近いセルを特定します。
					探索可能範囲は視力に依存します。</p>
				<figure id="fig:lastyear1" src="image/scopeexample" title="調査の例"
					/>
				<p>例では、視力３のエージェントが上下左右の各３セルを眺めて、最も砂糖が多く、かつ近いセルがある「左方向」を選択します。</p>
				<p>シュガースケープでは視界内のセルに移動するので、視力が高い＝移動範囲が広いということになります。</p>
			</subsubsection>
		</subsection>
		<p>
			分析フェーズに入る前にこのようにルールを定めておきます。
			シュガースケープにもっとルールを拡張（エージェントの老化・配合や季節変動など）することもできるのですが、ここは上記に示したようなルールで分析フェーズに入っていきます。</p>
	</body>
</doc>
