home Forums # Technical Support Time and Absolute Values? Reply To: Time and Absolute Values?

#970

Keymaster

Hi Fishwaldo,

Thank you for your post and for sharing information about an interesting application of fuzzylite.

As for now, I am reluctant to allow the kind of rules you present, but I will surely consider it for another version of fuzzylite in the future.

My solution is to create an InputVariable called Time, besides InputVariable Room, as follows:

``````InputVariable: Time
enabled: true
range: 0.0 23.59
term: After6pm Function ge(Time, 18)
term: Before6pm Function lt(Time, 18)
term: After8pm Function ge(Time, 20)
term: Before8pm Function lt(Time, 20)
InputVariable: Room
enabled: true
range: 0.0 1.0
term: Occupied Function eq(Room, 1.0)
term: Empty Function ~eq(Room, 1.0)``````

Then, the rules would be:

``````RuleBlock:
conjunction: AlgebraicProduct
activation: AlgebraicProduct
rule: if Room is Occupied and Time is After6pm then AirCond is fullspeed``````

The changes you need to make in fuzzylite are the following:

In Operation.h, you need to create the following methods,

``````static scalar gt(scalar a, scalar b); //greater than
static scalar ge(scalar a, scalar b); //greater than or equal to
static scalar eq(scalar a, scalar b); //equal to
static scalar le(scalar a, scalar b); //less than or equal to
static scalar lt(scalar a, scalar b); //less than
static scalar Operation::logicalNot(scalar a) {
return isEq(a, 1.0) ? 0.0 : 1.0; //Implementation in Operation.cpp
}``````

and within the methods utilize the respective calls to `Op::isGt`, `Op::isGE`, etc.

In Function.cpp, you need to add the new methods as follows:

``````loadBuiltInFunctions(){
this->functions["gt"] = new BuiltInFunction("gt", &(fl::Op::gt));
this->functions["ge"] = new BuiltInFunction("ge", &(fl::Op::ge));
this->functions["eq"] = new BuiltInFunction("eq", &(fl::Op::eq));
this->functions["le"] = new BuiltInFunction("le", &(fl::Op::le));
this->functions["lt"] = new BuiltInFunction("lt", &(fl::Op::lt));
}