toJSON
是Yuka js库中FuzzyAND模块的一个方法。该方法返回一个含有模糊量化和模糊控制规则的JSON对象,以便日后保存或导出。
FuzzyAND.toJSON()
该方法返回一个JSON对象,包含以下属性:
variables
: 包含每个变量的名称、偏移量和范围。rules
: 包含模糊控制规则的数组。每个规则都包含一个输入项、输出项和一个权重值。andMethod
: FuzzyAND使用的模糊AND方法的名称。orMethod
: FuzzyAND使用的模糊OR方法的名称。以下是FuzzyAND的toJSON
方法的使用方法;
const myFuzzyAND = new YUKA.FuzzyAND();
//添加变量
const distance = myFuzzyAND.createVariable('distance', 0, 10);
const speed = myFuzzyAND.createVariable('speed', 0, 10);
const steering = myFuzzyAND.createVariable('steering', -Math.PI, Math.PI);
//添加隶属函数
distance.addMembership('near', new YUKA.Triangle(0, 2.5, 5));
distance.addMembership('medium', new YUKA.Triangle(2.5, 5, 7.5));
distance.addMembership('far', new YUKA.Triangle(5, 7.5, 10));
speed.addMembership('slow', new YUKA.Triangle(0, 2.5, 5));
speed.addMembership('medium', new YUKA.Triangle(2.5, 5, 7.5));
speed.addMembership('fast', new YUKA.Triangle(5, 7.5, 10));
steering.addMembership('sharpLeft', new YUKA.Trapezoid(-Math.PI, -Math.PI, -Math.PI / 2, -Math.PI / 4));
steering.addMembership('left', new YUKA.Triangle(-Math.PI / 2, -Math.PI / 4, 0));
steering.addMembership('straightAhead', new YUKA.Triangle(-Math.PI / 4, 0, Math.PI / 4));
steering.addMembership('right', new YUKA.Triangle(0, Math.PI / 4, Math.PI / 2));
steering.addMembership('sharpRight', new YUKA.Trapezoid(Math.PI / 2, Math.PI / 4, Math.PI, Math.PI));
//添加规则
myFuzzyAND.addRule(
new YUKA.FuzzyRule(
new YUKA.FuzzyAND(
new YUKA.FuzzyTerm(distance.terms['near']),
new YUKA.FuzzyTerm(speed.terms['fast'])
),
steering.terms['sharpLeft'],
1
)
);
myFuzzyAND.addRule(
new YUKA.FuzzyRule(
new YUKA.FuzzyAND(
new YUKA.FuzzyTerm(distance.terms['medium']),
new YUKA.FuzzyTerm(speed.terms['medium'])
),
steering.terms['straightAhead'],
1
)
);
myFuzzyAND.addRule(
new YUKA.FuzzyRule(
new YUKA.FuzzyAND(
new YUKA.FuzzyTerm(distance.terms['far']),
new YUKA.FuzzyTerm(speed.terms['slow'])
),
steering.terms['sharpRight'],
1
)
);
//导出为JSON
const json = myFuzzyAND.toJSON();
导出的JSON对象如下:
{
"variables": {
"distance": {
"min": 0,
"max": 10,
"offset": 0,
"terms": [
{
"name": "near",
"func": {
"type": "Triangle",
"points": [
0,
0,
2.5
]
}
},
{
"name": "medium",
"func": {
"type": "Triangle",
"points": [
2.5,
5,
7.5
]
}
},
{
"name": "far",
"func": {
"type": "Triangle",
"points": [
5,
7.5,
10
]
}
}
]
},
"speed": {
"min": 0,
"max": 10,
"offset": 0,
"terms": [
{
"name": "slow",
"func": {
"type": "Triangle",
"points": [
0,
0,
2.5
]
}
},
{
"name": "medium",
"func": {
"type": "Triangle",
"points": [
2.5,
5,
7.5
]
}
},
{
"name": "fast",
"func": {
"type": "Triangle",
"points": [
5,
7.5,
10
]
}
}
]
},
"steering": {
"min": -3.141592653589793,
"max": 3.141592653589793,
"offset": 0,
"terms": [
{
"name": "sharpLeft",
"func": {
"type": "Trapezoid",
"points": [
-3.141592653589793,
-3.141592653589793,
-1.5707963267948966,
-0.7853981633974483
]
}
},
{
"name": "left",
"func": {
"type": "Triangle",
"points": [
-1.5707963267948966,
-0.7853981633974483,
0
]
}
},
{
"name": "straightAhead",
"func": {
"type": "Triangle",
"points": [
-0.7853981633974483,
0,
0.7853981633974483
]
}
},
{
"name": "right",
"func": {
"type": "Triangle",
"points": [
0,
0.7853981633974483,
1.5707963267948966
]
}
},
{
"name": "sharpRight",
"func": {
"type": "Trapezoid",
"points": [
1.5707963267948966,
0.7853981633974483,
3.141592653589793,
3.141592653589793
]
}
}
]
}
},
"rules": [
{
"input": {
"type": "FuzzyAND",
"terms": [
{
"type": "FuzzyTerm",
"variable": "distance",
"termName": "near"
},
{
"type": "FuzzyTerm",
"variable": "speed",
"termName": "fast"
}
]
},
"output": {
"type": "FuzzyTerm",
"variable": "steering",
"termName": "sharpLeft"
},
"weight": 1
},
{
"input": {
"type": "FuzzyAND",
"terms": [
{
"type": "FuzzyTerm",
"variable": "distance",
"termName": "medium"
},
{
"type": "FuzzyTerm",
"variable": "speed",
"termName": "medium"
}
]
},
"output": {
"type": "FuzzyTerm",
"variable": "steering",
"termName": "straightAhead"
},
"weight": 1
},
{
"input": {
"type": "FuzzyAND",
"terms": [
{
"type": "FuzzyTerm",
"variable": "distance",
"termName": "far"
},
{
"type": "FuzzyTerm",
"variable": "speed",
"termName": "slow"
}
]
},
"output": {
"type": "FuzzyTerm",
"variable": "steering",
"termName": "sharpRight"
},
"weight": 1
}
],
"andMethod": "min",
"orMethod": "max"
}