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);
        }
        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);
        }
Exemple #3
0
    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);
    }
Exemple #4
0
    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);
    }
Exemple #5
0
        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);
        }
Exemple #6
0
    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);
    }
Exemple #7
0
        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);
        }
        protected void InitializeDistanceToTarget(out FzSet targetClose, out FzSet targetMedium, out FzSet targetFar)
        {
            var distanceToTarget = FuzzyModule.CreateFlv("distanceToTarget");

            targetClose  = distanceToTarget.AddLeftShoulderSet("targetClose", 0, 10, 20);
            targetMedium = distanceToTarget.AddTriangularSet("targetMedium", 10, 30, 50);
            targetFar    = distanceToTarget.AddRightShoulderSet("targetFar", 30, 60, 100);
        }
        protected void InitializeDesirability(out FzSet undesirable, out FzSet desirable, out FzSet veryDesirable)
        {
            var desirability = FuzzyModule.CreateFlv("desirability");

            veryDesirable = desirability.AddRightShoulderSet("veryDesirable", 50, 75, 100);
            desirable     = desirability.AddTriangularSet("Desirable", 25, 50, 75);
            undesirable   = desirability.AddLeftShoulderSet("undesirable", 0, 25, 50);
        }
Exemple #10
0
    public override FuzzyTerm Clone()
    {
        FzSet _new = this.MemberwiseClone() as FzSet;

        _new.m_Set = this.m_Set;

        return(_new);
    }
        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);
    }
Exemple #13
0
 public FzFairly(FzSet ft)
 {
     m_Set = ft.m_Set.clone();
 }
Exemple #14
0
    protected override void initializeFuzzyModule()
    {
        FuzzyVariable DistToTarget = m_FuzzyModule.CreateFLV("DistToTarget");

        //FzSet is a fuzzy set!!!
        FzSet Target_Close  = DistToTarget.AddLeftShoulderSet("eTarget_Close", 0, 250, 500);
        FzSet Target_Medium = DistToTarget.AddTriangularSet("eTarget_Medium", 250, 500, 750);
        FzSet Target_Far    = DistToTarget.AddRightShoulderSet("eTarget_Far", 500, 750, 1000);

        FuzzyVariable DistToMate  = m_FuzzyModule.CreateFLV("DistToMate");
        FzSet         Mate_Close  = DistToMate.AddLeftShoulderSet("mTarget_Close", 0, 250, 500);
        FzSet         Mate_Medium = DistToMate.AddTriangularSet("mTarget_Medium", 250, 500, 750);
        FzSet         Mate_Far    = DistToMate.AddRightShoulderSet("mTarget_Far", 500, 750, 1000);

        FuzzyVariable Hunger     = m_FuzzyModule.CreateFLV("Hunger");
        FzSet         VeryHungry = Hunger.AddRightShoulderSet("VeryHungry", 50, 75, 100);
        FzSet         Hungry     = Hunger.AddTriangularSet("Hungry", 25, 50, 75);
        FzSet         NotHungry  = Hunger.AddLeftShoulderSet("NotHungry", 0, 25, 50);


        FuzzyVariable Libido       = m_FuzzyModule.CreateFLV("Libido");
        FzSet         HighLibido   = Libido.AddRightShoulderSet("HighLibido", 50, 75, 100);
        FzSet         MediumLibido = Libido.AddTriangularSet("MediumLibido", 25, 50, 75);
        FzSet         NoLibido     = Libido.AddLeftShoulderSet("NoLibido", 0, 25, 50);

        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 Sex       = m_FuzzyModule.CreateFLV("Sex");
        FzSet         HighSex   = Sex.AddRightShoulderSet("HighSex", 50, 75, 100);
        FzSet         MediumSex = Sex.AddTriangularSet("MediumSex", 25, 50, 75);
        FzSet         NoSex     = Sex.AddLeftShoulderSet("NoSex", 0, 25, 50);



        //temperature
        FuzzyVariable Temperature = m_FuzzyModule2.CreateFLV("Temperature");

        FzSet hot  = Temperature.AddLeftShoulderSet("hot", 0, 250, 500);
        FzSet warm = Temperature.AddTriangularSet("warm", 250, 500, 750);
        FzSet cold = Temperature.AddRightShoulderSet("cold", 500, 750, 1000);

        FuzzyVariable Hunger2     = m_FuzzyModule2.CreateFLV("Hunger2");
        FzSet         VeryHungry2 = Hunger2.AddRightShoulderSet("VeryHungry", 50, 75, 100);
        FzSet         Hungry2     = Hunger2.AddTriangularSet("Hungry", 25, 50, 75);
        FzSet         NotHungry2  = Hunger2.AddLeftShoulderSet("NotHungry", 0, 25, 50);

        FuzzyVariable Libido2       = m_FuzzyModule2.CreateFLV("Libido2");
        FzSet         HighLibido2   = Libido2.AddRightShoulderSet("HighLibido", 50, 75, 100);
        FzSet         MediumLibido2 = Libido2.AddTriangularSet("MediumLibido", 25, 50, 75);
        FzSet         NoLibido2     = Libido2.AddLeftShoulderSet("NoLibido", 0, 25, 50);

        FuzzyVariable Desirability2  = m_FuzzyModule2.CreateFLV("Desirability2");
        FzSet         VeryDesirable2 = Desirability2.AddRightShoulderSet("VeryDesirable", 50, 75, 100);
        FzSet         Desirable2     = Desirability2.AddTriangularSet("Desirable", 25, 50, 75);
        FzSet         Undesirable2   = Desirability2.AddLeftShoulderSet("Undesirable", 0, 25, 50);

        FuzzyVariable Sex2       = m_FuzzyModule2.CreateFLV("Sex2");
        FzSet         HighSex2   = Sex2.AddRightShoulderSet("HighSex", 50, 75, 100);
        FzSet         MediumSex2 = Sex2.AddTriangularSet("MediumSex", 25, 50, 75);
        FzSet         NoSex2     = Sex2.AddLeftShoulderSet("NoSex", 0, 25, 50);

        //Temperature Rules
        m_FuzzyModule2.AddRule(new FzAND(hot, VeryHungry2), Undesirable2);
        m_FuzzyModule2.AddRule(new FzAND(hot, Hungry2), Undesirable2);
        m_FuzzyModule2.AddRule(new FzAND(hot, NotHungry2), Undesirable2);

        m_FuzzyModule2.AddRule(new FzAND(warm, VeryHungry2), VeryDesirable2);
        m_FuzzyModule2.AddRule(new FzAND(warm, Hungry2), VeryDesirable2);
        m_FuzzyModule2.AddRule(new FzAND(warm, NotHungry2), Desirable2);

        m_FuzzyModule2.AddRule(new FzAND(cold, VeryHungry2), Desirable2);
        m_FuzzyModule2.AddRule(new FzAND(cold, Hungry2), Undesirable2);
        m_FuzzyModule2.AddRule(new FzAND(cold, NotHungry2), Undesirable2);


        m_FuzzyModule2.AddRule(new FzAND(hot, HighLibido2), NoSex2);
        m_FuzzyModule2.AddRule(new FzAND(hot, MediumLibido2), NoSex2);
        m_FuzzyModule2.AddRule(new FzAND(hot, NoLibido2), NoSex2);

        m_FuzzyModule2.AddRule(new FzAND(warm, HighLibido2), MediumSex2);
        m_FuzzyModule2.AddRule(new FzAND(warm, MediumLibido2), NoSex2);
        m_FuzzyModule2.AddRule(new FzAND(warm, NoLibido2), NoSex2);

        m_FuzzyModule2.AddRule(new FzAND(cold, HighLibido2), HighSex2);
        m_FuzzyModule2.AddRule(new FzAND(cold, MediumLibido2), HighSex2);
        m_FuzzyModule2.AddRule(new FzAND(cold, NoLibido2), NoSex2);



        //food
        //antecedents and consequents are FzSet isntances, so Clone() uses FzSet member function Clone().
        m_FuzzyModule.AddRule(new FzAND(Target_Close, HighLibido, VeryHungry), VeryDesirable);    //done
        m_FuzzyModule.AddRule(new FzAND(Target_Close, MediumLibido, VeryHungry), VeryDesirable);  //done
        m_FuzzyModule.AddRule(new FzAND(Target_Close, NoLibido, VeryHungry), VeryDesirable);      //done

        m_FuzzyModule.AddRule(new FzAND(Target_Close, HighLibido, Hungry), Desirable);            //done
        m_FuzzyModule.AddRule(new FzAND(Target_Close, MediumLibido, Hungry), Desirable);          //done
        m_FuzzyModule.AddRule(new FzAND(Target_Close, NoLibido, Hungry), VeryDesirable);          //done

        m_FuzzyModule.AddRule(new FzAND(Target_Close, HighLibido, NotHungry), Undesirable);       //done
        m_FuzzyModule.AddRule(new FzAND(Target_Close, MediumLibido, NotHungry), Undesirable);     //done
        m_FuzzyModule.AddRule(new FzAND(Target_Close, NoLibido, NotHungry), Undesirable);         //done

        m_FuzzyModule.AddRule(new FzAND(Target_Medium, HighLibido, VeryHungry), Desirable);       //done
        m_FuzzyModule.AddRule(new FzAND(Target_Medium, MediumLibido, VeryHungry), VeryDesirable); //done
        m_FuzzyModule.AddRule(new FzAND(Target_Medium, NoLibido, VeryHungry), VeryDesirable);     //done

        m_FuzzyModule.AddRule(new FzAND(Target_Medium, HighLibido, Hungry), Desirable);           //done
        m_FuzzyModule.AddRule(new FzAND(Target_Medium, MediumLibido, Hungry), Desirable);         //done
        m_FuzzyModule.AddRule(new FzAND(Target_Medium, NoLibido, Hungry), VeryDesirable);         //done

        m_FuzzyModule.AddRule(new FzAND(Target_Medium, HighLibido, NotHungry), Undesirable);      //done
        m_FuzzyModule.AddRule(new FzAND(Target_Medium, MediumLibido, NotHungry), Undesirable);    //done
        m_FuzzyModule.AddRule(new FzAND(Target_Medium, NoLibido, NotHungry), Undesirable);        //done

        m_FuzzyModule.AddRule(new FzAND(Target_Far, HighLibido, VeryHungry), VeryDesirable);      //done
        m_FuzzyModule.AddRule(new FzAND(Target_Far, MediumLibido, VeryHungry), VeryDesirable);    //done
        m_FuzzyModule.AddRule(new FzAND(Target_Far, NoLibido, VeryHungry), VeryDesirable);        //done

        m_FuzzyModule.AddRule(new FzAND(Target_Far, HighLibido, Hungry), Desirable);              //done
        m_FuzzyModule.AddRule(new FzAND(Target_Far, MediumLibido, Hungry), Desirable);            //done
        m_FuzzyModule.AddRule(new FzAND(Target_Far, NoLibido, Hungry), VeryDesirable);            //done

        m_FuzzyModule.AddRule(new FzAND(Target_Far, HighLibido, NotHungry), Undesirable);         //done
        m_FuzzyModule.AddRule(new FzAND(Target_Far, MediumLibido, NotHungry), Undesirable);       //done
        m_FuzzyModule.AddRule(new FzAND(Target_Far, NoLibido, NotHungry), Undesirable);           //done

        //sex
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, VeryHungry, HighLibido), MediumSex);   //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, VeryHungry, MediumLibido), MediumSex); //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, VeryHungry, NoLibido), NoSex);         //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Close, Hungry, HighLibido), HighSex);         //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, Hungry, MediumLibido), MediumSex);     //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, Hungry, NoLibido), NoSex);             //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Close, NotHungry, HighLibido), HighSex);      //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, NotHungry, MediumLibido), HighSex);    //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Close, NotHungry, NoLibido), NoSex);          //done


        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, VeryHungry, HighLibido), MediumSex);  ///done
        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, VeryHungry, MediumLibido), NoSex);    //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, VeryHungry, NoLibido), NoSex);        //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, Hungry, HighLibido), HighSex);        //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, Hungry, MediumLibido), MediumSex);    //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, Hungry, NoLibido), NoSex);            //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, NotHungry, HighLibido), HighSex);     //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, NotHungry, MediumLibido), MediumSex); //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Medium, NotHungry, NoLibido), NoSex);         //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Far, VeryHungry, HighLibido), MediumSex);     //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Far, VeryHungry, MediumLibido), NoSex);       //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Far, VeryHungry, NoLibido), NoSex);           //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Far, Hungry, HighLibido), MediumSex);         //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Far, Hungry, MediumLibido), MediumSex);       //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Far, Hungry, NoLibido), NoSex);               //done

        m_FuzzyModule.AddRule(new FzAND(Mate_Far, NotHungry, HighLibido), HighSex);        //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Far, NotHungry, MediumLibido), MediumSex);    //done
        m_FuzzyModule.AddRule(new FzAND(Mate_Far, NotHungry, NoLibido), NoSex);            //done
    }
Exemple #15
0
        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);
        }
Exemple #16
0
 private FzSet(FzSet fzSet)
 {
     m_Set = fzSet.m_Set;
 }
 public FzVery(FzSet ft)
 {
     m_Set = ft.m_Set.clone();
 }
 /// <summary>
 ///     Initializes a new instance of the FzVery class from the given fuzzy set.
 /// </summary>
 /// <param name="fzSet">The given fuzzy set.</param>
 public FzVery(FzSet fzSet)
 {
     Set = fzSet.Set;
 }
Exemple #19
0
 private FzSet(FzSet con)
 {
     m_Set = con.m_Set;
 }
Exemple #20
0
 ///<summary>
 ///constructor
 ///</summary>
 ///<param name="ft"></param>
 public FzVery(FzSet ft)
 {
     _set = ft.Set;
 }
Exemple #21
0
 public FzVery(FzSet fzVery)
 {
     m_Set = fzVery.m_Set.clone();
 }