public ThinkGoal(ConsciousGameEntity entity) : base(entity) { fuzzyModule = new FuzzyModule(); FuzzyVariable hunger = fuzzyModule.CreateFLV("Hunger"); FzSet starving = hunger.AddLeftShoulder("Starving", 0.0, 0.1, 0.3); FzSet content = hunger.AddTriangle("Content", 0.1, 0.5, 0.8); FzSet full = hunger.AddRightShoulder("Full", 0.5, 0.8, 1.0); FuzzyVariable sleep = fuzzyModule.CreateFLV("Sleep"); FzSet tired = sleep.AddLeftShoulder("Tired", 0.0, 0.1, 0.3); FzSet sleepy = sleep.AddTriangle("Sleepy", 0.1, 0.3, 0.5); FzSet awake = sleep.AddRightShoulder("Awake", 0.3, 0.5, 1.0); FuzzyVariable desirability = fuzzyModule.CreateFLV("Desirability"); FzSet undesirable = desirability.AddLeftShoulder("Undesirable", 0, 0.25, 0.5); FzSet desirable = desirability.AddTriangle("Desirable", 0.25, 0.5, 0.75); FzSet veryDesirable = desirability.AddRightShoulder("VeryDesirable", 0.5, 0.75, 1.0); fuzzyModule.AddRule(new FzOR(starving, tired), undesirable); fuzzyModule.AddRule(new FzAND(content, sleepy), undesirable); fuzzyModule.AddRule(new FzAND(full, sleepy), desirable); fuzzyModule.AddRule(new FzAND(content, awake), desirable); fuzzyModule.AddRule(new FzAND(full, awake), veryDesirable); }
private void InitPromisingRegionFM() { // Promising Region FuzzyModule promisingRegionFM = new FuzzyModule(); FuzzyVariable DistToRegion = promisingRegionFM.CreateFLV("DistToRegion"); FzSet Dist_Close = DistToRegion.AddLeftShoulderSet("Dist_Close", 0, 50, 150); FzSet Dist_Medium = DistToRegion.AddTriangleSet("Dist_Medium", 50, 150, 200); FzSet Dist_Far = DistToRegion.AddRightShoulderSet("Dist_Far", 150, 250, 300); FuzzyVariable RegionWealth = promisingRegionFM.CreateFLV("RegionWealth"); FzSet Region_Poor = RegionWealth.AddLeftShoulderSet("Region_Poor", 0, 300, 750); FzSet Region_Decent = RegionWealth.AddTriangleSet("Region_Decent", 750, 1500, 2700); FzSet Region_Rich = RegionWealth.AddRightShoulderSet("Region_Rich", 2250, 2700, Region.MAX_RESOURCE_COUNT); FuzzyVariable Desirability = promisingRegionFM.CreateFLV("Desirability"); FzSet Undersirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); FzSet Desirable = Desirability.AddTriangleSet("Desirable", 25, 50, 75); FzSet Very_Desirable = Desirability.AddRightShoulderSet("VeryDesirable", 50, 75, 100); promisingRegionFM.AddRule(new FzAND(Dist_Close, Region_Poor), Undersirable); promisingRegionFM.AddRule(new FzAND(Dist_Close, Region_Decent), Desirable); promisingRegionFM.AddRule(new FzAND(Dist_Close, Region_Rich), Very_Desirable); promisingRegionFM.AddRule(new FzAND(Dist_Medium, Region_Poor), Undersirable); promisingRegionFM.AddRule(new FzAND(Dist_Medium, Region_Decent), Undersirable); promisingRegionFM.AddRule(new FzAND(Dist_Medium, Region_Rich), Very_Desirable); promisingRegionFM.AddRule(new FzAND(Dist_Far, Region_Poor), Undersirable); promisingRegionFM.AddRule(new FzAND(Dist_Far, Region_Decent), Undersirable); promisingRegionFM.AddRule(new FzAND(Dist_Far, Region_Rich), Very_Desirable); }
private void Awake() { fm = new FuzzyModule(); FuzzyVariable DistToTarget = fm.CreateFLV("DistToTarget"); FzSet Target_Close = DistToTarget.AddLeftShoulderSet("Target_Close", 0, 25, 150); FzSet Target_Medium = DistToTarget.AddTriangleSet("Target_Medium", 25, 50, 300); FzSet Target_Far = DistToTarget.AddRightShoulderSet("Target_Far", 150, 300, 500); FuzzyVariable AmmoStatus = fm.CreateFLV("AmmoStatus"); FzSet Ammo_Low = AmmoStatus.AddLeftShoulderSet("Ammo_Low", 0, 0, 10); FzSet Ammo_Okay = AmmoStatus.AddTriangleSet("Ammo_Okay", 0, 10, 30); FzSet Ammo_Loads = AmmoStatus.AddRightShoulderSet("Ammo_Loads", 10, 30, 40); FuzzyVariable Desirability = fm.CreateFLV("Desirablility"); FzSet Undersirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); FzSet Desirable = Desirability.AddTriangleSet("Desirable", 25, 50, 75); FzSet VeryDesirable = Desirability.AddRightShoulderSet("VeryDesirable", 50, 75, 100); fm.AddRule(new FzAND(Target_Close, Ammo_Low), Undersirable); fm.AddRule(new FzAND(Target_Close, Ammo_Okay), Undersirable); fm.AddRule(new FzAND(Target_Close, Ammo_Loads), Undersirable); fm.AddRule(new FzAND(Target_Medium, Ammo_Low), Desirable); fm.AddRule(new FzAND(Target_Medium, Ammo_Okay), VeryDesirable); fm.AddRule(new FzAND(Target_Medium, Ammo_Loads), VeryDesirable); fm.AddRule(new FzAND(Target_Far, Ammo_Low), Undersirable); fm.AddRule(new FzAND(Target_Far, Ammo_Okay), Desirable); fm.AddRule(new FzAND(Target_Far, Ammo_Loads), Desirable); }
public void FuzzyTowerCalcSniper(FuzzyModule towerFuzzyModule) { // Retrieves the antecedents. FuzzyVariable health = towerFuzzyModule.GetVar("Health"); FzSet low = new FzSet(health.GetSet("Low")); FzSet middle = new FzSet(health.GetSet("Middle")); FzSet high = new FzSet(health.GetSet("High")); FuzzyVariable distanceToEnemy = towerFuzzyModule.GetVar("DistanceToEnemy"); FzSet close = new FzSet(distanceToEnemy.GetSet("Close")); FzSet medium = new FzSet(distanceToEnemy.GetSet("Medium")); FzSet far = new FzSet(distanceToEnemy.GetSet("Far")); // Creates the consequent. FuzzyVariable shootDesirability = towerFuzzyModule.CreateFLV("ShootDesirability"); FzSet undesirable = shootDesirability.AddLeftShoulderSet("Undesirable", 0, 15, 30); FzSet desirable = shootDesirability.AddTriangularSet("Desirable", 15, 30, 75); FzSet veryDesirable = shootDesirability.AddRightShoulderSet("VeryDesirable", 30, 75, 100); // Add rules to complete the FAM. towerFuzzyModule.AddRule(new FzAND(low, close), desirable); towerFuzzyModule.AddRule(new FzAND(low, medium), desirable); towerFuzzyModule.AddRule(new FzAND(low, far), veryDesirable); towerFuzzyModule.AddRule(new FzAND(middle, close), undesirable); towerFuzzyModule.AddRule(new FzAND(middle, medium), undesirable); towerFuzzyModule.AddRule(new FzAND(middle, far), desirable); towerFuzzyModule.AddRule(new FzAND(high, close), undesirable); towerFuzzyModule.AddRule(new FzAND(high, medium), undesirable); towerFuzzyModule.AddRule(new FzAND(high, far), desirable); }
private void InitFuzzySets() { fm = new FuzzyModule(); DistToPlayer = fm.CreateFLV("DistanceToPlayer"); Distance_Close = DistToPlayer.AddLeftShoulderSet("Close", 0, 40, 200); Distance_Medium = DistToPlayer.AddTriangularSet("Medium", 40, 200, 300); Distance_Far = DistToPlayer.AddRightShoulderSet("Far", 200, 300, 400); RangeOfSeight = fm.CreateFLV("RangeOfSeight"); Seight_Foggy = RangeOfSeight.AddLeftShoulderSet("Foggy", 0, 1, 5); Seight_Dusty = RangeOfSeight.AddTriangularSet("Dusty", 1, 5, 9); Seight_Clear = RangeOfSeight.AddRightShoulderSet("Clear", 5, 9, 10); PlayerDistance = fm.CreateFLV("PlayerDistance"); Player_Is_ToClose = PlayerDistance.AddLeftShoulderSet("ToClose", 0, 40, 200); Player_Is_PerfectRange = PlayerDistance.AddTriangularSet("Perfect", 40, 200, 360); Player_Is_FarAway = PlayerDistance.AddRightShoulderSet("Far", 200, 360, 400); // Without Combs method, therefore: 3^2 = 9 fm.AddRule(new FzAND(Distance_Close, Seight_Foggy), Player_Is_ToClose); fm.AddRule(new FzAND(Distance_Medium, Seight_Foggy), Player_Is_FarAway); fm.AddRule(new FzAND(Distance_Far, Seight_Foggy), Player_Is_FarAway); fm.AddRule(new FzAND(Distance_Close, Seight_Dusty), Player_Is_ToClose); fm.AddRule(new FzAND(Distance_Medium, Seight_Dusty), Player_Is_PerfectRange); fm.AddRule(new FzAND(Distance_Far, Seight_Dusty), Player_Is_FarAway); fm.AddRule(new FzAND(Distance_Close, Seight_Clear), Player_Is_ToClose); fm.AddRule(new FzAND(Distance_Medium, Seight_Clear), Player_Is_PerfectRange); fm.AddRule(new FzAND(Distance_Far, Seight_Clear), Player_Is_PerfectRange); }
public Thirst() : base() { _module = new FuzzyModule(); // Antecedents FuzzyVariable Thirst = _module.CreateFLV("Thirst"); var Thirst_Low = Thirst.AddLeftShoulderSet("Thirst_Low", 0, 10, 20); var Thirst_Med = Thirst.AddTriangularSet("Thirst_Med", 10, 20, 30); var Thirst_High = Thirst.AddRightShoulderSet("Thirst_High", 20, 30, _MAX_THIRST); FuzzyVariable Distance = _module.CreateFLV("Distance"); var Distance_Close = Distance.AddLeftShoulderSet("Distance_Close", 0, 40, 80); var Distance_Medium = Distance.AddTriangularSet("Distance_Medium", 40, 80, 400); var Distance_Far = Distance.AddRightShoulderSet("Distance_Far", 80, 400, MAX_DISTANCE); // Consequence FuzzyVariable Desirability = _module.CreateFLV("Desirability"); var Undesirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); var Desirable = Desirability.AddTriangularSet("Desirable", 25, 50, 75); var VeryDesirable = Desirability.AddRightShoulderSet("VeryDesirable", 50, 75, 100); // Rules _module.AddRule(new FzAND(Thirst_Low, Distance_Close), Undesirable); _module.AddRule(new FzAND(Thirst_Low, Distance_Medium), Undesirable); _module.AddRule(new FzAND(Thirst_Low, Distance_Far), Undesirable); _module.AddRule(new FzAND(Thirst_Med, Distance_Close), Desirable); _module.AddRule(new FzAND(Thirst_Med, Distance_Medium), Undesirable); _module.AddRule(new FzAND(Thirst_Med, Distance_Far), Undesirable); _module.AddRule(new FzAND(Thirst_High, Distance_Close), VeryDesirable); _module.AddRule(new FzAND(Thirst_High, Distance_Medium), VeryDesirable); _module.AddRule(new FzAND(Thirst_High, Distance_Far), Desirable); }
public MakeDecisionGoal(AwareEntity me) : base(me) { fuzzyModule = new FuzzyModule(); FuzzyVariable hunger = fuzzyModule.CreateFLV("Hunger"); FzSet hungry = hunger.AddLeftShoulder("Hungry", 0.0, 0.1, 0.3); FzSet content = hunger.AddTriangle("Content", 0.1, 0.5, 0.8); FzSet full = hunger.AddRightShoulder("Full", 0.5, 0.8, 1.0); FuzzyVariable fatique = fuzzyModule.CreateFLV("Fatique"); FzSet sleepy = fatique.AddLeftShoulder("Sleepy", 0.0, 0.1, 0.3); FzSet awake = fatique.AddTriangle("Awake", 0.1, 0.3, 0.5); FzSet alert = fatique.AddRightShoulder("Alert", 0.3, 0.5, 1.0); FuzzyVariable desirability = fuzzyModule.CreateFLV("Desirability"); FzSet unDesirable = desirability.AddLeftShoulder("Undesirable", 0, 0.25, 0.5); FzSet desirable = desirability.AddTriangle("Desirable", 0.25, 0.5, 0.75); FzSet veryDesirable = desirability.AddRightShoulder("VeryDesirable", 0.5, 0.75, 1.0); fuzzyModule.AddRule(new FzAND(hungry, sleepy), unDesirable); fuzzyModule.AddRule(new FzAND(hungry, awake), desirable); fuzzyModule.AddRule(new FzAND(hungry, alert), veryDesirable); fuzzyModule.AddRule(new FzAND(content, sleepy), unDesirable); fuzzyModule.AddRule(new FzAND(content, awake), desirable); fuzzyModule.AddRule(new FzAND(content, alert), veryDesirable); fuzzyModule.AddRule(new FzAND(full, sleepy), unDesirable); fuzzyModule.AddRule(new FzAND(full, awake), desirable); fuzzyModule.AddRule(new FzAND(full, alert), veryDesirable); }
private void InitSheepDesireFM() { sheepDesireFM = new FuzzyModule(); FuzzyVariable DistToTarget = sheepDesireFM.CreateFLV("DistToOgre"); FzSet Dist_Close = DistToTarget.AddLeftShoulderSet("Dist_Close", 0, 25, 150); FzSet Dist_Medium = DistToTarget.AddTriangleSet("Dist_Medium", 25, 50, 300); FzSet Dist_Far = DistToTarget.AddRightShoulderSet("Dist_Far", 150, 300, 500); FuzzyVariable AmmoStatus = sheepDesireFM.CreateFLV("Hunger"); FzSet Hunger_Low = AmmoStatus.AddLeftShoulderSet("Hunger_Low", 0, 0, 10); FzSet Hunger_Okay = AmmoStatus.AddTriangleSet("Hunger_Okay", 0, 10, 30); FzSet Hunger_Intense = AmmoStatus.AddRightShoulderSet("Hunger_Intense", 10, 30, 40); FuzzyVariable Desirability = sheepDesireFM.CreateFLV("Desirability"); FzSet Undersirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); FzSet Desirable = Desirability.AddTriangleSet("Desirable", 25, 50, 75); FzSet VeryDesirable = Desirability.AddRightShoulderSet("VeryDesirable", 50, 75, 100); sheepDesireFM.AddRule(new FzAND(Dist_Close, Hunger_Low), Undersirable); sheepDesireFM.AddRule(new FzAND(Dist_Close, Hunger_Okay), Undersirable); sheepDesireFM.AddRule(new FzAND(Dist_Close, Hunger_Intense), Undersirable); sheepDesireFM.AddRule(new FzAND(Dist_Medium, Hunger_Low), Desirable); sheepDesireFM.AddRule(new FzAND(Dist_Medium, Hunger_Okay), VeryDesirable); sheepDesireFM.AddRule(new FzAND(Dist_Medium, Hunger_Intense), VeryDesirable); sheepDesireFM.AddRule(new FzAND(Dist_Far, Hunger_Low), Undersirable); sheepDesireFM.AddRule(new FzAND(Dist_Far, Hunger_Okay), Desirable); sheepDesireFM.AddRule(new FzAND(Dist_Far, Hunger_Intense), Desirable); }
public void Initialize() { _module = new FuzzyModule(); FuzzyVariable ammo = _module.CreateFLV("ammo"); IFuzzySet ammoLow = ammo.AddLeftShoulderSet("low", 0, 2, 8); IFuzzySet ammoDecent = ammo.AddTriangularSet("decent", 2, 8, 16); IFuzzySet ammoPlenty = ammo.AddRightShoulderSet("plenty", 8, 16, 32); FuzzyVariable desirability = _module.CreateFLV("desirability"); IFuzzySet undesirable = desirability.AddLeftShoulderSet("undesirable", 0, 25, 50); IFuzzySet desirable = desirability.AddTriangularSet("desirable", 25, 50, 75); IFuzzySet veryDesirable = desirability.AddRightShoulderSet("very_desirable", 50, 75, 100); // Desirability for reloading. _module.AddRule(ammoLow, veryDesirable); _module.AddRule(ammoDecent, desirable); _module.AddRule(ammoPlenty, undesirable); }
protected override void InitializeFuzzyModule() { InitializeDistanceToTarget(out var targetClose, out var targetMedium, out var targetFar); FzSet veryDesirable; InitializeDesirability(out var undesirable, out var desirable, out veryDesirable); FuzzyModule.AddRule(targetClose, desirable); FuzzyModule.AddRule(targetMedium, new FzVery(undesirable)); FuzzyModule.AddRule(targetFar, new FzVery(undesirable)); }
public void FuzzyLogic_Test1() { FuzzyModule fuzzyModule = new FuzzyModule(); FuzzyVariable distanceToTarget = fuzzyModule.CreateFLV("DistanceToTarget"); FzSet Target_Close = distanceToTarget.AddLeftShoulderSet("Target_Close", 0, 250, 500); FzSet Target_Medium = distanceToTarget.AddTriangularSet("Target_Medium", 250, 500, 750); FzSet Target_Far = distanceToTarget.AddRightShoulderSet("Target_Far", 500, 750, 1000); FuzzyVariable AmmoStatus = fuzzyModule.CreateFLV("AmmoStatus"); FzSet Ammo_Low = AmmoStatus.AddLeftShoulderSet("Ammo_Low", 0, 250, 500); FzSet Ammo_Okay = AmmoStatus.AddTriangularSet("Ammo_Okay", 250, 500, 750); FzSet Ammo_Loads = AmmoStatus.AddRightShoulderSet("Ammo_Loads", 500, 750, 1000); FuzzyVariable Desirability = fuzzyModule.CreateFLV("Desirability"); FzSet Undesirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); FzSet Desirable = Desirability.AddTriangularSet("Desirable", 25, 50, 75); FzSet Very_Desirable = Desirability.AddRightShoulderSet("Very_Desirable", 50, 75, 100); fuzzyModule.AddRule(new FzAND(Target_Close, Ammo_Loads), Undesirable); fuzzyModule.AddRule(new FzAND(Target_Close, Ammo_Okay), Undesirable); fuzzyModule.AddRule(new FzAND(Target_Close, Ammo_Low), Undesirable); fuzzyModule.AddRule(new FzAND(Target_Medium, Ammo_Loads), Very_Desirable); fuzzyModule.AddRule(new FzAND(Target_Medium, Ammo_Okay), Very_Desirable); fuzzyModule.AddRule(new FzAND(Target_Medium, Ammo_Low), Desirable); fuzzyModule.AddRule(new FzAND(Target_Far, Ammo_Loads), Desirable); fuzzyModule.AddRule(new FzAND(Target_Far, Ammo_Okay), Desirable); fuzzyModule.AddRule(new FzAND(Target_Far, Ammo_Low), Undesirable); fuzzyModule.Fuzzify("DistanceToTarget", 200); fuzzyModule.Fuzzify("AmmoStatus", 400); double value = fuzzyModule.DeFuzzify("Desirability", FuzzyModule.DefuzzifyMethod.MaxAV); Assert.Equal(12.5, value); fuzzyModule.Fuzzify("DistanceToTarget", 1000); fuzzyModule.Fuzzify("AmmoStatus", 600); value = fuzzyModule.DeFuzzify("Desirability", FuzzyModule.DefuzzifyMethod.MaxAV); Assert.Equal(50, value); }
public double FuzzyGetDesirabilitySeek(int hungerVar, double moneyVar) { FuzzyModule fuzzyModule = new FuzzyModule(); FuzzyVariable hunger = fuzzyModule.CreateFLV("Hunger"); FzSet No_Hunger = hunger.AddLeftShoulderSet("No_Hunger", 0, 5, 10); FzSet Hunger = hunger.AddTriangularSet("Hunger", 5, 10, 15); FzSet Very_Hunger = hunger.AddRightShoulderSet("Very_Hunger", 10, 15, 20); FuzzyVariable AmmoStatus = fuzzyModule.CreateFLV("Money"); FzSet Poor = AmmoStatus.AddLeftShoulderSet("Poor", 0, 5, 10); FzSet Normal = AmmoStatus.AddTriangularSet("Normal", 5, 10, 100); FzSet Rich = AmmoStatus.AddRightShoulderSet("Rich", 10, 100, 1000); FuzzyVariable Desirability = fuzzyModule.CreateFLV("Desirability"); FzSet Undesirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); FzSet Desirable = Desirability.AddTriangularSet("Desirable", 25, 50, 75); FzSet Very_Desirable = Desirability.AddRightShoulderSet("Very_Desirable", 50, 75, 100); fuzzyModule.AddRule(new FzAND(No_Hunger, Poor), Undesirable); fuzzyModule.AddRule(new FzAND(No_Hunger, Normal), Undesirable); fuzzyModule.AddRule(new FzAND(No_Hunger, Rich), Undesirable); fuzzyModule.AddRule(new FzAND(Very_Hunger, Poor), Very_Desirable); fuzzyModule.AddRule(new FzAND(Very_Hunger, Normal), Very_Desirable); fuzzyModule.AddRule(new FzAND(Very_Hunger, Rich), Undesirable); fuzzyModule.AddRule(new FzAND(Hunger, Poor), Desirable); fuzzyModule.AddRule(new FzAND(Hunger, Normal), Desirable); fuzzyModule.AddRule(new FzAND(Hunger, Rich), Undesirable); fuzzyModule.Fuzzify("Hunger", hungerVar); fuzzyModule.Fuzzify("Money", moneyVar); double value = fuzzyModule.DeFuzzify("Desirability", FuzzyModule.DefuzzifyMethod.MaxAV); return(value); }
protected override void InitializeFuzzyModule() { InitializeDistanceToTarget(out var targetClose, out var targetMedium, out var targetFar); InitializeDesirability(out var undesirable, out var desirable, out var veryDesirable); var ammoStatus = FuzzyModule.CreateFlv("ammoStatus"); var ammoLoads = ammoStatus.AddRightShoulderSet("ammoLoads", 10, 12, 15); var ammoOkay = ammoStatus.AddTriangularSet("ammoOkay", 5, 10, 12); var ammoLow = ammoStatus.AddTriangularSet("ammoLow", 0, 2, 6); FuzzyModule.AddRule(new FzAnd(targetClose, ammoLoads), undesirable); FuzzyModule.AddRule(new FzAnd(targetClose, ammoOkay), undesirable); FuzzyModule.AddRule(new FzAnd(targetClose, ammoLow), undesirable); FuzzyModule.AddRule(new FzAnd(targetMedium, ammoLoads), veryDesirable); FuzzyModule.AddRule(new FzAnd(targetMedium, ammoOkay), veryDesirable); FuzzyModule.AddRule(new FzAnd(targetMedium, ammoLow), desirable); FuzzyModule.AddRule(new FzAnd(targetFar, ammoLoads), desirable); FuzzyModule.AddRule(new FzAnd(targetFar, ammoOkay), undesirable); FuzzyModule.AddRule(new FzAnd(targetFar, ammoLow), undesirable); }
public static void add_rule(FuzzyModule module, FuzzyTermSet IF, FuzzyTermSet AND, FuzzyTermSet THEN) => module.AddRule(new FuzzyAND(IF, AND), THEN);
static void Main(string[] args) { Console.WriteLine("hello {0}", "John"); FuzzyModule fm = new FuzzyModule(); FuzzyVariable Dist2Target = fm.CreateFLV("Dist2Target"); FuzzyVariable Desirability = fm.CreateFLV("Desirability"); FuzzyVariable AmmoStatus = fm.CreateFLV("AmmoStatus"); FzSet Target_Close = Dist2Target.AddLeftShoulderSet("Target_Close", 0, 25, 150); FzSet Target_Medium = Dist2Target.AddTrianglularSet("Target_Medium", 25, 150, 300); FzSet Target_Far = Dist2Target.AddRightShoulderSet("Target_Far", 150, 300, 400); FzSet Ammon_low = AmmoStatus.AddLeftShoulderSet("Ammon_low", 0, 0, 10); FzSet Ammon_Okay = AmmoStatus.AddTrianglularSet("Ammon_Okay", 0, 10, 30); FzSet Ammon_Loads = AmmoStatus.AddRightShoulderSet("Ammon_Loads", 10, 30, 40); FzSet Undesirable = Desirability.AddLeftShoulderSet("Undesirable", 0, 25, 50); FzSet Desirable = Desirability.AddTrianglularSet("Desirable", 25, 50, 75); FzSet VeryDesirable = Desirability.AddRightShoulderSet("VeryDesirable", 50, 75, 100); bool Combos = true; if (Combos) { fm.AddRule((Target_Far), Undesirable); fm.AddRule((Target_Medium), VeryDesirable); fm.AddRule((Target_Close), Undesirable); fm.AddRule((Ammon_Loads), VeryDesirable); fm.AddRule((Ammon_Okay), Desirable); fm.AddRule((Ammon_low), Undesirable); //fm.AddRule(new FzFairly(Target_Far), Undesirable); //fm.AddRule(new FzFairly(Target_Medium), VeryDesirable); //fm.AddRule(new FzFairly(Target_Close), Undesirable); //fm.AddRule(new FzFairly(Ammon_Loads), VeryDesirable); //fm.AddRule(new FzFairly(Ammon_Okay), Desirable); //fm.AddRule(new FzFairly(Ammon_low), Undesirable); //fm.AddRule(new FzVery(Target_Far), Undesirable); //fm.AddRule(new FzVery(Target_Medium), VeryDesirable); //fm.AddRule(new FzVery(Target_Close), Undesirable); //fm.AddRule(new FzVery(Ammon_Loads), VeryDesirable); //fm.AddRule(new FzVery(Ammon_Okay), Desirable); //fm.AddRule(new FzVery(Ammon_low), Undesirable); } else { fm.AddRule(new FzAND(Target_Far, Ammon_Loads), Desirable); fm.AddRule(new FzAND(Target_Far, Ammon_Okay), Undesirable); fm.AddRule(new FzAND(Target_Far, Ammon_low), Undesirable); fm.AddRule(new FzAND(Target_Medium, Ammon_Loads), VeryDesirable); fm.AddRule(new FzAND(Target_Medium, Ammon_Okay), VeryDesirable); fm.AddRule(new FzAND(Target_Medium, Ammon_low), Desirable); fm.AddRule(new FzAND(Target_Close, Ammon_Loads), Undesirable); fm.AddRule(new FzAND(Target_Close, Ammon_Okay), Undesirable); fm.AddRule(new FzAND(Target_Close, Ammon_low), Undesirable); } fm.Fuzzify("Dist2Target", 200); fm.Fuzzify("AmmoStatus", 8); double result = fm.Defuzzify("Desirability", FuzzyModule.DefuzzifyMethod.max_av); Console.WriteLine("Dist2Target is {0}", fm.Defuzzify("Dist2Target", FuzzyModule.DefuzzifyMethod.max_av)); Console.WriteLine("AmmoStatus is {0}", fm.Defuzzify("AmmoStatus", FuzzyModule.DefuzzifyMethod.max_av)); Console.WriteLine("Desirability is {0}", result); }