Exemple #1
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 #2
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 #3
0
    // prepare Metadata condequent for Fuzzy Logic with code
    private FuzzyVariable PrepareMetadata()
    {
        FuzzyVariable Metadata = new FuzzyVariable()
        {
            Name = "Metadata"
        };

        FuzzyValue Few = new FuzzyValue()
        {
            Name = "Few"
        };
        FuzzyValue Medium = new FuzzyValue()
        {
            Name = "Medium"
        };
        FuzzyValue All = new FuzzyValue()
        {
            Name = "All"
        };

        Few.MF    = new TrapezoidMemberShip(0, 0, 10, 30);
        Medium.MF = new TrapezoidMemberShip(0, 30, 60, 90);
        All.MF    = new TrapezoidMemberShip(60, 90, 100, 100);

        Metadata.AddValue(Few);
        Metadata.AddValue(Medium);
        Metadata.AddValue(All);

        return(Metadata);
    }
Exemple #4
0
        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);
        }
Exemple #5
0
    /// <summary>
    /// This method reads all Fuzzy Logic configuration from SQLite database, and applies
    /// this logic to all relevant fuzzy classes
    /// </summary>
    private void CreateFuzzyLogicFromSQLiteDB()
    {
        try
        {
            DataService db         = new DataService("fuzzy.db");
            var         FuzzParts  = db.GetFuzzyParts();
            var         FuzzValues = db.GetFuzzyValues();
            var         FuzzRules  = db.GetFuzzyRules();
            // all read so try to create everything from data
            FuzzyRuleManager mgr = new FuzzyRuleManager();
            foreach (FuzzyParts p in FuzzParts)
            {
                FuzzyVariable vv = new FuzzyVariable()
                {
                    Name = p.Name
                };
                if (string.Compare(p.FuzzyType, "Antecedent", false) == 0)
                {
                    mgr.Antecedents.Add(vv);
                }
                else
                {
                    mgr.Consequent = vv;
                }
                foreach (FuzzyValues val in FuzzValues)
                {
                    if (string.Compare(val.SetName, p.Name, true) == 0)
                    {
                        FuzzyValue fval = new FuzzyValue()
                        {
                            Name = val.Name, Parent = vv
                        };
                        double[] MFValues = ParseValues(val.MemberValues);
                        if (string.Compare(val.MemberType, "trapmf", true) == 0) // trapezoid MF?
                        {
                            fval.MF = new TrapezoidMemberShip(MFValues[0], MFValues[1], MFValues[2], MFValues[3]);
                        }
                        else
                        {
                            fval.MF = new TriangleMembership(MFValues[0], MFValues[1], MFValues[2]);
                        }

                        vv.AddValue(fval);
                    }
                }
            }
            foreach (FuzzyRules r in FuzzRules)
            {
                mgr.AddNewStringRule(r.Rule);
            }
            // apply rule manager to member variable
            mngr           = mgr;
            ReadFromSQLite = true;
            LogManager.Instance.AddLog("Success Create Fuzzy Logic from SQLite DB");
        }
        catch (Exception ex)
        {
            Debug.LogError(ex.Message);
        }
    }
Exemple #6
0
    private void testFuzzy()
    {
        // Creates a working Fuzzy system via code

        // Inference engine
        this.system.setEngine(new FuzzyInferenceEngine());

        // Variables
        FuzzyVariable vHealth = new FuzzyVariable("Health",0.0f,10.0f);
        vHealth.addMf("Low");	// Should also be able to specify slope and origin
        vHealth.addMf("Mid");
        vHealth.addMf("High");

        FuzzyVariable vDistance = new FuzzyVariable("Distance",0.0f,10.0f);
        vDistance.addMf("Low");
        vDistance.addMf("Mid");
        vDistance.addMf("High");

        FuzzyVariable vFear = new FuzzyVariable("Fear",0.0f,10.0f);
        vFear.addMf("Low");
        vFear.addMf("Mid");
        vFear.addMf("High");

        // Rules
        FuzzyRule rule = new FuzzyRule("Test1");
        rule.addAntecedent(vHealth,"Low");
        rule.addAntecedent(vDistance,"Low");
        rule.addConsequent(vFear,"High");
        this.system.addRule(rule);

        // Inferral
        this.system.infer();
    }
Exemple #7
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 #8
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 #9
0
        public void TestFuzzyRule()
        {
            IMemebershipFunction coldFx, warmFx, hotFx;

            this.GetMembershipFunctions(out coldFx, out warmFx, out hotFx);

            FuzzyVariable <Temperature> cold = new FuzzyVariable <Temperature>(Temperature.Cold, coldFx);
            FuzzyVariable <Temperature> warm = new FuzzyVariable <Temperature>(Temperature.Warm, warmFx);
            FuzzyVariable <Temperature> hot  = new FuzzyVariable <Temperature>(Temperature.Hot, hotFx);

            var exp = cold.AsExpression().And(warm).Or(hot.AsExpression().Not());
            FuzzyRule <Command> rule = new FuzzyRule <Command>(Command.Heat, exp);

            float         inputTemp = 10;
            FuzzyValueSet valueSet  = new FuzzyValueSet();

            valueSet.Set(cold.fX(inputTemp));
            valueSet.Set(warm.fX(inputTemp));
            valueSet.Set(hot.fX(inputTemp));
            // 0.6666 AND 0.3333 OR NOT 0.0

            var result = rule.Evaluate(valueSet);

            Assert.AreEqual(1.0f, result.membershipDegree, 0.000005f);
        }
 private void button_deleteFV_Click(object sender, EventArgs e)
 {
     if (dataGridViewFV.SelectedRows.Count > 0)
     {
         if (MessageBox.Show("Вы действительно хотите удалить эту нечёткую переменную?", "Подтверждение удаления",
                             MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
         {
             try
             {
                 FuzzyVariable fv = dbConnection.Get <FuzzyVariable>(dataGridViewFV.SelectedRows[0].Cells["FVId"].Value);
                 fv.deleted = 1;
                 dbConnection.Update(fv);
                 refreshFuzzyTable(selectedLinguisticVariable);
             }
             catch (Exception ex)
             {
                 //Exception may occur when dbConnection is null
                 MessageBox.Show("Произошла ошибка при работе с базой данных: " + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
         }
     }
     else
     {
         MessageBox.Show("Необходимо выбрать нечёткую переменную", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     }
 }
Exemple #11
0
        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);
        }
        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);
        }
Exemple #13
0
        public string CreateFuzzyRuleAndReturnResult(FetchRuleDTO rules, double inputValue)
        {
            FuzzySystemResultDTO system = new FuzzySystemResultDTO();

            system     = CreateSystem(rules, inputValue);
            _fsGround  = system.System;
            inputValue = system.InputValue;


            FuzzyVariable fvInput  = _fsGround.InputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName);
            FuzzyVariable fvOutput = _fsGround.OutputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName);

            Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>();

            inputValues.Add(fvInput, inputValue);

            Dictionary <FuzzyVariable, double> result = _fsGround.Calculate(inputValues);

            _fsGround.DefuzzificationMethod = DefuzzificationMethod.Centroid;

            double outputValue = result[fvOutput];
            string outputType  = ReturnLimitNearbyResults(rules, outputValue);

            return(outputType);
        }
Exemple #14
0
 public static FGUIVariable createFGUIVariable(FuzzyVariable v)
 {
     GameObject go = (GameObject)Instantiate(prefabFGUIVariable);
     FGUIVariable gui = go.GetComponent<FGUIVariable>();
     gui.setVariable(v);
     return gui;
 }
    public FuzzyVariable CreateFLV(string name)
    {
        FuzzyVariable fuzzyVariable = new FuzzyVariable();

        m_Variables.Add(name, fuzzyVariable);
        m_Variables.TryGetValue(name, out fuzzyVariable);
        return(fuzzyVariable);
    }
        private void OnAddValue(MouseEventArgs e, FuzzyVariable variable)
        {
            Random     rnd = new Random();
            FuzzyValue fv  = new FuzzyValue(variable, $"Value-{rnd.Next():X08}",
                                            $"Description-{rnd.Next():X08}");

            variable.AddValue(fv);
        }
Exemple #17
0
 private void SecondNameChanged(object sender, EventArgs e)
 {
     this.second = (FuzzyVariable)secondName.SelectedItem;
     if (second != null)
     {
         secondValue.DataSource = ((FuzzyVariable)secondName.SelectedItem).Labels;
     }
 }
Exemple #18
0
 private void FirstNameChanged(object sender, EventArgs e)
 {
     this.first = (FuzzyVariable)firstName.SelectedItem;
     if (first != null)
     {
         firstValue.DataSource = new BindingList <string>(first.Labels);
     }
 }
        public void CreateFuzzyFLV()
        {
            FuzzyModule fuzzyModule = new FuzzyModule();

            FuzzyVariable distanceToTarget = fuzzyModule.CreateFLV("DistanceToTarget");

            Assert.NotEqual(null, distanceToTarget);
        }
        private void OnDuplicateValue(MouseEventArgs e, FuzzyVariable variable, FuzzyValue value)
        {
            FuzzyValue copy = value.Clone();

            //copy.Name += " (kopia)";
            //copy.Description += " (kopia)";

            variable.AddValue(copy);
        }
        private async Task OnRemoveVariable(MouseEventArgs e, FuzzyVariable variable)
        {
            if (!await MessageBox.OkCancel(this.Modal, "Pytanie", $"Czy chcesz <b>usunąć</b> zmienną lingwistyczną {variable.Name}?<br/>Usunięcie zmiennej nie spowoduje usunięcia reguł związanych z tą zmienną"))
            {
                return;
            }

            BoardProvider.Board.RemoveVariable(variable);
        }
Exemple #22
0
 public EditFV(SQLiteConnection arg_dbConnection, int arg_linguisticVariableId, FuzzyVariable arg_fuzzyVariable) : this(arg_dbConnection, arg_linguisticVariableId)
 {
     if (arg_fuzzyVariable != null)
     {
         fuzzyVariable     = arg_fuzzyVariable;
         textBox_name.Text = fuzzyVariable.name;
         Text = "Редактирование нечёткой переменной";
     }
 }
Exemple #23
0
        private static Term GetTerm(FuzzyVariable variable, string name)
        {
            var term = variable.Terms.FirstOrDefault(x => x.Name == name);

            if (term == null)
            {
                throw new ProblemConditionsParseException("Не найдено значение " + name + " нечеткой переменной " + variable.Name);
            }
            return(term);
        }
Exemple #24
0
        MamdaniFuzzySystem CreateSystem()
        {
            //
            // Create empty fuzzy system
            //
            MamdaniFuzzySystem fsTips = new MamdaniFuzzySystem();

            //
            // Create input variables for the system
            //
            FuzzyVariable fvService = new FuzzyVariable("service", 0.0, 10.0);

            fvService.Terms.Add(new FuzzyTerm("poor", new TriangularMembershipFunction(-5.0, 0.0, 5.0)));
            fvService.Terms.Add(new FuzzyTerm("good", new TriangularMembershipFunction(0.0, 5.0, 10.0)));
            fvService.Terms.Add(new FuzzyTerm("excellent", new TriangularMembershipFunction(5.0, 10.0, 15.0)));
            fsTips.Input.Add(fvService);

            FuzzyVariable fvFood = new FuzzyVariable("food", 0.0, 10.0);

            fvFood.Terms.Add(new FuzzyTerm("rancid", new TrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
            fvFood.Terms.Add(new FuzzyTerm("delicious", new TrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
            fsTips.Input.Add(fvFood);

            //
            // Create output variables for the system
            //
            FuzzyVariable fvTips = new FuzzyVariable("tips", 0.0, 30.0);

            fvTips.Terms.Add(new FuzzyTerm("cheap", new TriangularMembershipFunction(0.0, 5.0, 10.0)));
            fvTips.Terms.Add(new FuzzyTerm("average", new TriangularMembershipFunction(10.0, 15.0, 20.0)));
            fvTips.Terms.Add(new FuzzyTerm("generous", new TriangularMembershipFunction(20.0, 25.0, 30.0)));
            fsTips.Output.Add(fvTips);

            //
            // Create three fuzzy rules
            //
            try
            {
                MamdaniFuzzyRule rule1 = fsTips.ParseRule("if (service is poor )  or (food is rancid) then tips is cheap");
                MamdaniFuzzyRule rule2 = fsTips.ParseRule("if ((service is good)) then tips is average");
                MamdaniFuzzyRule rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");

                fsTips.Rules.Add(rule1);
                fsTips.Rules.Add(rule2);
                fsTips.Rules.Add(rule3);
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Parsing exception: {0}", ex.Message));
                return(null);
            }

            return(fsTips);
        }
Exemple #25
0
        public HouseMemberFuzzyCalc([NotNull] Logging.Logger logger)
        {
            _logger = logger;
            //
            // Create empty fuzzy system
            //

            //
            // Create input variables for the system
            //
            var energy = new FuzzyVariable("energy", 0.0, 10000.0);

            //// finetune these parameters some more / automate the fine tuning
            energy.Terms.Add(new FuzzyTerm("zeroenergy", new TriangularMembershipFunction(-5.0, 0.0, 1000)));
            energy.Terms.Add(new FuzzyTerm("onethousand", new TrapezoidMembershipFunction(1000, 1200, 1300, 1800)));
            energy.Terms.Add(new FuzzyTerm("twothousand", new TrapezoidMembershipFunction(1500, 2200, 2500, 3500)));
            energy.Terms.Add(new FuzzyTerm("threethousand", new TrapezoidMembershipFunction(3300, 4000, 4700, 5000)));
            energy.Terms.Add(new FuzzyTerm("fourthousand", new TrapezoidMembershipFunction(4500, 5000, 6000, 6500)));
            energy.Terms.Add(new FuzzyTerm("fivethousand", new TriangularMembershipFunction(6500, 7500, 8000)));
            energy.Terms.Add(new FuzzyTerm("sixthousand", new TriangularMembershipFunction(7000, 8000, 10000)));
            _fsTips.Input.Add(energy);

            /*FuzzyVariable fvFood = new FuzzyVariable("food", 0.0, 10.0);
             * fvFood.Terms.Add(new FuzzyTerm("rancid", new TrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
             * fvFood.Terms.Add(new FuzzyTerm("delicious", new TrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
             * fsTips.Input.Add(fvFood);*/

            //
            // Create output variables for the system
            //
            var people = new FuzzyVariable("people", 0.0, 10);

            people.Terms.Add(new FuzzyTerm("zero", new TriangularMembershipFunction(0.0, 0.2, 0.5)));
            people.Terms.Add(new FuzzyTerm("oneperson", new TriangularMembershipFunction(0.0, 1, 2)));
            people.Terms.Add(new FuzzyTerm("twopersons", new TriangularMembershipFunction(1, 2, 3)));
            people.Terms.Add(new FuzzyTerm("threepersons", new TriangularMembershipFunction(2, 3, 4)));
            people.Terms.Add(new FuzzyTerm("fourpersons", new TriangularMembershipFunction(3, 4, 5)));
            people.Terms.Add(new FuzzyTerm("fivepersons", new TriangularMembershipFunction(4, 5, 6)));
            people.Terms.Add(new FuzzyTerm("sixpersons", new TriangularMembershipFunction(5, 6, 7)));
            _fsTips.Output.Add(people);

            //
            // Create three fuzzy rules
            //
            //  try
            //            {// or (food is rancid)
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is zeroenergy ) then people is zero"));
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is onethousand) then people is oneperson"));
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is twothousand) then (people is twopersons)"));
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is threethousand) then (people is threepersons)"));
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is fourthousand) then (people is fourpersons)"));
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is fivethousand) then (people is fivepersons)"));
            _fsTips.Rules.Add(_fsTips.ParseRule("if (energy is sixthousand) then (people is sixpersons)"));
        }
        private void OnAddVariable(MouseEventArgs e)
        {
            Random        rnd = new Random();
            FuzzyVariable fv  = new FuzzyVariable()
            {
                Name        = $"Variable-{rnd.Next():X08}",
                Description = $"Description-{rnd.Next():X08}"
            };

            BoardProvider.Board.AddVariable(fv);
        }
Exemple #27
0
        static FuzzyVariable DefineAgeVariable()
        {
            var age = new FuzzyVariable("age");

            age.AddTerm(new FuzzyTerm("child", new TrapezoidMembershipFunction(0.0, 0.0, 10.0, 14.0)));
            age.AddTerm(new FuzzyTerm("adolescent", new TrapezoidMembershipFunction(10.0, 13.0, 17.0, 20.0)));
            age.AddTerm(new FuzzyTerm("adult", new TrapezoidMembershipFunction(17.0, 21.0, 36.0, 40.0)));
            age.AddTerm(new FuzzyTerm("middle-aged", new TrapezoidMembershipFunction(36.0, 40.0, 48.0, 52.0)));
            age.AddTerm(new FuzzyTerm("aged", new TrapezoidMembershipFunction(48.0, 60.0, 80.0, 80.0)));
            return(age);
        }
Exemple #28
0
        static FuzzyVariable DefineTemperatureVariable()
        {
            var temperature = new FuzzyVariable("temperature");

            temperature.AddTerm(new FuzzyTerm("freezing", new TriangularMembershipFunction(5.0, 10.0, 15.0)));
            temperature.AddTerm(new FuzzyTerm("cold", new TriangularMembershipFunction(10.0, 15.0, 20.0)));
            temperature.AddTerm(new FuzzyTerm("chilly", new TriangularMembershipFunction(15.0, 20.0, 25.0)));
            temperature.AddTerm(new FuzzyTerm("warm", new TriangularMembershipFunction(20.0, 25.0, 30.0)));
            temperature.AddTerm(new FuzzyTerm("hot", new TriangularMembershipFunction(25.0, 30.0, 35.0)));
            return(temperature);
        }
 public EditVariableForm(FuzzyVariable variable)
     : this()
 {
     this.Text = "Редактирование нечеткой переменной";
     this.variableName.Text = variable.Name;
     //this.variableName.Enabled = false;
     this.variableLingName.Text = variable.LingName;
     this.isResult.Checked      = variable.IsResult;
     _terms = variable.Terms;
     RefreshFormListView();
 }
Exemple #30
0
        private void CreateFact(object sender, EventArgs e)
        {
            string name = Interaction.InputBox("Введите имя переменной",
                                               "Имя переменной", "Имя переменной");

            currentFact = new FuzzyVariable(name, "", currMin, currMax);
            for (int i = 0; i < labels.Count; i++)
            {
                currentFact.AddSet(labels[i], functions[i]);
            }
            this.Hide();
        }
Exemple #31
0
        /// <summary>
        /// Операция "меньше" между нечетким и четким значениями.
        /// Возвращает true, если конец диапазона четких значений нечеткой переменной меньше, чем четкое значение.
        /// </summary>
        /// <param name="fuzzyValue">Нечеткое значение</param>
        /// <param name="intValue">Четкое значение</param>
        public bool fuzzyLess(string fuzzyValue, int intValue)
        {
            FuzzyVariable fuzzyVariable = getFuzzyVariableByName(fuzzyValue);

            if (fuzzyVariable != null)
            {
                return(fuzzyVariable.rangeEnd < intValue);
            }
            else
            {
                return(false);
            }
        }
Exemple #32
0
        /// <summary>
        /// Операция "меньше либо равно" между нечетким и четким значениями.
        /// Возвращает true, если конец диапазона четких значение нечеткой переменной меньше значения четкой переменной, или значение четкой переменной находится в пределах этого диапазона.
        /// </summary>
        /// <param name="fuzzyValue">Нечеткое значение</param>
        /// <param name="intValue">Четкое значение</param>
        public bool fuzzyLessOrEquals(string fuzzyValue, int intValue)
        {
            FuzzyVariable fuzzyVariable = getFuzzyVariableByName(fuzzyValue);

            if (fuzzyVariable != null)
            {
                return((fuzzyVariable.rangeEnd < intValue) || ((intValue >= fuzzyVariable.rangeStart) && (intValue <= fuzzyVariable.rangeEnd)));
            }
            else
            {
                return(false);
            }
        }
    // Use this for initialization
    void Start()
    {
        variable = new FuzzyVariable(name,min,max);

        renderer.material.color = new Color(1,0,0);

        addMf("Short");

        FuzzyMembershipFunction mf = addMf("Long");
        mf.setOrigin(5);
        mf.setSlope(2);
        mf.setWidth(4);

        mf = addMf("Absurd");
        mf.setOrigin(8);
        mf.setSlope(5);
        mf.setWidth(1);
    }
    public FuzzyMembershipFunction(string label, FuzzyVariable fuzzy_var, float slope, float origin, float width)
    {
        this.label = label;
        this.fuzzy_var = fuzzy_var;

        // Initialisation

        // The number of points for this FMF is determined by the resolution and the range of values for the variable
        N = Mathf.FloorToInt((fuzzy_var.max-fuzzy_var.min)/resolution)+1;
        this.x = new float[N];
        this.y = new float[N];

        // Default
        slopeVal = new Val(slope);
        originVal = new Val(origin);
        widthVal = new Val(width);
        recompute();

        //Debug.Log(this);
        //startRecomputing();
    }
Exemple #35
0
 // If V is L ...
 public void addAntecedent(FuzzyVariable v, string l)
 {
     this.inputs.Add(v);
     this.labelsIn.Add(l);
 }
Exemple #36
0
 // .. then V is L.
 public void addConsequent(FuzzyVariable v, string l)
 {
     this.outputs.Add(v);
     this.labelsOut.Add(l);
 }
Exemple #37
0
    private void testRead()
    {
        // Read a fuzzy system from Fuzzy Tactics Data files
        Dictionary<string,object> dictVariables =  Json.loadJsonFromFolder("Assets/Scripts/Fuzzy/json/variables");
        Dictionary<string,object> dictRules = Json.loadJsonFromFolder("Assets/Scripts/Fuzzy/json/rules");

        // Inference engine
        this.system.setEngine(new FuzzyInferenceEngine());

        // Variables
         	//((List<object>) dict["array"])[0]);
        List<object> listVariables = ((List<object>) dictVariables["variables"]);

        foreach (Dictionary<string,object> variable in listVariables){
            float min = (float)((double)variable["min"]);
            float max = (float)((double)variable["max"]);

            FuzzyVariable newVar = new FuzzyVariable((string)variable["name"],min,max);

            List<object> mfs = ((List<object>) variable["mfs"]);
            foreach (Dictionary<string,object> mf in mfs){
                float origin = (float) ((double)mf["origin"]);
                float slope = (float) ((double)mf["slope"]);
                float width = (float) ((double)mf["width"]);
                newVar.addMf((string)mf["label"],slope,origin,width);
            }

            this.variables[newVar.name] = newVar;

            print("Added new variable " + newVar);

        }

        // Rules
        List<object> listRules = ((List<object>) dictRules["rules"]);

        foreach (Dictionary<string,object> rule in listRules){
            float weight = (float)((double)rule["weight"]);

            FuzzyRule newRule = new FuzzyRule((string)rule["name"], weight);

            List<object> antecedents = ((List<object>) rule["antecedents"]);
            foreach (Dictionary<string,object> antecedent in antecedents){
                newRule.addAntecedent(this.variables[(string)antecedent["variable"]], (string)antecedent["label"]);
            }

            List<object> consequents = ((List<object>) rule["consequents"]);
            foreach (Dictionary<string,object> consequent in consequents){
                newRule.addConsequent(this.variables[(string)consequent["variable"]], (string)consequent["label"]);
            }

            this.system.addRule(newRule);

            Debug.Log("Added new rule: " + newRule);
        }

        // Inferral
        //this.system.infer();
    }
 // Constructor
 // A FMF is defined for a particular Fuzzy Variable and for a specific label
 public FuzzyMembershipFunction(string label, FuzzyVariable fuzzy_var)
     : this(label,fuzzy_var,1,0,0)
 {
 }
 public void setVariable(FuzzyVariable v)
 {
     this.v = v;
     this.name = v.name;
     textMesh.text = v.name;
 }
    // Use this for initialization
    void Start()
    {
        variable = new FuzzyVariable(name,min,max);

        renderer.material.color = new Color(0,1,0);
    }
 public DefuzzifiedValue(FuzzyVariable variable, MembershipFunction msf, double value)
 {
     Variable = variable;
     MembershipFunction = msf;
     Value = value;
 }