package opt.example; import dist.Distribution; import opt.ContinuousAddOneNeighbor; import opt.EvaluationFunction; import opt.HillClimbingProblem; import opt.NeighborFunction; import opt.ga.ContinuousAddOneMutation; import opt.ga.UniformCrossOver; import opt.ga.CrossoverFunction; import opt.ga.GeneticAlgorithmProblem; import opt.ga.MutationFunction; import shared.DataSet; import shared.ErrorMeasure; import shared.Instance; import func.nn.NeuralNetwork; /** * A class for performing neural network optimzation * @author Andrew Guillory gtg008g@mail.gatech.edu * @version 1.0 */ public class NeuralNetworkOptimizationProblem implements HillClimbingProblem, GeneticAlgorithmProblem { /** * The evaluation function */ private EvaluationFunction eval; /** * The cross over function */ private CrossoverFunction crossover; /** * The neighbor function */ private NeighborFunction neighbor; /** * The mutation function */ private MutationFunction mutate; /** * The distribution */ private Distribution dist; /** * Make a new neural network optimization * @param examples the examples * @param network the neural network * @param measure the error measure */ public NeuralNetworkOptimizationProblem(DataSet examples, NeuralNetwork network, ErrorMeasure measure) { eval = new NeuralNetworkEvaluationFunction(network, examples, measure); crossover = new UniformCrossOver(); neighbor = new ContinuousAddOneNeighbor(); mutate = new ContinuousAddOneMutation(); dist = new NeuralNetworkWeightDistribution(network.getLinks().size()); } /** * @see opt.OptimizationProblem#value(opt.OptimizationData) */ public double value(Instance d) { return eval.value(d); } /** * @see opt.OptimizationProblem#random() */ public Instance random() { return dist.sample(null); } /** * @see opt.OptimizationProblem#neighbor(opt.Instance) */ public Instance neighbor(Instance d) { return neighbor.neighbor(d); } /** * @see opt.GeneticAlgorithmProblem#mate(opt.Instance, opt.Instance) */ public Instance mate(Instance da, Instance db) { return crossover.mate(da, db); } /** * @see opt.GeneticAlgorithmProblem#mutate(opt.Instance) */ public void mutate(Instance d) { mutate.mutate(d); } }