Exemple #1
0
 /// <summary>
 /// Creates mirrored rules; useful if in1 and in2 are of the same type and can be given in any order/can be swapped, ie marks
 /// </summary>
 /// <param name="outVar"></param>
 /// <param name="outTermName"></param>
 /// <param name="op"></param>
 /// <param name="in1"></param>
 /// <param name="in1TermName1"></param>
 /// <param name="in2"></param>
 /// <param name="in2TermName"></param>
 public void AddRule(Linguistic outVar, string outTermName, FuzzyOperator op, Linguistic in1, string in1TermName, Linguistic in2, string in2TermName)
 {
     #region check for non-local references
     if (outVar.Name != OutVar.Name)
     {
         throw new KeyNotFoundException("Only the local output variable can be use; rule refers to " + outVar + "; local OutVar.Name = " + OutVar.Name);
     }
     if (InVars[in1.Name] == null)
     {
         throw new KeyNotFoundException("Only the local input variables can be use; rule refers to " + in1 + "; local InVars: " + InVars.Keys.ToArray().ToString());
     }
     if (InVars[in2.Name] == null)
     {
         throw new KeyNotFoundException("Only the local input variables can be use; rule refers to " + in2 + "; local InVars: " + InVars.Keys.ToArray().ToString());
     }
     if (InVars[in1.Name][in1TermName] == null)
     {
         throw new KeyNotFoundException("Only existing terms can be use; rule refers to " + in1TermName);
     }
     if (InVars[in2.Name][in2TermName] == null)
     {
         throw new KeyNotFoundException("Only existing terms can be use; rule refers to " + in2TermName);
     }
     #endregion
     Rules.Add(new FuzzyRule(OutVar, outTermName, InVars[in1.Name], in1TermName, op, InVars[in2.Name], in2TermName));
     Rules.Add(new FuzzyRule(OutVar, outTermName, InVars[in2.Name], in2TermName, op, InVars[in1.Name], in1TermName));
 }
Exemple #2
0
 public Reasoning(Linguistic Out, Linguistic In0, Linguistic In1)
 {
     OutVar           = Out;
     InVars           = new Dictionary <string, Linguistic>();
     InVars[In0.Name] = In0;
     InVars[In1.Name] = In1;
     Rules            = new List <FuzzyRule>();
 }
Exemple #3
0
 public FuzzyRule(Linguistic outVar, string outTermName, Linguistic in1, string in1TermName)
 {
     this.outVar = outVar;
     this.inVars = new List <Linguistic>();
     this.inVars.Add(in1);
     Operation = FuzzyOperator.OR;
     outTerm   = outVar.FindTerm(outTermName);
     inTerms   = new List <FuzzyTerm>();
     inTerms.Add(in1.FindTerm(in1TermName));
     Possibility = 0;
 }
Exemple #4
0
 /// <summary>
 /// Constructor for 4-point term
 /// </summary>
 /// <param name="lingVar">backreference to the hosting Linguistic</param>
 /// <param name="name">identifying name</param>
 /// <param name="x1">first x value with f(x) == 0; typical form: _/‾\_</param>
 /// <param name="x2">second x value with f(x) == 1; typical form: _/‾\_</param>
 /// <param name="x3">third x value with f(x) == 1; typical form: _/‾\_</param>
 /// <param name="x4">fourth x value with f(x) == 0; typical form: _/‾\_</param>
 public FuzzyTerm(Linguistic lingVar, string name, float x1, float x2, float x3, float x4)
 {
     if (lingVar == null)
     {
         throw new Exception("Error in constructor of FuzzyTerm");
     }
     if (!(x1 <= x2 && x2 <= x3 && x3 <= x4))
     {
         throw new Exception("Error in definition of FuzzyTerm, precondition violated: m1 <= m2 <= m3 <= m4");
     }
     var  = lingVar;
     Name = name;
     X1   = x1;
     X2   = x2;
     X3   = x3;
     X4   = x4;
     //lingVar.Add(this);
     RuleMax = 0;
 }
Exemple #5
0
 /// <summary>
 /// Predefined reasoning for four input variables
 /// </summary>
 /// <param name="Out"></param>
 /// <param name="In0"></param>
 /// <param name="In1"></param>
 /// <param name="In2"></param>
 /// <param name="In3"></param>
 public Reasoning(Linguistic Out, Linguistic In0, Linguistic In1, Linguistic In2, Linguistic In3)
     : this(Out, In0, In1)
 {
     InVars[In2.Name] = In2;
     InVars[In3.Name] = In3;
 }
Exemple #6
0
 /// <summary>
 /// Constructor for 3-point term
 /// </summary>
 /// <param name="lingVar">backreference to the hosting Linguistic</param>
 /// <param name="name">identifying name</param>
 /// <param name="x1">first x value with f(x) == 0; typical forms: _/\_, ‾\_, _/‾</param>
 /// <param name="x2">second x value with f(x) == 1; typical form: _/\_, ‾\_, _/‾</param>
 /// <param name="x3">third x value with f(x) == 0; typical form: _/\_, ‾\_, _/‾</param>
 public FuzzyTerm(Linguistic lingVar, string name, float x1, float x2, float x3)
     : this(lingVar, name, x1, x2, x2, x3)
 {
 }