package func.nn;
import java.io.Serializable;
import java.util.List;
import util.linalg.Vector;
/**
* An abstract class representing a network
* @author Andrew Guillory gtg008g@mail.gatech.edu
* @version 1.0
*/
public abstract class NeuralNetwork implements Serializable {
/**
* Get the output values
* @return the output values
*/
public abstract Vector getOutputValues();
/**
* Set intput values
* @param values the new values
*/
public abstract void setInputValues(Vector values);
/**
* Run the network on the input values and
* generate the output values.
*/
public abstract void run();
/**
* Get all of the weights in the neural network
* @return all of the weights in the network
*/
public abstract List getLinks();
/**
* Get link values
* @return the link values
*/
public double[] getWeights() {
List links = getLinks();
double[] weights = new double[links.size()];
for (int i = 0; i < weights.length; i++) {
Link l = (Link) links.get(i);
weights[i] = l.getWeight();
}
return weights;
}
/**
* Set link values
* @param weights the link values
*/
public void setWeights(double[] weights) {
List links = getLinks();
for (int i = 0; i < weights.length; i++) {
Link l = (Link) links.get(i);
l.setWeight(weights[i]);
}
}
/**
* Set the weights of a neural network
* @param weights the weight vector
*/
public void setWeights(Vector weights) {
List links = getLinks();
for (int i = 0; i < weights.size(); i++) {
Link l = (Link) links.get(i);
l.setWeight(weights.get(i));
}
}
}