Crates.io | rsfuzzymind |
lib.rs | rsfuzzymind |
version | 0.1.0 |
source | src |
created_at | 2024-08-08 17:30:12.594756 |
updated_at | 2024-08-08 17:30:12.594756 |
description | A Rust library for fuzzy logic that includes fuzzy set operations, rule-based evaluations, and inference for determining priorities. |
homepage | https://github.com/fadedreams/rsfuzzymind |
repository | https://github.com/fadedreams/rsfuzzymind |
max_upload_size | |
id | 1329784 |
size | 12,181 |
This library provides a robust framework for implementing fuzzy logic systems in Rust. It includes classes for defining fuzzy sets and rules, as well as an inference engine for evaluating those rules to determine priorities or other outcomes. The library supports various fuzzy set operations and provides methods for combining fuzzy sets, evaluating membership degrees, and calculating centroids.
For example, you can use this library to build a fuzzy logic-based priority assessment system for handling customer support tickets. In this system, fuzzy sets might represent urgency levels (such as "Urgent", "High Priority", "Medium Priority", "Low Priority"), and rules could evaluate ticket scores to determine the appropriate priority level. The inference engine will process these rules and aggregate the results to suggest the most suitable priority for each ticket. This allows you to handle tickets more effectively by automating priority determination based on fuzzy logic.
Add the library to your Cargo.toml:
[dependencies]
rsfuzzymind = "0.1"
FuzzySet
Represents a fuzzy set with a name and a membership function. Key methods include:
new(name: &str, membership_function: Arc<dyn Fn(f64) -> f64 + Send + Sync>) -> Self
membership_degree(x: f64) -> f64
union(&self, other: &FuzzySet) -> FuzzySet
intersection(&self, other: &FuzzySet) -> FuzzySet
complement(&self) -> FuzzySet
normalize(&self) -> FuzzySet
centroid(min_val: f64, max_val: f64, step: f64) -> f64
FuzzyRule
Represents a rule with a condition, consequence fuzzy set, and weight. Key methods include:
new(condition: Box<dyn Fn(f64) -> bool + Send + Sync>, consequence: FuzzySet, weight: f64) -> Self
evaluate(input: f64) -> Option<(FuzzySet, f64)>
InferenceEngine
Aggregates results from multiple FuzzyRule
instances to infer a priority level. Key methods include:
new(rules: Vec<FuzzyRule>) -> Self
infer(input: f64) -> String
Here's a basic example demonstrating how to set up and use the library to assess ticket priorities:
use std::collections::HashMap;
use std::sync::Arc;
use rsfuzzymind::{FuzzySet, FuzzyRule, InferenceEngine};
fn create_urgency_set() -> FuzzySet {
FuzzySet::new(
"Urgent",
Arc::new(|x| if x > 0.8 { 1.0 } else { 0.0 }),
)
}
fn create_complexity_set() -> FuzzySet {
FuzzySet::new(
"Complex",
Arc::new(|x| if x > 0.5 { 1.0 } else { 0.0 }),
)
}
fn create_priority_rules() -> Vec<FuzzyRule> {
vec![
FuzzyRule::new(
Box::new(|x| x > 0.9),
create_urgency_set(),
1.0,
),
]
}
fn create_inference_engine() -> InferenceEngine {
InferenceEngine::new(create_priority_rules())
}
fn infer_ticket_priority(engine: &InferenceEngine, ticket: &HashMap<String, f64>) -> String {
let score = ticket.get("score").cloned().unwrap_or(0.0);
engine.infer(score)
}
fn main() {
let engine = create_inference_engine();
let mut ticket = HashMap::new();
ticket.insert("score".to_string(), 0.95);
let priority = infer_ticket_priority(&engine, &ticket);
println!("Ticket Priority: {}", priority);
}
This library is licensed under the MIT License.