<?xml version="1.0"?>
<knowledgebase>
	<!-- 
	some conditions when writing a knowledge base
	make sure it won't loop forever
	these rule is episodic that means that these rule won't have updated facts
	if it isn't stopping for new ones 
	-->
	<!-- 
	fact filled by the environment :
	- near-obstacle (nearest obstacle)
	- goal-reached
	- goal-in-left/goal-in-right
	- obstacle-in-left/obstacle-in-right 
	
	fact used by the environment :
	- move
	- turn-right
	- turn-left
	-->
	<initial-fact>
		<fact>goal-in-right</fact>
		<!-- <fact>goal-reached</fact> -->
	</initial-fact>
	<!-- 
	phase:
	- select behavior : goal seek, avoid obstacle 
	-->
	<rule name="behavior-select-avoid-obstacle" priority="100" desc="">
		<condition>
			<known>near-obstacle</known>
			<non>behavior-selected</non>
		</condition>
		<action>
			<assert>do-avoid-obstacle</assert>
			<assert>behavior-selected</assert>
		</action>
	</rule>
	<rule name="behavior-select-seek-goal" priority="90" desc="">
		<condition>
			<non>goal-reached</non>
			<non>behavior-selected</non>
		</condition>
		<action>
			<assert>do-goal-seek</assert>
			<assert>behavior-selected</assert>
		</action>
	</rule>
	<!-- 
	goal-seeking behavior
	-->
	<rule name="stop-when-goal-reached" priority="" desc="">
		<condition>
			<known>do-goal-seek</known>
			<known>goal-reached</known>
			<non>move-decided</non>
		</condition>
		<action>
			<assert>move-decided</assert>
			<retract>move</retract>
		</action>
	</rule>
	<rule name="move-when-goal-not-reached" priority="" desc="">
		<condition>
			<known>do-goal-seek</known>
			<non>goal-reached</non>
			<non>move-decided</non>
		</condition>
		<action>
			<assert>move-decided</assert>
			<assert>move</assert>
		</action>
	</rule>
	
	<rule name="turn-left-when-moving" priority="" desc="">
		<condition>
			<known>do-goal-seek</known>
			<known>move-decided</known>
			<known>moving</known>
			<non>turn-decided</non>
			<known>goal-in-left</known>
		</condition>
		<action>
			<assert>turn-left</assert>
			<assert>turn-decided</assert>
		</action>
	</rule>
	
	<rule name="turn-right-when-moving" priority="" desc="">
		<condition>
			<known>do-goal-seek</known>
			<known>move-decided</known>
			<known>move</known>
			<non>turn-decided</non>
			<known>goal-in-right</known>
		</condition>
		<action>
			<assert>turn-right</assert>
			<assert>turn-decided</assert>
		</action>
	</rule>
	<!-- 
	obstacle avoidance behavior
	-->
	<rule name="avoid-obstacle-ahead" priority="" desc="">
		<condition>
			<known>do-avoid-obstacle</known>
			<known>near-obstacle</known>
			<non>move-decided</non>
		</condition>
		<action>
			<assert>turn-avoid</assert>
			<assert>move-decided</assert>
		</action>
	</rule>
	<rule name="turn-right-when-stopping" priority="" desc="">
		<condition>
			<known>do-avoid-obstacle</known>
			<known>move-decided</known>
			<known>turn-avoid</known>
			<non>turn-decided</non>
			<known>obstacle-in-left</known>
		</condition>
		<action>
			<assert>turn-right</assert>
			<assert>turn-decided</assert>
		</action>
	</rule>
	<rule name="turn-left-when-stopping" priority="" desc="">
		<condition>
			<known>do-avoid-obstacle</known>
			<known>move-decided</known>
			<non>turn-decided</non>
			<known>obstacle-in-right</known>
		</condition>
		<action>
			<assert>turn-left</assert>
			<assert>turn-decided</assert>
		</action>
	</rule>
	<!-- rule template
	<rule name="rule-template" priority="" desc="">
		<condition></condition>
			<known>fact-name</known>
			<non>unknown-fact-name</non>
		<action>
			<assert>fact-name</assert>
			<retract>fact name</retract>
			<msg target="">fact-name</msg>
		</action>
	</rule>
	-->
</knowledgebase>