//-------------------------  InitializeFuzzyModule ----------------------------
//
//  set up some fuzzy variables and rules
//-----------------------------------------------------------------------------
void RocketLauncher::InitializeFuzzyModule()
{
  FuzzyVariable& DistToTarget = m_FuzzyModule.CreateFLV("DistToTarget");

  FzSet& Target_Close = DistToTarget.AddLeftShoulderSet("Target_Close",0,25,150);
  FzSet& Target_Medium = DistToTarget.AddTriangularSet("Target_Medium",25,150,300);
  FzSet& Target_Far = DistToTarget.AddRightShoulderSet("Target_Far",150,300,1000);

  FuzzyVariable& Desirability = m_FuzzyModule.CreateFLV("Desirability"); 
  FzSet& VeryDesirable = Desirability.AddRightShoulderSet("VeryDesirable", 50, 75, 100);
  FzSet& Desirable = Desirability.AddTriangularSet("Desirable", 25, 50, 75);
  FzSet& Undesirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50);

  FuzzyVariable& AmmoStatus = m_FuzzyModule.CreateFLV("AmmoStatus");
  FzSet& Ammo_Loads = AmmoStatus.AddRightShoulderSet("Ammo_Loads", 10, 30, 100);
  FzSet& Ammo_Okay = AmmoStatus.AddTriangularSet("Ammo_Okay", 0, 10, 30);
  FzSet& Ammo_Low = AmmoStatus.AddTriangularSet("Ammo_Low", 0, 0, 10);


  m_FuzzyModule.AddRule(FzAND(Target_Close, Ammo_Loads), Undesirable);
  m_FuzzyModule.AddRule(FzAND(Target_Close, Ammo_Okay), Undesirable);
  m_FuzzyModule.AddRule(FzAND(Target_Close, Ammo_Low), Undesirable);

  m_FuzzyModule.AddRule(FzAND(Target_Medium, Ammo_Loads), VeryDesirable);
  m_FuzzyModule.AddRule(FzAND(Target_Medium, Ammo_Okay), VeryDesirable);
  m_FuzzyModule.AddRule(FzAND(Target_Medium, Ammo_Low), Desirable);

  m_FuzzyModule.AddRule(FzAND(Target_Far, Ammo_Loads), Desirable);
  m_FuzzyModule.AddRule(FzAND(Target_Far, Ammo_Okay), Undesirable);
  m_FuzzyModule.AddRule(FzAND(Target_Far, Ammo_Low), Undesirable);
}
Ejemplo n.º 2
0
//-------------------------  InitializeFuzzyModule ----------------------------
//
//  set up some fuzzy variables and rules
//-----------------------------------------------------------------------------
void Raven_WeaponSystem::InitializeFuzzyModule()
{
	/* Fuzzy Variables */
	FuzzyVariable& Deviation = m_FuzzyModule.CreateFLV("Deviation");
	FuzzyVariable& DistToTarget = m_FuzzyModule.CreateFLV("DistToTarget");
	FuzzyVariable& TargetVelocity = m_FuzzyModule.CreateFLV("TargetVelocity");
	FuzzyVariable& TargetVisiblePeriod = m_FuzzyModule.CreateFLV("TargetVisiblePeriod");

	/* Fuzzy Sets */
	FzSet& Deviation_Small = DistToTarget.AddLeftShoulderSet("Deviation_Small", 0, 20, 50);
	FzSet& Deviation_Medium = DistToTarget.AddTriangularSet("Deviation_Medium", 20, 50, 80);
	FzSet& Deviation_Big = DistToTarget.AddRightShoulderSet("Deviation_Big", 50, 80, 100);

	FzSet& Target_Close = DistToTarget.AddLeftShoulderSet("Target_Close", 0, 25, 150);
	FzSet& Target_Medium = DistToTarget.AddTriangularSet("Target_Medium", 25, 150, 300);
	FzSet& Target_Far = DistToTarget.AddRightShoulderSet("Target_Far", 150, 300, 1000);

	FzSet& TargetVelocity_Slow = TargetVelocity.AddLeftShoulderSet("TargetVelocity_Slow", 0, 0.2, 0.5);
	FzSet& TargetVelocity_Medium = TargetVelocity.AddTriangularSet("TargetVelocity_Medium", 0.2, 0.5, 0.8);
	FzSet& TargetVelocity_Fast = TargetVelocity.AddRightShoulderSet("TargetVelocity_Fast", 0.5, 0.8, 2.0);

	FzSet& TargetVisiblePeriod_Short = TargetVisiblePeriod.AddLeftShoulderSet("TargetVisiblePeriod_Short", 0, 2, 5);
	FzSet& TargetVisiblePeriod_Normal = TargetVisiblePeriod.AddTriangularSet("TargetVisiblePeriod_Normal", 2, 5, 10);
	FzSet& TargetVisiblePeriod_Long = TargetVisiblePeriod.AddRightShoulderSet("TargetVisiblePeriod_Long", 5, 10, 120);

	/* Fuzzy Rules */
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Slow, TargetVisiblePeriod_Short), Deviation_Small);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Slow, TargetVisiblePeriod_Normal), Deviation_Small);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Slow, TargetVisiblePeriod_Long), Deviation_Small);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Medium, TargetVisiblePeriod_Short), Deviation_Small);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Medium, TargetVisiblePeriod_Normal), Deviation_Small);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Medium, TargetVisiblePeriod_Long), Deviation_Small);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Fast, TargetVisiblePeriod_Short), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Fast, TargetVisiblePeriod_Normal), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Close, TargetVelocity_Fast, TargetVisiblePeriod_Long), Deviation_Medium);

	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Slow, TargetVisiblePeriod_Short), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Slow, TargetVisiblePeriod_Normal), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Slow, TargetVisiblePeriod_Long), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Medium, TargetVisiblePeriod_Short), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Medium, TargetVisiblePeriod_Normal), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Medium, TargetVisiblePeriod_Long), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Fast, TargetVisiblePeriod_Short), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Fast, TargetVisiblePeriod_Normal), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Medium, TargetVelocity_Fast, TargetVisiblePeriod_Long), Deviation_Big);

	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Slow, TargetVisiblePeriod_Short), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Slow, TargetVisiblePeriod_Normal), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Slow, TargetVisiblePeriod_Long), Deviation_Medium);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Medium, TargetVisiblePeriod_Short), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Medium, TargetVisiblePeriod_Normal), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Medium, TargetVisiblePeriod_Long), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Fast, TargetVisiblePeriod_Short), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Fast, TargetVisiblePeriod_Normal), Deviation_Big);
	m_FuzzyModule.AddRule(FzAND(Target_Far, TargetVelocity_Fast, TargetVisiblePeriod_Long), Deviation_Big);
}