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

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

理论部分

【人工智能】模糊推理


矩形模糊隶属函数


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

相关文章
|
8月前
|
人工智能 测试技术 开发者
软件测试/人工智能|Python函数与调用:解放编程力量的关键
软件测试/人工智能|Python函数与调用:解放编程力量的关键
63 0
|
8月前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
人工智能实验 python tensorflow keras拟合正弦函数,工资预测,公司收益预测
61 0
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
115 65
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【人工智能】Foxmail邮箱在人工智能领域的应用方法及代码解析
Foxmail邮箱作为一款流行的邮件客户端软件,主要用于个人和企业的邮件收发、管理等功能。虽然它与人工智能(AI)技术有着潜在的融合点,但直接关于Foxmail邮箱在人工智能方面的应用代码并不是常规的讨论内容,因为邮箱客户端本身并不直接包含复杂的AI算法或代码。
110 58
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】Python之人工智能应用篇——音频生成技术
音频生成是指根据所输入的数据合成对应的声音波形的过程,主要包括根据文本合成语音(text-to-speech)、进行不同语言之间的语音转换、根据视觉内容(图像或视频)进行语音描述,以及生成旋律、音乐等。它涵盖了声音结构中的音素、音节、音位、语素等基本单位的预测和组合,通过频谱逼近或波形逼近的合成策略来实现音频的生成。 音频生成技术的发展主要依赖于深度学习模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)、Transformer等。这些模型通过学习大量的音频数据,能够自动生成与人类发音相似甚至超越人类水平的音频内容。近年来,随着大规模预训练模型的流行,如GPT系列模型、BERT、T5等,
12 7
【深度学习】Python之人工智能应用篇——音频生成技术
|
1天前
|
机器学习/深度学习 人工智能 算法
人工智能在医疗诊断中的应用与挑战
【8月更文挑战第18天】 随着人工智能技术的飞速发展,其在医疗领域的应用也日益广泛。从影像诊断到病理分析,AI技术正逐步改变着传统的医疗诊断方式。然而,随之而来的数据隐私、算法透明度等问题也不容忽视。本文将探讨AI在医疗诊断中的具体应用案例,分析其带来的优势与面临的挑战,并提出相应的解决策略。
|
2天前
|
机器学习/深度学习 人工智能 算法
【深度学习】python之人工智能应用篇——图像生成技术(二)
图像生成是计算机视觉和计算机图形学领域的一个重要研究方向,它指的是通过计算机算法和技术生成或合成图像的过程。随着深度学习、生成模型等技术的发展,图像生成领域取得了显著的进步,并在多个应用场景中发挥着重要作用。
15 9
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】python之人工智能应用篇——文本生成技术
文本生成是指使用自然语言处理技术,基于给定的上下文或主题自动生成人类可读的文本。这种技术可以应用于各种领域,如自动写作、聊天机器人、新闻生成、广告文案创作等。
17 8
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】python之人工智能应用篇--代码生成技术
代码生成技术是人工智能与软件工程交叉领域的一项重要技术,它利用机器学习、自然语言处理和其他AI算法自动编写或辅助编写计算机程序代码。这一技术旨在提高编程效率、降低错误率,并帮助非专业开发者快速实现功能。以下是代码生成技术的概述及其典型应用场景。
15 6

热门文章

最新文章