<?xml version='1.0' encoding='Shift_JIS' ?>
<doc xml:lang='ja'>
	<head>
		<title>Agent</title>
	</head>
	<body>
		<p>
			AgentはモデルにおいてWorldに配置されて主体性を持って動くオブジェクトとして設計されています。また、有限個のGoods、Information、Behavior、Relationを保持します。</p>
		<p>
			以下にAgentと関連クラスのクラス図を示し、インターフェースの解説を行います(ただし、Informationに関する機能はEntityの項で述べるため割愛します)。</p>
		<figure id="fig:lastyear1" src="image/agent" title="Agentクラス図" />
		<p>Agentの持つ機能は以下のとおりです。</p>
		<dl>
			<dt>TimeEventの受信</dt>
			<dd>
				時刻の経過を示すTimeEventをreceiveTimeEvent()で受信して所持するBehaviorに配布します。これによってBehaviorが稼動するためAgentが行動すると言えます。</dd>
			<dt>Behaviorの追加・削除・取得</dt>
			<dd>
				BehaviorTypeを指定してBehaviorを追加します。追加したBehaviorは自動的に開始状態になります。また、同じようにTypeを元にBehaviorを取得、削除するメソッドも存在しています。</dd>
			<dt>OpenChannelEventの受信</dt>
			<dd>
				経路の開設を求めるOpenChannelEventをreceiveOpenChannelEvent()で受信して経路開設を試みます。成功すれば、適切なBehaviorに対して開設されたChannelを返します。</dd>
			<dt>Goodsの追加・削除・調査</dt>
			<dd>
				Goodsを追加するAddGoods、GoodsTypeを元にGoodsを取り出すremoveGoods、GoodsTypeに該当するGoodsの量（Quantity）を調べるgetQuantityメソッドがあります。多重参照をなるべく抑制するためgetGoodsは存在していません。</dd>
			<dt>Relationの追加・削除・取得</dt>
			<dd>Relationの追加及びTypeによる検索と削除を行うことが出来ます。</dd>
		</dl>
		<p>それぞれのメソッドの詳細はAPIまたは実装リファレンスを参照してください。</p>
	</body>
</doc>
