Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/olivervea/fluentfuzzy
FluentFuzzy is a package for doing fuzzy logic in .NET with a natural fluent syntax.
https://github.com/olivervea/fluentfuzzy
fuzzy-logic nuget unity winforms
Last synced: 4 days ago
JSON representation
FluentFuzzy is a package for doing fuzzy logic in .NET with a natural fluent syntax.
- Host: GitHub
- URL: https://github.com/olivervea/fluentfuzzy
- Owner: OliverVea
- License: mit
- Created: 2023-08-17T18:15:18.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-12-09T06:34:37.000Z (2 months ago)
- Last Synced: 2024-12-12T20:16:45.860Z (about 2 months ago)
- Topics: fuzzy-logic, nuget, unity, winforms
- Language: C#
- Homepage:
- Size: 357 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# FluentFuzzy
FluentFuzzy is a package for doing fuzzy logic in .NET with a natural fluent syntax.
> FluentFuzzy is very much WIP and should be expected to be updated with breaking changes.
## Contents
`FluentFuzzy` contains the core fuzzy logic functionality.
`FluentFuzzy.Visualization` has visualization for some `FluentFuzzy` classes.
## Using
After importing the Nuget package, using FluentFuzzy is a 2-step process.
### Setting up input and output
`FuzzyInput`s and `FuzzyOutput`s can be set up in the following manner:
```cs
// test/FluentFuzzy.Test/Example.cs#L10-L12const int healthValue = 35;
var health = new FuzzyInput(() => healthValue);
var flee = new FuzzyOutput();
````FuzzyInput` requires a `Func` to get the current crisp value of the input.
### Setting up member functions
The next step is adding member functions to each input:
```cs
// test/FluentFuzzy.Test/Example.cs#L14-L20const int low = 0;
const int medium = 1;
const int high = 2;health.Set(low, new Trapezoid(0, 0, 25, 50));
health.Set(medium, new Triangle(25, 50, 75));
health.Set(high, new Trapezoid(50, 75, 100, 100));
```Currently, the following membership functions have been implemented:
* `Triangle` defines a triangle.
* `Trapezoid` defines a trapezoid.
* `Line` defines a line.
* `Value` defines a single value.
* `AtLeast` defines a threshold value.Custom membership functions can be created by implementing the `IMembershipFunction` interface.
After the input functions, membership functions can be added to the `FuzzyOutput`
```cs
// test/FluentFuzzy.Test/Example.cs#L22-L24flee.Set(low, new Triangle(-0.5, 0, 0.5));
flee.Set(medium, new Triangle(0, 0.5, 1));
flee.Set(high, new Triangle(0.5, 1, 1.5));
```The only currently supported defuzzification method is a version of the centroid method. As some of the membership functions, namely `Line`, `Value` and `AtLeast` do not have useful centroids, these cannot be used as output member functions.
Custom output membership functions can be created by implementing the `IHasCentroid` interface.
### Setting up fuzzy rules
After setting up the fuzzy inputs and outputs, rules can be created to connect them.
Rules are created with a readable fluent syntax:
```cs
// test/FluentFuzzy.Test/Example.cs#L26-L28FuzzyRule.If(health.Is(high)).Then(flee.Is(low));
FuzzyRule.If(health.Is(medium)).Then(flee.Is(medium));
FuzzyRule.If(health.Is(low)).Then(flee.Is(high));
```### Evaluating an output
After creating the fuzzy ruleset, the output can be evaluated by calling the `Evaluate` method on the output:
```cs
// test/FluentFuzzy.Test/Example.cs#L30-L30Console.WriteLine($"flee(health: {health.Value}) = {flee.Evaluate()}"); // flee(health: 35) = 0,8
```