/*
* File: FunctionMinimizerGradientDescentTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright November 8, 2007, Sandia Corporation. Under the terms of Contract
* DE-AC04-94AL85000, there is a non-exclusive license for use of this work by
* or on behalf of the U.S. Government. Export of this program may require a
* license from the United States Government. See CopyrightHistory.txt for
* complete details.
*
*
*/
package gov.sandia.cognition.learning.algorithm.minimization;
import gov.sandia.cognition.math.DifferentiableEvaluator;
import gov.sandia.cognition.math.matrix.Vector;
/**
* JUnit tests for class FunctionMinimizerGradientDescentTest
* @author Kevin R. Dixon
*/
public class FunctionMinimizerGradientDescentTest
extends FunctionMinimizerTestHarness<DifferentiableEvaluator<? super Vector,Double,Vector>>
{
/**
* Entry point for JUnit tests for class FunctionMinimizerGradientDescentTest
* @param testName name of this test
*/
public FunctionMinimizerGradientDescentTest(
String testName)
{
super(testName);
}
double MOMENTUM = 0.5;
double LEARNING_RATE = 0.1;
/**
* Test of getLearningRate method, of class gov.sandia.cognition.learning.algorithm.minimization.FunctionMinimizerGradientDescent.
*/
public void testGetLearningRate()
{
System.out.println("getLearningRate");
FunctionMinimizerGradientDescent instance = this.createInstance();
assertEquals(LEARNING_RATE, instance.getLearningRate());
}
/**
* Test of setLearningRate method, of class gov.sandia.cognition.learning.algorithm.minimization.FunctionMinimizerGradientDescent.
*/
public void testSetLearningRate()
{
System.out.println("setLearningRate");
FunctionMinimizerGradientDescent instance = this.createInstance();
double v = instance.getLearningRate() / 2.0;
instance.setLearningRate(v);
assertEquals(v, instance.getLearningRate());
instance.setLearningRate(1.0);
try
{
instance.setLearningRate(0.0);
fail("Learning Rate must be (0,1]");
}
catch (Exception e)
{
System.out.println("Good: " + e);
}
try
{
instance.setLearningRate(2.0);
fail("Learning Rate must be (0,1]");
}
catch (Exception e)
{
System.out.println("Good: " + e);
}
}
/**
* Test of getMomentum method, of class gov.sandia.cognition.learning.algorithm.minimization.FunctionMinimizerGradientDescent.
*/
public void testGetMomentum()
{
System.out.println("getMomentum");
FunctionMinimizerGradientDescent instance = this.createInstance();
assertEquals(MOMENTUM, instance.getMomentum());
}
/**
* Test of setMomentum method, of class gov.sandia.cognition.learning.algorithm.minimization.FunctionMinimizerGradientDescent.
*/
public void testSetMomentum()
{
System.out.println("setMomentum");
FunctionMinimizerGradientDescent instance = this.createInstance();
double v = instance.getMomentum() / 2.0;
instance.setMomentum(v);
assertEquals(v, instance.getMomentum());
instance.setMomentum(0.0);
try
{
instance.setMomentum(1.0);
fail("Learning Rate must be [0,1)");
}
catch (Exception e)
{
System.out.println("Good: " + e);
}
try
{
instance.setMomentum(-1.0);
fail("Learning Rate must be (0,1]");
}
catch (Exception e)
{
System.out.println("Good: " + e);
}
}
@Override
public FunctionMinimizerGradientDescent createInstance()
{
FunctionMinimizerGradientDescent mini =
new FunctionMinimizerGradientDescent( LEARNING_RATE, MOMENTUM );
return mini;
}
@Override
public void testMinimizeRosenbrock()
{
System.out.println( "CANNOT TEST ROSENBROCK WITH GRADIENT DESCENT, AS the parameters needed to solve it suck." );
}
}