Logika Rozmyta c#

0

Witam,znalazłem bibliotękę do logiki rozmytej tylko nie bardzo wiem jak moje wartości z kodu przypisać do części rozmywania logiki rozmytej.Z góry dziękuje.
https://github.com/davidgrupp/Fuzzy-Logic-Sharp -strona biblioteki
Przykład podany na stronie biblioteki:
var water = new LinguisticVariable("Water");
var cold = water.MembershipFunctions.AddTrapezoid("Cold", 0, 0, 20, 40);
var warm = water.MembershipFunctions.AddTriangle("Warm", 30, 50, 70);
var hot = water.MembershipFunctions.AddTrapezoid("Hot", 50, 80, 100, 100);

var power = new LinguisticVariable("Power");
var low = power.MembershipFunctions.AddTriangle("Low", 0, 25, 50);
var high = power.MembershipFunctions.AddTriangle("High", 25, 50, 75);

IFuzzyEngine fuzzyEngine = new FuzzyEngineFactory().Default();

var rule1 = Rule.If(water.Is(cold).Or(water.Is(warm))).Then(power.Is(high));
var rule2 = Rule.If(water.Is(hot)).Then(power.Is(low));
fuzzyEngine.Rules.Add(rule1, rule2);

var result = fuzzyEngine.Defuzzify(new { water = 60 });

1

Rozumiesz jak to w ogóle działa?
Daj link do tego przykładu. To co wkleiłeś wygląda na niepełne.
Co to dla Ciebie znaczy "wartości z kodu" i o co Ci chodzi z przypisywaniem do części do rozmywania?
Ta linijka chyba realizuje całość wyliczenia. Podajesz wartość water = 60 i dla takiej wartości wody dostajesz ostrą, po defuzyfikacji, wartość Power. Tak się domyślam.

var result = fuzzyEngine.Defuzzify(new { water = 60 });

0

Rozumiem jak to działa.Tylko mam taki problem ,że jak wpisuje wartość np: var result = fuzzyEngine.Defuzzify(new { water = 30 });
to wtedy wyskakuje mi błąd :
System.ArgumentException: „Must provide a double, decimal, or integer input value for all variables. Missing: water”

https://github.com/davidgrupp/Fuzzy-Logic-Sharp/blob/master/README.md

1

Hm... SOA#1. U mnie ten przykład działa na VS2015 i VS 2019
Masz link do mojego projektu na githubie. Może masz cos poprzestawiane we właściwościach projektu albo przypisujesz zmienną, która nie jest liczbą.
https://github.com/JacekCzapla/fsl_example.git

0

Zaczęło mi działac dzięki za pomoc , a mam pytanie jeszcze odosnie dodawania kolejnych wartości wejściowych, jak je mogę dodać
Tutaj dodaje wartości zmiennej woda
var result = fuzzyEngine.Defuzzify(new { water = 60 });

var result = fuzzyEngine.Defuzzify(new { olej = 60 })
W momencie gdy wpiszę wartość wejściową olej to wciąż wyskakuje mi taki sam błąd jak wyzej .
Potrzebuje żeby to wyglądało tak jak na załączniku:
Z góry dziękuję

1

Mój przykład jest bez sensu ale powinno to wyglądać tak (ostatnia linia)

var water = new LinguisticVariable("Water");
            var cold = water.MembershipFunctions.AddTrapezoid("Cold", 0, 0, 20, 40);
            var warm = water.MembershipFunctions.AddTriangle("Warm", 30, 50, 70);
            var hot = water.MembershipFunctions.AddTrapezoid("Hot", 50, 80, 100, 100);

            var sugar = new LinguisticVariable("Sugar");
            var big = water.MembershipFunctions.AddTrapezoid("big", 0, 0, 20, 40);
            var small = water.MembershipFunctions.AddTrapezoid("small", 50, 80, 100, 100);


            var power = new LinguisticVariable("Power");
            var low = power.MembershipFunctions.AddTriangle("Low", 0, 25, 50);
            var medium = power.MembershipFunctions.AddTriangle("Medium", 25, 50, 75);
            var high = power.MembershipFunctions.AddTriangle("High", 50, 75, 100);

            IFuzzyEngine fuzzyEngine = new FuzzyEngineFactory().Default();


            var rule1 = Rule.If(water.Is(cold).And(sugar.Is(big))).Then(power.Is(high));
            var rule2 = Rule.If(water.Is(cold).And(sugar.Is(small))).Then(power.Is(medium));
            var rule3 = Rule.If(water.Is(hot).And(sugar.Is(big))).Then(power.Is(medium));
            var rule4 = Rule.If(water.Is(hot).And(sugar.Is(small))).Then(power.Is(low));

            
            fuzzyEngine.Rules.Add(rule1, rule2, rule3, rule4);

            var result = fuzzyEngine.Defuzzify(new { water = 90, sugar=30 });

1 użytkowników online, w tym zalogowanych: 0, gości: 1