00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __CONDITIONSLAYER_H__
00017 #define __CONDITIONSLAYER_H__
00018
00019
00020
00021 #include <string>
00022
00023
00024
00025 #include "../utilities/vector.h"
00026 #include "../utilities/matrix.h"
00027
00028
00029
00030 #include "../../parsers/tinyxml/tinyxml.h"
00031
00032 namespace OpenNN
00033 {
00034
00038
00039 class ConditionsLayer
00040 {
00041
00042 public:
00043
00044
00045
00046 explicit ConditionsLayer(void);
00047
00048
00049
00050 explicit ConditionsLayer(const unsigned int&, const unsigned int&);
00051
00052
00053
00054 explicit ConditionsLayer(TiXmlElement*);
00055
00056
00057
00058 ConditionsLayer(const ConditionsLayer&);
00059
00060
00061
00062 virtual ~ConditionsLayer(void);
00063
00064
00065
00066 ConditionsLayer& operator = (const ConditionsLayer&);
00067
00068
00069
00070 bool operator == (const ConditionsLayer&) const;
00071
00072
00073
00075
00076 enum ConditionsMethod{OneCondition, TwoConditions, UserConditionsMethod};
00077
00078
00079
00080 const unsigned int& get_external_inputs_number(void) const;
00081 const unsigned int& get_conditions_neurons_number(void) const;
00082
00083 const ConditionsMethod& get_conditions_method(void) const;
00084 std::string write_conditions_method(void) const;
00085
00086 const Vector<double>& get_external_input_values(void) const;
00087 const double& get_external_input_value(const unsigned int&) const;
00088
00089 const Matrix<double>& get_output_values(void) const;
00090 const double& get_output_value(const unsigned int&, const unsigned int&) const;
00091
00092 const bool& get_display(void) const;
00093
00094
00095
00096 void set(void);
00097 void set(const unsigned int&, const unsigned int&);
00098 void set(const ConditionsLayer&);
00099
00100 void set_external_inputs_number(const unsigned int&);
00101 void set_conditions_neurons_number(const unsigned int&);
00102
00103 void set_conditions_method(const ConditionsMethod&);
00104 void set_conditions_method(const std::string&);
00105
00106 void set_external_input_values(const Vector<double>&);
00107 void set_external_input_value(const unsigned int&, const double&);
00108
00109 void set_output_values(const Matrix<double>&);
00110 void set_output_value(const unsigned int&, const unsigned int&, const double&);
00111
00112 void set_display(const bool&);
00113
00114 void set_default(void);
00115
00116
00117
00118 void initialize_random(void);
00119
00120 void check(void) const;
00121
00122
00123
00125 virtual Vector<double> calculate_particular_solution(const Vector<double>&) const;
00126
00128 virtual Matrix<double> calculate_particular_solution_Jacobian(const Vector<double>&) const;
00129
00130 virtual Vector< Matrix<double> > calculate_particular_solution_Hessian_form(const Vector<double>&) const;
00131
00132
00133
00135 virtual Vector<double> calculate_homogeneous_solution(const Vector<double>&) const;
00136
00138 virtual Matrix<double> calculate_homogeneous_solution_Jacobian(const Vector<double>&) const;
00139
00140 virtual Vector< Matrix<double> > calculate_homogeneous_solution_Hessian_form(const Vector<double>&) const;
00141
00142 Vector<double> calculate_outputs(const Vector<double>&, const Vector<double>&) const;
00143
00144 Matrix<double> calculate_Jacobian(const Vector<double>&, const Vector<double>&, const Matrix<double>&) const;
00145
00146 Vector< Matrix<double> > calculate_Hessian_form(const Vector<double>&, const Vector<double>&) const;
00147
00148
00149
00150 Vector<double> calculate_one_condition_particular_solution(const Vector<double>&) const;
00151 Matrix<double> calculate_one_condition_particular_solution_Jacobian(const Vector<double>&) const;
00152 Vector< Matrix<double> > calculate_one_condition_particular_solution_Hessian_form(const Vector<double>&) const;
00153
00154 Vector<double> calculate_one_condition_homogeneous_solution(const Vector<double>&) const;
00155 Matrix<double> calculate_one_condition_homogeneous_solution_Jacobian(const Vector<double>&) const;
00156 Vector< Matrix<double> > calculate_one_condition_homogeneous_solution_Hessian_form(const Vector<double>&) const;
00157
00158
00159
00160 Vector<double> calculate_two_conditions_particular_solution(const Vector<double>&) const;
00161 Matrix<double> calculate_two_conditions_particular_solution_Jacobian(const Vector<double>&) const;
00162 Vector< Matrix<double> > calculate_two_conditions_particular_solution_Hessian_form(const Vector<double>&) const;
00163
00164 Vector<double> calculate_two_conditions_homogeneous_solution(const Vector<double>&) const;
00165 Matrix<double> calculate_two_conditions_homogeneous_solution_Jacobian(const Vector<double>&) const;
00166 Vector< Matrix<double> > calculate_two_conditions_homogeneous_solution_Hessian_form(const Vector<double>&) const;
00167
00168
00169
00170 virtual std::string write_particular_solution_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00171 virtual std::string write_homogeneous_solution_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00172
00173 std::string write_one_condition_particular_solution_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00174 std::string write_one_condition_homogeneous_solution_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00175
00176 std::string write_two_conditions_particular_solution_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00177 std::string write_two_conditions_homogeneous_solution_expression(const Vector<std::string>&, const Vector<std::string>&) const;
00178
00179 std::string write_output_expression(const Vector<std::string>&, const Vector<std::string>&, const Vector<std::string>&, const Vector<std::string>&) const;
00180
00181 std::string write_expression(const Vector<std::string>&, const Vector<std::string>&, const Vector<std::string>&) const;
00182
00183
00184
00185 std::string to_string(void) const;
00186
00187 TiXmlElement* to_XML(void) const;
00188 void from_XML(TiXmlElement*);
00189
00190 protected:
00191
00194
00195 unsigned int external_inputs_number;
00196
00199
00200 unsigned int conditions_neurons_number;
00201
00203
00204 ConditionsMethod conditions_method;
00205
00207
00208 Vector<double> external_input_values;
00209
00211
00212 Matrix<double> output_values;
00213
00215
00216 bool display;
00217
00218 };
00219
00220 }
00221
00222 #endif
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242