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

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

理论部分

【人工智能】模糊推理


矩形模糊隶属函数


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

相关文章
|
10月前
|
人工智能 测试技术 开发者
软件测试/人工智能|Python函数与调用:解放编程力量的关键
软件测试/人工智能|Python函数与调用:解放编程力量的关键
72 0
|
10月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
79 0
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能技术在金融领域的应用有哪些?
【10月更文挑战第16天】人工智能技术在金融领域的应用有哪些?
17 1
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能在医疗诊断中的应用与发展
【10月更文挑战第13天】 随着科技的不断进步,人工智能(AI)在医疗领域展现出巨大潜力。本文将探讨AI在医疗诊断中的应用现状、面临的挑战以及未来发展的趋势。通过深入分析AI技术如何辅助医生提高诊断精度和效率,我们期望能为相关领域的研究和实践提供有价值的参考。
20 1
|
6天前
|
机器学习/深度学习 人工智能 算法
探究人工智能在医疗诊断中的应用与挑战
本文深入探讨了人工智能(AI)技术在现代医疗诊断中的多样化应用,包括影像识别、临床决策支持系统和个性化治疗方案的制定等。同时,文章也剖析了AI在数据隐私保护、算法透明度以及跨学科合作等方面所面临的挑战,并提出了相应的解决策略。通过综合分析,旨在为读者提供关于AI在医疗领域未来发展的洞见与思考。
ly~
|
12天前
|
人工智能 自然语言处理 搜索推荐
人工智能在医学领域的应用
人工智能在医学领域的应用广泛,涵盖医学影像分析、医疗数据分析与预测、临床决策支持、药物研发、自然语言处理及智能健康管理等方面。它能提高诊断准确性,预测疾病风险与进展,优化治疗方案,加速药物研发,提升手术安全性,并实现个性化健康管理,有效推动了医疗科技的进步。
ly~
27 3
|
13天前
|
机器学习/深度学习 人工智能 算法
人工智能与机器学习在医疗诊断中的应用
【10月更文挑战第3天】人工智能与机器学习在医疗诊断中的应用
23 3
ly~
|
12天前
|
人工智能 搜索推荐 自动驾驶
人工智能的应用
人工智能在多个领域广泛应用,包括:医疗领域的疾病诊断、药物研发和医疗机器人;交通领域的自动驾驶和智能交通管理;金融领域的风险评估、金融诈骗检测和投资决策;教育领域的个性化学习和智能辅导;工业领域的质量检测和生产流程优化;家居领域的智能家居系统,如智能音箱和智能灯具等,极大提升了各行业的效率与服务质量。
ly~
19 1
|
15天前
|
人工智能 搜索推荐 算法
人工智能在医疗诊断中的应用与前景
本文探讨了人工智能在医疗诊断中的最新进展、应用案例以及面临的挑战。通过分析AI在医学影像识别、电子病历分析和个性化治疗方案等领域的具体应用,揭示了其提高诊断准确性、缩短诊断时间的潜力。同时,讨论了数据隐私、算法偏见等伦理和法律问题,并提出了未来研究方向。