//////////////////////////////////////////////////////////////////////////////
//
// File: nn_arch.h
//
// Purpose: Interface for NeuNet Arch class.
//
// Authors:
//   txe  Travis Emmitt
//
// Modifications:
//   19-APR-1998  txe  Initial creation
//   20-APR-1998  txe  Added Copy()
//   21-APR-1998  txe  Added MAX_MUTATION_ATTEMPS
//   23-APR-1998  txe  Using static debug, changed constructor
//
//////////////////////////////////////////////////////////////////////////////

#ifndef NN_ARCH_H
#define NN_ARCH_H

#include "debug.h"

#define MAX_LAYERS		20
#define MAX_LINKS               100          // max links per node
#define MAX_NODES               100          // max nodes per layer

#define DEFAULT_ACT_NUMERATOR	1.0
#define DEFAULT_ACT_ADD		0.0
#define DEFAULT_ENCOURAGEMENT   0.05
#define DEFAULT_LEARNING_RATE	0.3
#define DEFAULT_MAX_WEIGHT	1.0
#define DEFAULT_MIN_WEIGHT	-1.0
#define DEFAULT_MOMENTUM	0.9

#define MAX_MUTATION_ATTEMPTS	100

class Arch : public Debug {
public:
  float act_add;
  float act_numerator;
  float encouragement;
  float learning_rate;
  float max_weight;
  float min_weight;
  float momentum;
  int   num_layers;
  int   num_nodes[MAX_LAYERS];
  
  Arch (char *name);
  ~Arch ();
  void Copy   (Arch *arch);
  int  Load   (char *filename);
  int  Mutate (float mutation_rate);
  void Print  ();
  void Print  (int debug);
  int  Save   (char *filename);
  int  Valid  ();
};

#endif

//////////////////////////////////////////////////////////////////////////////

