00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _NETWORK_H_
00024 #define _NETWORK_H_
00025
00026 #include "neuron.h"
00027 #include "learning.h"
00028
00043 typedef struct {
00044 aspi_object_t parent;
00045
00046 int number_neurons;
00047
00048 int time;
00049
00050
00051 aspi_object_t ** neurons;
00052 aspi_class_t * model;
00053
00054
00055 aspi_object_t * synapses;
00056
00057
00058
00059 aspi_learning_rule_t learn_func;
00060 } aspi_network_t;
00061
00062
00066 typedef struct {
00067 aspi_class_t parent;
00068 } aspi_network_class_t;
00069
00070 aspi_class_t * aspi_network (void);
00071 aspi_object_t * aspi_network_init (aspi_object_t * self, aspi_class_t * neuron_model, int neurons);
00072 aspi_object_t * aspi_network_init_full (aspi_object_t * self, aspi_class_t * neuron_model, aspi_class_t * synapse_model, int neurons);
00073 void aspi_network_dtor (aspi_object_t * self);
00074
00075
00076
00077 int aspi_network_get_size (aspi_object_t * self);
00078
00079
00080 int aspi_network_get_time (aspi_object_t * self);
00081
00083 void aspi_network_set_weight (aspi_object_t * self, int pre, int post, double weight);
00085 double aspi_network_get_weight (aspi_object_t * self, int pre, int post);
00086
00088 unsigned int aspi_network_get_delay (aspi_object_t * self, int pre, int post);
00089
00090
00091
00092 void aspi_network_set_delay (aspi_object_t * self, int pre, int post, unsigned int delay);
00093
00094
00095 void aspi_network_calc_max_delays (aspi_object_t * self);
00096
00097
00098 void aspi_network_act (aspi_object_t * self);
00099
00100
00101 aspi_object_t * aspi_network_get_neuron (aspi_object_t * self, unsigned int n);
00102
00103 int aspi_network_get_neuron_index (aspi_object_t * self, aspi_object_t * neuron);
00104
00105 aspi_object_t ** aspi_network_get_neurons (aspi_object_t * self);
00106
00107
00108 void aspi_network_set_rule (aspi_object_t * self, aspi_learning_rule_t learn_func);
00109
00110
00111
00112 double aspi_network_get_avg_v (aspi_object_t * self);
00113
00114
00115 void aspi_network_learn_ranged (aspi_object_t * self, double alpha_plus, double alpha_neg, int from_begin, int from_end, int to_begin, int to_end);
00116 void aspi_network_learn (aspi_object_t * self, double alpha_plus, double alpha_neg);
00117
00118
00119 aspi_object_t * aspi_network_dup (aspi_object_t * self);
00120
00122 struct aspi_efficiency {
00123 double eglob;
00124 double eloc;
00125 };
00126 struct aspi_efficiency aspi_network_get_efficiency (aspi_object_t * self);
00127
00128 double * aspi_network_get_node_strengths (aspi_object_t * self);
00129 int * aspi_network_get_node_degrees (aspi_object_t * self);
00130 double aspi_network_get_cluster (aspi_object_t * self);
00131
00132 double aspi_network_get_freq_skewness (aspi_object_t * self);
00133 double aspi_network_get_freq_kurtosis (aspi_object_t * self);
00134
00135
00136 #define ASPI_NETWORK(x) (aspi_object_check (x, aspi_network ()), ((aspi_network_t *) x))
00137 #define ASPI_NETWORK_CLASS(x) (aspi_class_check (x, aspi_network ()), ((aspi_network_class_t * ) x))
00138
00141 #endif