//*******************************************************************************
// CSC 143 Computer Programming II Spring 1999 Instructor: Keith Hughes
//
// Homework 3
// File : \\Venus\katy\CIS143\Homework3\AdalineNetwork\adaline.h
//
// Purpose : Declaration for AdalineNet classes.
//                 AdalineNet privately inherit NeuralNet
//
// Author : Hsin-yi F. Berg
// Date : 5/9/1999 Sun.
// Last Update: 5/28/1999 Fri.
//*******************************************************************************

#ifndef ADALINE_H
#define ADALINE_H

#include "NeuralNet.h"
#include <iostream.h>
#include <fstream.h>

/*
    Adaline Net is a kind of NeuralNet which has only two layers -
    one input layer with a specified number of Neurons and a output
    layer with one Neuron. We'll use Generalized Delta Rule to train
    our Adaline Network.
*/

// private inheritence because client should not use all function members 
// in NeuronNet except the one specified in AdalineNet.

class AdalineNet:private NeuralNet
{
public:
    /*
        AdalineNet::AdalineNet()

        Default constructor for an AdalineNet. AdalineNet is created empty.
    */
    AdalineNet();

    /*
        AdalineNet::AdalineNet(int sizeInputLayer)

        Constructor for an AdalineNet.
        Set the number of Neurons in the input layer.
        This function will create a fully connected AdalineNet with two Layers 
        and specified number of Neurons + 1 bias Node in the input Layer.
    */
    AdalineNet(int sizeInputLayer);

    /*
        AdalineNet::~AdalineNet()

        Destructor for an AdalineNet.
    */
    ~AdalineNet();

    /*
        void AdalineNet::SetSizeOfInputLayer(int numInputLayer)

        Set the number of Neurons in the input layer
        number of Neurons in the input layer is the only thing we need to
        know to build a Adaline Network
    */
    void SetSizeOfInputLayer(int numInputLayer);
    
    /*
        void NeuralNet::SetInputValue(int whichNeuron, double Value)

        Set the value of a specific Neuron in AdalineNet
    */
    void SetInputValue(int whichNeuron, double Value);

    /*
        double NeuralNet::GetOutputValue(int whichNeuron)

        Get the value of a specific Neuron in AdalineNet
    */
    double GetOutputValue(int whichNeuron) const;

    /*
        void NeuralNet::Fire(void)

        Fire the whole AdalineNet
    */
    void Fire(void);

    /*
        void AdalineNet::DesiredOutput(double desired_value)

        This function will calculate and set the error of the output Neuron
        addording to the desired value.
        The network should be fired first
    */
    void DesiredOutput(double desired_value);

    /*
        void AdalineNet::Learn()

        This function will propagate the error of output Neuron
        back to its input Links, adjust the weight of each Link
        using the rate supplied.
    */
    void Learn();

    /*
        void AdalineNet::SetLearningRate(double rate)

        Set the learning rate of this Adaline Network
    */
    void SetLearningRate(double rate);

    /*
        double AdalineNet::GetLearningRate()

        Get the learning rate of this Adaline Network
    */
    double GetLearningRate();

    /*
        void AdalineNet::ReadFromFile(istream &in)

        Read data into this AdalineNet instance from file specified by "in"
    */
    void AdalineNet::ReadFromFile(istream &in);
    
    /*
        void AdalineNet::WriteToFile(ostream &out)

        Write data of this AdalineNet instance to file specified by "out"
    */
    void AdalineNet::WriteToFile(ostream &out);


private:
    // learning_rate determines how fast the Adaline Network learn
    // usually it's around 0.25-0.50 (25%-50%)
    double learning_rate;

    /*
        void AdalineNet::BuildStructure(int sizeInputLayer)

        BuildStructure takes the number of neurons in the input Layer
        as an argument, build the infrastructure of the Adaline Network.
        Two-layers, specificied numbers of neurons in the input Layer.
    */
    void BuildStructure(int sizeInputLayer);
};

#endif

Back    Top