home Forums # Technical Support Feedback in QtFuzzyLite 6 Reply To: Feedback in QtFuzzyLite 6

#2626

Hi Joerg,

thank you for your interesting questions.

It would be better if you provide an example of what you are trying to achieve.

For what I understand, it seems to me that you may want to use output variables as antecedents in the rules, although this does not refer to the next simulation step (t+1). Consider the example “SimpleDimmerInverse”, where the output of Power is computed and used in the same simulation step:


#File: /fuzzylite/examples/mamdani/SimpleDimmerInverse.fll
Engine: SimpleDimmerInverse
InputVariable: Ambient
  enabled: true
  range: 0.000 1.000
  lock-range: false
  term: DARK Triangle 0.000 0.250 0.500
  term: MEDIUM Triangle 0.250 0.500 0.750
  term: BRIGHT Triangle 0.500 0.750 1.000
OutputVariable: Power
  enabled: true
  range: 0.000 1.000
  lock-range: false
  aggregation: Maximum
  defuzzifier: Centroid 200
  default: nan
  lock-previous: false
  term: LOW Triangle 0.000 0.250 0.500
  term: MEDIUM Triangle 0.250 0.500 0.750
  term: HIGH Triangle 0.500 0.750 1.000
OutputVariable: InversePower
  enabled: true
  range: 0.000 1.000
  lock-range: false
  aggregation: Maximum
  defuzzifier: Centroid 500
  default: nan
  lock-previous: false
  term: LOW Cosine 0.200 0.500
  term: MEDIUM Cosine 0.500 0.500
  term: HIGH Cosine 0.800 0.500
RuleBlock: 
  enabled: true
  conjunction: none
  disjunction: none
  implication: Minimum
  activation: General
  rule: if Ambient is DARK then Power is HIGH
  rule: if Ambient is MEDIUM then Power is MEDIUM
  rule: if Ambient is BRIGHT then Power is LOW
  rule: if Power is LOW then InversePower is HIGH
  rule: if Power is MEDIUM then InversePower is MEDIUM
  rule: if Power is HIGH then InversePower is LOW

Alternatively, you could (1) create your own activation method, or (2) create your own way to process the engine. For (1), you could create an activation method that stores the output values at (t-1), computes the current outputs at (t), and changes the current outputs according to (t-1). For (2), you do not execute Engine::process(), but instead create a method of your own to do the same as in (1). You can take a look at what Engine::process() does for an idea. In cases (1) and (2), you will not be able to see the simulation in QtFuzzyLite, though.

If you provide a more specific example of what you are trying to achieve, there may be other solutions.

Cheers.