00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef RENDNETWORK_H
00025 #define RENDNETWORK_H
00026
00027 #include <QBrush>
00028 #include <QPen>
00029 #include <QPixmap>
00030 #include <QWidget>
00031 #include <QShortcut>
00032
00033 #include <QWidget>
00034 #include <QGridLayout>
00035 #include <QToolBar>
00036 #include <QBoxLayout>
00037 #include <QSlider>
00038 #include "evonet.h"
00039
00040 namespace farsa {
00041
00042 class MixerDialog;
00043 class RendNetwork;
00044
00045
00046
00047
00048 class FARSA_EXPERIMENTS_API NetworkDialog : public QWidget
00049 {
00050 Q_OBJECT
00051
00052 public:
00053
00054 RendNetwork *rendNetwork;
00055 MixerDialog *mixerDialog;
00056 Evonet *enet;
00057 int drawblocks;
00058 int cneuron[4];
00059 int cneuronn;
00060 int rnrun;
00061 int rnmousex;
00062 int rnmousey;
00063 float **graphicp;
00064 int ngp;
00065 float cscalex;
00066 float cscaley;
00067 int pseudomode;
00068
00069 void pseudo_activate_net(int dmode);
00070
00071
00072
00073
00074 float *freep;
00075 int nfreep;
00076 int ninputs;
00077 int nhiddens;
00078 int noutputs;
00079 int nneurons;
00080 int net_nblocks;
00081 int net_block[Evonet::MAXN][5];
00082 int neuronbias[Evonet::MAXN];
00083 int neurontype[Evonet::MAXN];
00084 int neurongain[Evonet::MAXN];
00085 int neuronxy[Evonet::MAXN][2];
00086 int neurondisplay[Evonet::MAXN];
00087 char neuronl[Evonet::MAXN][8];
00088 char neuroncl[Evonet::MAXN][8];
00089 float wrange;
00090 float grange;
00091 int grid;
00092 int nparameters;
00093 int nparambias;
00094 int neuronlesions;
00095 float biases[Evonet::MAXN];
00096 int updated[Evonet::MAXN];
00097
00098
00099 void error(const char *emessage);
00100 void warning(const char *emessage);
00101
00102
00103
00104 NetworkDialog(Evonet* net, QWidget* parent=0, Qt::WindowFlags flags=0);
00105
00106
00107 virtual ~NetworkDialog();
00108
00109 private:
00110
00116
00117
00122 void shotWidget();
00123
00127 QWidget *m_widget;
00128
00133 QBoxLayout *m_mainLayout;
00134
00140 QToolBar *m_toolBar;
00141
00142
00143 void createToolBars();
00144 void createActions();
00145
00146 QAction *set_neurondisplayAct;
00147 QAction *set_neurontypeAct;
00148 QAction *set_neurongainAct;
00149 QAction *set_neuronbiasAct;
00150 QAction *set_lesionAct;
00151 QAction *display_labelAct;
00152 QAction *display_weightAct;
00153 QAction *display_deltaAct;
00154 QAction *display_biasAct;
00155 QAction *display_gainAct;
00156 QAction *display_blocksAct;
00157 QAction *erase_netAct;
00158 QAction *add_ublockAct;
00159 QAction *add_cblockAct;
00160 QAction *add_gblockAct;
00161 QShortcut *increasevAct;
00162 QShortcut *decreasevAct;
00163 QAction *openAct;
00164 QAction *saveAct;
00165 QAction *randomfreepAct;
00166 QAction *mixerAct;
00167
00168 private slots:
00169
00170 void set_neurondisplay();
00171 void set_neuronbias();
00172 void set_neurontype();
00173 void set_neurongain();
00174 void set_lesion();
00175 void display_label();
00176 void display_weight();
00177 void display_delta();
00178 void display_bias();
00179 void display_gain();
00180 void display_blocks();
00181 void erase_net();
00182 void add_ublock();
00183 void add_cblock();
00184 void add_gblock();
00185 void increasev();
00186 void decreasev();
00187 void open();
00188 void save();
00189 void randomfreep();
00190 void openMixer();
00191
00192
00193
00194 };
00195
00196
00197
00198
00199
00200 class FARSA_EXPERIMENTS_API RendNetwork : public QWidget
00201 {
00202 Q_OBJECT
00203
00204 public:
00205 enum Shape { Line, Points, Polyline, Polygon, Rect, RoundRect, Ellipse, Arc,
00206 Chord, Pie, Path, Text, Pixmap };
00207
00208 RendNetwork( NetworkDialog* networkDialog, QWidget *parent = 0);
00209
00210 QSize minimumSizeHint() const;
00211 QSize sizeHint() const;
00212 int rnmousex;
00213 int rnmousey;
00214 double mdist(float x, float y, float x1, float y1);
00215 double segmentdist(float px,float py,float ax,float ay,float bx,float by);
00216
00217
00218
00219 public slots:
00220 void setShape(Shape shape);
00221 void setPen(const QPen &pen);
00222 void setBrush(const QBrush &brush);
00223 void setAntialiased(bool antialiased);
00224 void setTransformed(bool transformed);
00225
00226 protected:
00227 void paintEvent(QPaintEvent *event);
00228 void mousePressEvent(QMouseEvent *event);
00229 void mouseMoveEvent(QMouseEvent *event);
00230 void mouseReleaseEvent(QMouseEvent *event);
00231 void mouseDoubleClickEvent(QMouseEvent *event);
00232
00233 private:
00234 Shape shape;
00235 QPen pen;
00236 QBrush brush;
00237 bool antialiased;
00238 bool transformed;
00239 QPixmap pixmap;
00240 NetworkDialog* networkDialog;
00241 };
00242
00243 class FARSA_EXPERIMENTS_API EvoSlider : public QSlider
00244 {
00245 Q_OBJECT
00246 public:
00247 EvoSlider(double *ref, double rangemin=0, double rangemax=1, QWidget *parent=0);
00248
00249 private:
00250 double *vref;
00251 private slots:
00252 void updateValue(int ival);
00253
00254 };
00255
00256 class FARSA_EXPERIMENTS_API MixerDialog : public QWidget
00257 {
00258 Q_OBJECT
00259
00260 public:
00261 MixerDialog(Evonet *enet);
00262 private:
00263 Evonet *evonet;
00264 void setUpMixer();
00265 double trialRef;
00266 };
00267
00268 }
00269
00270 #endif