javascript-fuzzylogic
Version:
A library that allows for manipulation of fuzzy sets in JavaScript
409 lines (408 loc) • 16.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = require("../index");
var membershipFunction_1 = require("./membershipFunction");
describe('generateMembershipValues', function () {
it('should generate values for a triangular membership function', function () {
var result = [
{
membership: 0,
value: 0,
},
{
membership: 0,
value: 10,
},
{
membership: 0,
value: 20,
},
{
membership: 0.25,
value: 30,
},
{
membership: 0.5,
value: 40,
},
{
membership: 0.75,
value: 50,
},
{
membership: 1,
value: 60,
},
{
membership: 0.5,
value: 70,
},
{
membership: 0,
value: 80,
},
{
membership: 0,
value: 90,
},
{
membership: 0,
value: 100,
},
];
expect((0, membershipFunction_1.generateMembershipValues)({
type: index_1.MembershipFunctionType.Triangular,
parameters: {
left: 20,
center: 60,
right: 80,
minValue: 0,
maxValue: 100,
step: 10,
},
})).toStrictEqual(result);
expect(new index_1.FuzzySet('Test set').generateMembershipValues({
type: index_1.MembershipFunctionType.Triangular,
parameters: {
left: 20,
center: 60,
right: 80,
minValue: 0,
maxValue: 100,
step: 10,
},
}).values).toStrictEqual(result);
});
it('should generate values for a trapezoidal membership function', function () {
var result = [
{
membership: 0,
value: 0,
},
{
membership: 0,
value: 10,
},
{
membership: 1,
value: 20,
},
{
membership: 1,
value: 30,
},
{
membership: 1,
value: 40,
},
{
membership: 1,
value: 50,
},
{
membership: 1,
value: 60,
},
{
membership: 0.7142857142857143,
value: 70,
},
{
membership: 0.42857142857142855,
value: 80,
},
{
membership: 0.14285714285714285,
value: 90,
},
{
membership: 0,
value: 100,
},
];
expect((0, membershipFunction_1.generateMembershipValues)({
type: index_1.MembershipFunctionType.Trapezoidal,
parameters: {
bottomLeft: 10,
topLeft: 20,
topRight: 60,
bottomRight: 95,
minValue: 0,
maxValue: 100,
step: 10,
},
})).toStrictEqual(result);
expect(new index_1.FuzzySet('Test set').generateMembershipValues({
type: index_1.MembershipFunctionType.Trapezoidal,
parameters: {
bottomLeft: 10,
topLeft: 20,
topRight: 60,
bottomRight: 95,
minValue: 0,
maxValue: 100,
step: 10,
},
}).values).toStrictEqual(result);
});
it('should generate values for a gaussian membership function', function () {
var result = [
{
membership: 0.04393693362340742,
value: 0,
},
{
membership: 0.1353352832366127,
value: 10,
},
{
membership: 0.32465246735834974,
value: 20,
},
{
membership: 0.6065306597126334,
value: 30,
},
{
membership: 0.8824969025845955,
value: 40,
},
{
membership: 1,
value: 50,
},
{
membership: 0.8824969025845955,
value: 60,
},
{
membership: 0.6065306597126334,
value: 70,
},
{
membership: 0.32465246735834974,
value: 80,
},
{
membership: 0.1353352832366127,
value: 90,
},
{
membership: 0.04393693362340742,
value: 100,
},
];
expect((0, membershipFunction_1.generateMembershipValues)({
type: index_1.MembershipFunctionType.Gaussian,
parameters: {
center: 50,
standardDeviation: 20,
minValue: 0,
maxValue: 100,
step: 10,
},
})).toStrictEqual(result);
expect(new index_1.FuzzySet('Test set').generateMembershipValues({
type: index_1.MembershipFunctionType.Gaussian,
parameters: {
center: 50,
standardDeviation: 20,
minValue: 0,
maxValue: 100,
step: 10,
},
}).values).toStrictEqual(result);
});
it('should generate values for a sigmoidal membership function', function () {
var result = [
{
membership: 0.9999999999999065,
value: -10,
},
{
membership: 0.9999999999993086,
value: -9,
},
{
membership: 0.999999999994891,
value: -8,
},
{
membership: 0.9999999999622486,
value: -7,
},
{
membership: 0.9999999997210531,
value: -6,
},
{
membership: 0.9999999979388463,
value: -5,
},
{
membership: 0.9999999847700205,
value: -4,
},
{
membership: 0.9999998874648379,
value: -3,
},
{
membership: 0.9999991684719722,
value: -2,
},
{
membership: 0.9999938558253978,
value: -1,
},
{
membership: 0.9999546021312976,
value: 0,
},
{
membership: 0.9996646498695336,
value: 1,
},
{
membership: 0.9975273768433653,
value: 2,
},
{
membership: 0.9820137900379085,
value: 3,
},
{
membership: 0.8807970779778823,
value: 4,
},
{
membership: 0.5,
value: 5,
},
{
membership: 0.11920292202211755,
value: 6,
},
{
membership: 0.01798620996209156,
value: 7,
},
{
membership: 0.0024726231566347743,
value: 8,
},
{
membership: 0.0003353501304664781,
value: 9,
},
{
membership: 0.000045397868702434395,
value: 10,
},
];
expect((0, membershipFunction_1.generateMembershipValues)({
type: index_1.MembershipFunctionType.Sigmoidal,
parameters: {
slope: -2,
center: 5,
minValue: -10,
maxValue: 10,
step: 1,
},
})).toStrictEqual(result);
expect(new index_1.FuzzySet('Test set').generateMembershipValues({
type: index_1.MembershipFunctionType.Sigmoidal,
parameters: {
slope: -2,
center: 5,
minValue: -10,
maxValue: 10,
step: 1,
},
}).values).toStrictEqual(result);
});
});
describe('triangularMembershipFunction', function () {
it('should generate the correct value, for a given x value', function () {
var parameters = { left: 20, center: 60, right: 80 };
expect((0, membershipFunction_1.triangularMembershipFunction)(0, parameters)).toBe(0);
expect((0, membershipFunction_1.triangularMembershipFunction)(10, parameters)).toBe(0);
expect((0, membershipFunction_1.triangularMembershipFunction)(20, parameters)).toBe(0);
expect((0, membershipFunction_1.triangularMembershipFunction)(30, parameters)).toBe(0.25);
expect((0, membershipFunction_1.triangularMembershipFunction)(40, parameters)).toBe(0.5);
expect((0, membershipFunction_1.triangularMembershipFunction)(50, parameters)).toBe(0.75);
expect((0, membershipFunction_1.triangularMembershipFunction)(60, parameters)).toBe(1);
expect((0, membershipFunction_1.triangularMembershipFunction)(70, parameters)).toBe(0.5);
expect((0, membershipFunction_1.triangularMembershipFunction)(80, parameters)).toBe(0);
expect((0, membershipFunction_1.triangularMembershipFunction)(90, parameters)).toBe(0);
expect((0, membershipFunction_1.triangularMembershipFunction)(100, parameters)).toBe(0);
});
it('should return a value even if two parameters are the same', function () {
var parameters = { left: 0, center: 0, right: 80 };
expect((0, membershipFunction_1.triangularMembershipFunction)(0, parameters)).toBe(1);
expect((0, membershipFunction_1.triangularMembershipFunction)(80, parameters)).toBe(0);
});
});
describe('trapezoidalMembershipFunction', function () {
it('should generate the correct value, for a given x value', function () {
var parameters = { bottomLeft: 10, topLeft: 20, topRight: 60, bottomRight: 95 };
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(0, parameters)).toBe(0);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(10, parameters)).toBe(0);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(20, parameters)).toBe(1);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(30, parameters)).toBe(1);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(40, parameters)).toBe(1);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(50, parameters)).toBe(1);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(60, parameters)).toBe(1);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(70, parameters)).toBe(0.7142857142857143);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(80, parameters)).toBe(0.42857142857142855);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(90, parameters)).toBe(0.14285714285714285);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(100, parameters)).toBe(0);
});
it('should return a value even if two parameters are the same', function () {
var parameters = { bottomLeft: 0, topLeft: 0, topRight: 60, bottomRight: 60 };
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(0, parameters)).toBe(1);
expect((0, membershipFunction_1.trapezoidalMembershipFunction)(60, parameters)).toBe(1);
});
});
describe('gaussianMembershipFunction', function () {
it('should generate the correct value, for a given x value', function () {
var parameters = { standardDeviation: 20, center: 50 };
expect((0, membershipFunction_1.gaussianMembershipFunction)(0, parameters)).toBe(0.04393693362340742);
expect((0, membershipFunction_1.gaussianMembershipFunction)(10, parameters)).toBe(0.1353352832366127);
expect((0, membershipFunction_1.gaussianMembershipFunction)(20, parameters)).toBe(0.32465246735834974);
expect((0, membershipFunction_1.gaussianMembershipFunction)(30, parameters)).toBe(0.6065306597126334);
expect((0, membershipFunction_1.gaussianMembershipFunction)(40, parameters)).toBe(0.8824969025845955);
expect((0, membershipFunction_1.gaussianMembershipFunction)(50, parameters)).toBe(1);
expect((0, membershipFunction_1.gaussianMembershipFunction)(60, parameters)).toBe(0.8824969025845955);
expect((0, membershipFunction_1.gaussianMembershipFunction)(70, parameters)).toBe(0.6065306597126334);
expect((0, membershipFunction_1.gaussianMembershipFunction)(80, parameters)).toBe(0.32465246735834974);
expect((0, membershipFunction_1.gaussianMembershipFunction)(90, parameters)).toBe(0.1353352832366127);
expect((0, membershipFunction_1.gaussianMembershipFunction)(100, parameters)).toBe(0.04393693362340742);
});
});
describe('sigmoidalMembershipFunction', function () {
it('should generate the correct value, for a given x value', function () {
var parameters = { slope: -2, center: 5 };
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-10, parameters)).toBe(0.9999999999999065);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-9, parameters)).toBe(0.9999999999993086);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-8, parameters)).toBe(0.999999999994891);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-7, parameters)).toBe(0.9999999999622486);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-6, parameters)).toBe(0.9999999997210531);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-5, parameters)).toBe(0.9999999979388463);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-4, parameters)).toBe(0.9999999847700205);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-3, parameters)).toBe(0.9999998874648379);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-2, parameters)).toBe(0.9999991684719722);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(-1, parameters)).toBe(0.9999938558253978);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(0, parameters)).toBe(0.9999546021312976);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(1, parameters)).toBe(0.9996646498695336);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(2, parameters)).toBe(0.9975273768433653);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(3, parameters)).toBe(0.9820137900379085);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(4, parameters)).toBe(0.8807970779778823);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(5, parameters)).toBe(0.5);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(6, parameters)).toBe(0.11920292202211755);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(7, parameters)).toBe(0.01798620996209156);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(8, parameters)).toBe(0.0024726231566347743);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(9, parameters)).toBe(0.0003353501304664781);
expect((0, membershipFunction_1.sigmoidalMembershipFunction)(10, parameters)).toBe(0.000045397868702434395);
});
});