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.