【人工智能】模糊隶属函数

简介: 【人工智能】模糊隶属函数

理论部分

【人工智能】模糊推理


矩形模糊隶属函数


ddadad4784bc6d022a56d53fabb46d8b_dc09507a851a4a09a37829c0a8739bbb.png

import java.util.function.Function;
/**
 * @ClassName : RectangleMembershipFunction  //类名
 * @Description : 矩形模糊隶属函数  //描述
 * @Author : 主教 //作者
 * @Date: 2023/4/14  9:12
 */
public class RectangleMembershipFunction {
    private double a;
    private double b;
    public RectangleMembershipFunction(double a, double b) {
        this.a = a;
        this.b = b;
    }
    public double compute(double x) {
        if (x >= a && x <= b) {
            return 1;
        } else {
            return 0;
        }
    }
    public Function<Double, Double> createRectangleMembershipFunction(){
        return this::compute;
    }
}


梯形模糊隶属函数


7560a205c8225516d91ceb93757e3327_41460a11862e42118a88701a5cff1056.png

import java.util.function.Function;
/**
 * @ClassName : TrapezoidMembershipFunction  //类名
 * @Description : 梯型模糊隶属函数  //描述
 * @Author : 主教 //作者
 * @Date: 2023/4/14  9:09
 */
public class TrapezoidMembershipFunction {
    private double a;
    private double b;
    private double c;
    private double d;
    public TrapezoidMembershipFunction(double a, double b, double c, double d) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
    }
    public double compute(double x) {
        if (x < a || x > d) {
            return 0;
        } else if (x >= b && x <= c) {
            return 1;
        } else if (x < b) {
            return (x - a) / (b - a);
        } else {
            return (d - x) / (d - c);
        }
    }
    public Function<Double, Double> createTrapezoidMembershipFunction(){
        return this::compute;
    }
}


k次抛物型模糊隶属函数


a3756ca911d583c76183a7a669cfb074_87466033752f4cfb8c9716e3d0ae85be.png

import java.util.function.Function;
/**
 * @ClassName : ParabolicMembershipFunction  //类名
 * @Description : k次抛物型模糊隶属函数  //描述
 * @Author : 主教 //作者
 * @Date: 2023/4/14  9:17
 */
public class ParabolicMembershipFunction {
    private double a;
    private double b;
    private double c;
    private double d;
    private int k;
    public ParabolicMembershipFunction(double a, double b, double c, double d, int k) {
        this.a = a;
        this.b = b;
        this.c = c;
        this.d = d;
        this.k = k;
    }
    public double compute(double x) {
        if (x <= a || x >= d) {
            return 0;
        } else if (x > a && x <= b) {
            return Math.pow((x - a) / (b - a), k);
        } else if (x > b && x <= c) {
            return 1;
        } else {
            return Math.pow((d - x) / (d - c), k);
        }
    }
    public Function<Double, Double> createParabolicMembershipFunction(){
        return this::compute;
    }
}


T型模糊隶属函数


f071a22b06a6bb817db3a19e4d3cb40c_9b6bdb77147c4f3d85560154b97c8583.png


import java.util.function.Function;
/**
 * @ClassName : TMembershipFunction  //类名
 * @Description : T型模糊隶属函数  //描述
 * @Author : 86138 //作者
 * @Date: 2023/4/14  9:25
 */
public class TMembershipFunction {
    private double a;
    private double m;
    private double n;
    public TMembershipFunction(double a, double m, double n) {
        this.a = a;
        this.m = m;
        this.n = n;
    }
    public double compute(double x) {
        if (x <= a) {
            return 0;
        } else if (x > a && x <= m) {
            return (x - a) / (m - a);
        } else if (x >= m && x < n) {
            return 1;
        } else {
            return (n - x) / (n - m);
        }
    }
    public Function<Double, Double> createTMembershipFunction(){
        return this::compute;
    }
}


正态型模糊隶属函数


2a44eab9b1d10a269d630c24fb764139_b9d6e32a75204c578f5be73a5f481002.png

import java.util.function.Function;
/**
 * @ClassName : GaussianMembershipFunction  //类名
 * @Description : 正态型模糊隶属函数  //描述
 * @Author : 86138 //作者
 * @Date: 2023/4/14  9:27
 */
public class GaussianMembershipFunction {
    private double mu;
    private double sigma;
    public GaussianMembershipFunction(double mu, double sigma) {
        this.mu = mu;
        this.sigma = sigma;
    }
    public double compute(double x) {
        return (1 / (sigma * Math.sqrt(2 * Math.PI))) * Math.exp(-((x - mu) * (x - mu)) / (2 * sigma * sigma));
    }
    public Function<Double, Double> createGaussianMembershipFunction(){
        return this::compute;
    }
}


柯西型模糊隶属函数


fa3fe71818bb8e664ea9f9793ae350c9_0925098dc70f4317a259cf280184b97d.png

import java.util.function.Function;
/**
 * @ClassName : CauchyMembershipFunction  //类名
 * @Description : 柯西型模糊隶属函数  //描述
 * @Author : 86138 //作者
 * @Date: 2023/4/14  9:29
 */
public class CauchyMembershipFunction {
    private double x0;
    private double gamma;
    public CauchyMembershipFunction(double x0, double gamma) {
        this.x0 = x0;
        this.gamma = gamma;
    }
    public double compute(double x) {
        return (1 / Math.PI) * (gamma / ((x - x0) * (x - x0) + gamma * gamma));
    }
    public Function<Double, Double> createCauchyMembershipFunction(){
        return this::compute;
    }
}


使用方法


第一种 直接使用:Function.compute()


Function f = new Function(...props);
double membership = f.compute(x);


第二种 搭配模糊变量定义函数:createGaussianMembershipFunction()


import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
/**
 * @ClassName : FuzzyVariable  //类名
 * @Description : 隶属函数  //描述
 * @Author : 86138 //作者
 * @Date: 2023/4/12  15:58
 */
public class FuzzyVariable {
    private String name;    //模糊变量名称
    private Map<String, Function<Double, Double>> terms;  // 术语和隶属度函数
    public FuzzyVariable(String name) {
        this.terms = new HashMap<>();
        this.name = name;
    }
    // 向变量中添加新的术语及其隶属度函数
    public void addTerm(String trem, Function<Double,Double> membershipFunc){
        this.terms.put(trem,membershipFunc);
    }
    // 输入值模糊化
    public Map<String, Double> fuzzify(double value){
        Map<String, Double> memberships = new HashMap<>();
        for(Map.Entry<String, Function<Double,Double>> entry : terms.entrySet()){
            String trem = entry.getKey();
            Function<Double, Double> membershipFunc = entry.getValue();
            double membership = membershipFunc.apply(value);
            memberships.put(trem,membership);
        }
        return memberships;
    }
    public String getName() {
        return name;
    }
    public Map<String, Function<Double, Double>> getTerms() {
        return terms;
    }
    @Override
    public String toString() {
        return "FuzzyVariable{" +
                "name='" + name + '\'' +
                ", terms=" + terms +
                '}';
    }
}


使用示例Test:

import java.util.HashMap;
import java.util.Map;
/**
 * @ClassName : test  //类名
 * @Description : 测试类  //描述
 * @Author : 86138 //作者
 * @Date: 2023/4/12  16:32
 */
public class test {
    public static void main(String[] args) {
        FuzzyVariable temperature_fuzzy_variable = new FuzzyVariable("气温");
        temperature_fuzzy_variable.addTerm("温度低",new TriangularMembershipFunction(0.0,0.0,40.0).createTriangularFunction());
        temperature_fuzzy_variable.addTerm("温度适中",new TriangularMembershipFunction(20.0,50.0,80.0).createTriangularFunction());
        temperature_fuzzy_variable.addTerm("温度高",new TriangularMembershipFunction(60.0,100.0,100.0).createTriangularFunction());
        FuzzyVariable humidity_fuzzy_variable = new FuzzyVariable("湿度");
        humidity_fuzzy_variable.addTerm("湿度低",new TriangularMembershipFunction(0.0,0.0,25.0).createTriangularFunction());
        humidity_fuzzy_variable.addTerm("湿度适中",new TriangularMembershipFunction(15.0,30.0,45.0).createTriangularFunction());
        humidity_fuzzy_variable.addTerm("湿度高",new TriangularMembershipFunction(35.0,60.0,60.0).createTriangularFunction());
        Map<String, Double> a = temperature_fuzzy_variable.fuzzify(64);
        Map<String, Double> b = humidity_fuzzy_variable.fuzzify(22);
        System.out.println(a);
        System.out.println(b);
        Map<String, Double> result = new HashMap<>();
        for (Map.Entry<String, Double> entryA : a.entrySet()) {
            for (Map.Entry<String, Double> entryB : b.entrySet()) {
                String key = entryA.getKey() + "AND" + entryB.getKey();
                double value = Math.min(entryA.getValue(),entryB.getValue());
                result.put(key, value);
            }
        }
        System.out.println(result);
    }
}

相关文章
|
人工智能 测试技术 开发者
软件测试/人工智能|Python函数与调用:解放编程力量的关键
软件测试/人工智能|Python函数与调用:解放编程力量的关键
|
机器学习/深度学习 人工智能 TensorFlow
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
103 0
|
15天前
|
机器学习/深度学习 人工智能 运维
人工智能在事件管理中的应用
人工智能在事件管理中的应用
64 21
|
1月前
|
机器学习/深度学习 人工智能 搜索推荐
探索人工智能在现代医疗中的革新应用
本文深入探讨了人工智能(AI)技术在医疗领域的最新进展,重点分析了AI如何通过提高诊断准确性、个性化治疗方案的制定以及优化患者管理流程来革新现代医疗。文章还讨论了AI技术面临的挑战和未来发展趋势,为读者提供了一个全面了解AI在医疗领域应用的视角。
81 11
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在医疗诊断中的应用与前景####
本文深入探讨了人工智能(AI)技术在医疗诊断领域的应用现状、面临的挑战及未来发展趋势。通过分析AI如何辅助医生进行疾病诊断,提高诊断效率和准确性,以及其在个性化医疗中的潜力,文章揭示了AI技术对医疗行业变革的推动作用。同时,也指出了数据隐私、算法偏见等伦理问题,并展望了AI与人类医生协同工作的前景。 ####
122 0
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在客服领域有哪些应用?
人工智能正在彻底改变着传统客服行业,它不仅拓展了业务边界,还推动着整个行业向更高效、更人性化方向迈进。
28 7
|
1天前
|
机器学习/深度学习 数据采集 人工智能
人工智能在变更管理中的应用:变革的智能化之路
人工智能在变更管理中的应用:变革的智能化之路
23 13
|
19天前
|
机器学习/深度学习 数据采集 人工智能
人工智能在农业中的应用:智慧农业的未来
人工智能在农业中的应用:智慧农业的未来
53 11
|
1月前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建