00001
00002
00003
00004
00006 #ifndef _FUZZY_FUNCTION_H_
00007 #define _FUZZY_FUNCTION_H_
00008
00009 #include <string>
00010 #include <vector>
00011 #include "BufferedNode.h"
00012 #include "Vector.h"
00013
00014 namespace FD {
00015
00016
00017 class FuzzyFunction : public BufferedNode {
00018
00019 public:
00020
00021
00022
00023
00024
00025
00026 const std::string & get_name();
00027
00028 virtual std::string get_type()=0;
00029
00030
00031 virtual ~FuzzyFunction();
00032
00033
00034 virtual float evaluate(float x) = 0;
00035
00036
00037 FuzzyFunction(const std::string &name);
00038
00039 FuzzyFunction(std::string nodeName, ParameterSet params);
00040
00041
00042
00043 void reset_inference_values() {m_inference_values.resize(0);}
00044
00045
00046 Vector<float> & get_inference_values() {return m_inference_values;}
00047
00048
00049 void push_inference_value(float value) {m_inference_values.push_back(value);}
00050
00051
00052 virtual float get_area() = 0;
00053
00054
00055 virtual float get_center_of_gravity() = 0;
00056
00057
00058 virtual float get_upper_bound() = 0;
00059
00060
00061 virtual float get_lower_bound() = 0;
00062
00063
00064 virtual Vector<float> get_bounds() = 0;
00065
00066
00067
00068
00069 virtual void calculate(int output_id, int count, Buffer &out);
00070
00071 protected:
00072
00073
00074 std::string m_name;
00075
00076
00077 Vector<float> m_inference_values;
00078
00079 int m_functionID;
00080
00081
00082 FuzzyFunction();
00083
00084 };
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 }
00116
00117 #endif