Fuzzy
Introduction¶
A wrap of fuzzy logic (MIT license).
- Author of wrap : Rex , Core API : Michael Herzog
- Member of scene, or game object
Live demos¶
Usage¶
Install plugin¶
Load minify file¶
- Load plugin (minify file) in preload stage
scene.load.plugin('rexfuzzyplugin', 'https://raw.githubusercontent.com/rexrainbow/phaser3-rex-notes/master/dist/rexfuzzyplugin.min.js', true); - Add fuzzy module object
var fuzzyModule = scene.plugins.get('rexfuzzyplugin').add(config);
Import plugin¶
- Install rex plugins from npm
npm i phaser3-rex-plugins - Install plugin in configuration of game
import GashaponPlugin from 'phaser3-rex-plugins/plugins/fuzzy-plugin.js'; var config = { // ... plugins: { global: [{ key: 'rexGashapon', plugin: GashaponPlugin, start: true }, // ... ] } // ... }; var game = new Phaser.Game(config); - Add fuzzy module object
var fuzzyModule = scene.plugins.get('rexFuzzy').add(config);
Import class¶
- Install rex plugins from npm
npm i phaser3-rex-plugins - Import class
import BuildFuzzyModule from 'phaser3-rex-plugins/plugins/fuzzy.js'; - Add fuzzy module object
var fuzzyModule = BuildFuzzyModule(config);
Create instance¶
var fuzzyModule = scene.plugins.get('rexFuzzy').add(`
// Declare fuzzy sets
FuzzySetName : left, middle, right, setType
FuzzySetName : left, middle, right
FuzzySetName : left, right
// Declare rules
FuzzySetNameA => FuzzySetNameT
FuzzySetNameA and FuzzySetNameB => FuzzySetNameT
FuzzySetNameA or FuzzySetNameB => FuzzySetNameT
FuzzySetNameA or (FuzzySetNameA and FuzzySetNameB) => FuzzySetNameT
// More comment lines...
`);
configcan be a multiple lines string, or a plain object- A multiple lines string contains
FuzzySetName : left, middle, right, setType: A line with ':', declare a fuzzy set.FuzzySetName: Fuzzy set name in one of these format- Variable name with postfix
'+', or'-'. For example,HP-,HP,HP+,HP--,HP++, the variable name isHP. variableName.setName. For example,DIST.near,DIST.middle,DIST.far, the variable name isDIST.- Variable name and set name are composed of number(0-9) or English characters (A-Za-z).
- Variable name with postfix
left,middle,right: Left, middle, right point of fuzzy set, in numbers.left,right: Two numbers for left and right point, middle point is the average of (left + right).
setType:- Can be one of these string, or none.
- Left part :
leftShoulder,leftSCurve.- Default value is
leftShoulderfor first fuzzy set of a variable.
- Default value is
- Right part :
rightShoulder,rightSCurve.- Default value is
rightShoulderfor last fuzzy set of a variable.
- Default value is
- Middle parts :
triangular,singleton,normal.- Default value is
triangularfor other fuzzy sets of a variable.
- Default value is
- Left part :
- Can be one of these string, or none.
FuzzySetNameA and FuzzySetNameB => FuzzySetNameT: A line with '=>', declare a fuzzy rule.// ...: Comment lines
- A plain object
{ variables: { VariableName: [ { name: leftSetName, setType: undefined, parameters: [left, middle, right] }, { name: middleSetName, setType: undefined, parameters: [left, middle, right] }, { name: rightSetName, setType: undefined, parameters: [left, middle, right] }, ], // .... }, rules: [ 'FuzzySetNameA => FuzzySetNameT', 'FuzzySetNameA and FuzzySetNameB => FuzzySetNameT', 'FuzzySetNameA or FuzzySetNameB => FuzzySetNameT', // ... ] }
- A multiple lines string contains
Set input¶
fuzzyModule.fuzzify(variableName, value);
variableName: An antecedent variable name string.value: A number.
or
fuzzyModule.fuzzify({
varName: value,
});
Get result¶
var result = fuzzyModule.defuzzify(variableName);
variableName: A consequence variable name string.
or
var result = fuzzyModule.defuzzify([varName0, varName1, ...]);
result:{varName0: value0, varName1, value1, ...}
or
var result = fuzzyModule.defuzzify();
result:{varName0: value0, varName1, value1, ...}- Grab variable names from all consequence of rules.