Add membership function and continuous set basic defs

This commit is contained in:
Alexander Ignatov 2021-12-16 12:26:50 +02:00
parent 3fdfb14381
commit 186d94ff17
4 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,27 @@
public struct ContinuousFuzzySet: FuzzySet {
public typealias Element = Double
private let membershipFunction: MembershipFunction
public init(membershipFunction: MembershipFunction) {
self.membershipFunction = membershipFunction
}
public init(membershipFunction: @escaping (Element) -> Grade) {
self.membershipFunction = MembershipFunction(membershipFunction)
}
public func grade(forElement element: Element) -> Grade {
membershipFunction(element)
}
}
public extension ContinuousFuzzySet {
static var empty: Self {
.init(membershipFunction: .zero)
}
static var universe: Self {
.init(membershipFunction: .one)
}
}

View File

@ -0,0 +1,29 @@
public struct MembershipFunction {
private let function: (Double) -> Double
public init(_ function: @escaping (Double) -> Grade) {
self.function = function
}
public func callAsFunction(_ x: Double) -> Double {
function(x)
}
}
/// Common membership functions
public extension MembershipFunction {
static var zero: Self {
.init { _ in 0.0 }
}
static var one: Self {
.init { _ in 1.0 }
}
static func fuzzySingleton(_ a: Double) -> Self {
.init { $0 == a ? 1.0 : 0.0 }
}
// TODO: Add more
}

View File

@ -0,0 +1,6 @@
import XCTest
import FuzzyKit
final class ContinuousFuzzySetTests: XCTestCase {
// TODO
}

View File

@ -0,0 +1,13 @@
import XCTest
import FuzzyKit
final class MembershipFunctionTests: XCTestCase {
func test_isCallable() throws {
let sut = MembershipFunction.one
let x = 1.0
let result = sut(x)
XCTAssertEqual(result, x)
}
}