Logika Rozmyta c#

Odpowiedz Nowy wątek
2019-11-18 21:01
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 });

Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99998915) - Tasmanian Devil 2019-11-18 21:21

Pozostało 580 znaków

2019-11-18 22:47
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 });

edytowany 1x, ostatnio: jacek.placek, 2019-11-18 22:47
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.9999917) - Tasmanian Devil 2019-11-18 22:51
Jakas ostra ta AI :) - jacek.placek 2019-11-18 23:04
Fakt, można będzie złagodzić nieco dla pojedynczych linijek kodu. - Ktos 2019-11-18 23:26

Pozostało 580 znaków

2019-11-18 23:39
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[...]c-Sharp/blob/master/README.md

edytowany 2x, ostatnio: poczatkujacy_janek, 2019-11-18 23:40

Pozostało 580 znaków

2019-11-19 10:12

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

Pozostało 580 znaków

2019-11-20 11:49
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ę

edytowany 1x, ostatnio: poczatkujacy_janek, 2019-11-20 11:57

Pozostało 580 znaków

2019-11-20 12:02
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 });
edytowany 1x, ostatnio: jacek.placek, 2019-11-20 12:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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