//------------------------- 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); }
//------------------------- 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); }