#fuzzy #logic #set-operations #fuzzy-logic #fuzzy-set #inference-engine

no-std rsfuzzymind

一个Rust模糊逻辑库,包括模糊集操作、基于规则的评估和确定优先级的推理

1 个不稳定版本

0.1.0 2024年8月8日

#84无标准库

Download history 100/week @ 2024-08-05

100 每月下载量

自定义许可

11KB
141 代码行

模糊逻辑库

该库为在Rust中实现模糊逻辑系统提供了一个强大的框架。它包括定义模糊集和规则的类,以及用于评估这些规则以确定优先级或其他结果的推理引擎。该库支持各种模糊集操作,并提供组合模糊集、评估隶属度度和计算质心的方法。

例如,您可以使用此库构建一个基于模糊逻辑的优先级评估系统来处理客户支持工单。在此系统中,模糊集可能代表紧急程度(如“紧急”、“高优先级”、“中优先级”、“低优先级”),规则可以评估工单分数以确定适当的优先级。推理引擎将处理这些规则并汇总结果,以建议每个工单最合适的优先级。这允许您通过基于模糊逻辑的自动优先级确定来更有效地处理工单。

安装

将库添加到您的Cargo.toml

[dependencies]
rsfuzzymind = "0.1"

功能

  • 模糊集:使用隶属函数定义模糊集,并执行并集、交集、补集和归一化等操作。
  • 模糊规则:创建和评估将条件映射到具有相关权重的模糊集的规则。
  • 推理引擎:根据加权结果汇总规则评估以推断优先级级别。

组件

FuzzySet

表示具有名称和隶属函数的模糊集。关键方法包括

  • (name: &str,membership_function: Arc<dynFn(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

表示具有条件、后果模糊集和权重的规则。关键方法包括

  • (condition: Box<dynFn(f64) -> bool + Send + Sync>,consequence:FuzzySet,weight: f64) -> Self
  • evaluate(input: f64) -> Option<(FuzzySet,f64)>

InferenceEngine

从多个 FuzzyRule 实例汇总结果以推断优先级级别。关键方法包括

  • (rules: Vec<FuzzyRule>) -> Self
  • infer(input: f64) ->String
示例用法

以下是一个基本示例,展示了如何设置和使用库来评估工单优先级

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);
}
许可

本库采用MIT许可证授权。

无运行时依赖