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

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

理论部分

【人工智能】模糊推理


矩形模糊隶属函数


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

相关文章
|
11月前
|
人工智能 测试技术 开发者
软件测试/人工智能|Python函数与调用:解放编程力量的关键
软件测试/人工智能|Python函数与调用:解放编程力量的关键
|
11月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
83 0
|
8天前
|
机器学习/深度学习 人工智能 物联网
通义灵码在人工智能与机器学习领域的应用
通义灵码不仅在物联网领域表现出色,还在人工智能、机器学习、金融、医疗和教育等领域展现出广泛应用前景。本文探讨了其在这些领域的具体应用,如模型训练、风险评估、医疗影像诊断等,并总结了其提高开发效率、降低门槛、促进合作和推动创新的优势。
通义灵码在人工智能与机器学习领域的应用
|
9天前
|
人工智能 算法 安全
人工智能在医疗诊断中的应用与前景####
本文旨在探讨人工智能(AI)技术在医疗诊断领域的应用现状、面临的挑战以及未来的发展趋势。随着科技的不断进步,AI技术正逐步渗透到医疗行业的各个环节,尤其在提高诊断准确性和效率方面展现出巨大潜力。通过分析当前AI在医学影像分析、疾病预测、个性化治疗方案制定等方面的实际应用案例,我们可以预见到一个更加智能化、精准化的医疗服务体系正在形成。然而,数据隐私保护、算法透明度及伦理问题仍是制约其进一步发展的关键因素。本文还将讨论这些挑战的可能解决方案,并对AI如何更好地服务于人类健康事业提出展望。 ####
|
8天前
|
机器学习/深度学习 人工智能 算法
人工智能在医疗诊断中的应用与挑战
本文探讨了人工智能(AI)在医疗诊断领域的应用及其面临的挑战。随着技术的不断进步,AI已经在医学影像分析、疾病预测和个性化治疗等方面展现出巨大潜力。然而,数据隐私、算法透明度以及临床整合等问题仍然是亟待解决的关键问题。本文旨在通过分析当前AI技术在医疗诊断中的具体应用案例,探讨其带来的优势和潜在风险,并提出相应的解决策略,以期为未来AI在医疗领域的深入应用提供参考。
41 3
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能在教育领域的应用与挑战
随着科技的不断进步,人工智能(AI)技术已经深入到社会的各个领域,其中教育领域尤为突出。本文旨在探讨人工智能在教育领域的应用现状、面临的挑战以及未来的发展趋势。通过分析AI技术如何改变传统教学模式,提高教育质量和效率,同时指出其在实际应用中可能遇到的问题和挑战,为未来教育的发展提供参考。
79 2
|
14天前
|
机器学习/深度学习 人工智能 搜索推荐
深度探索人工智能在医疗影像诊断中的应用与挑战####
本文深入剖析了人工智能(AI)技术,特别是深度学习算法在医疗影像诊断领域的创新应用,探讨其如何重塑传统诊断流程,提升诊断效率与准确性。同时,文章也客观分析了当前AI医疗影像面临的主要挑战,包括数据隐私、模型解释性及临床整合难题,并展望了未来发展趋势。 ####
|
12天前
|
机器学习/深度学习 人工智能 搜索推荐
探索人工智能在医疗诊断中的应用
【10月更文挑战第36天】随着人工智能技术的飞速发展,其在各行各业的应用日益广泛,特别是在医疗领域。本文将深入探讨AI技术如何革新传统医疗诊断流程,提高疾病预测的准确性,以及面临的挑战和未来发展方向。通过具体案例分析,我们将看到AI如何在提升医疗服务质量、降低医疗成本方面发挥关键作用。
89 58
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在医疗诊断中的应用与前景
人工智能在医疗诊断中的应用与前景

热门文章

最新文章