package joshua.discriminative.training.lbfgs;
public class Example extends LBFGSWrapper{
double[] gradients = new double[2];
public Example(int numPara, double[] initWeights, boolean isMinimizer){
super(numPara, initWeights, isMinimizer, false, 1, false, 1, 2);
}
//optimize y=-((x-3)^2+(y-4)^2)+10
public double[] computeFuncValAndGradient(double[] curWeights, double[] resFuncVal) {
gradients[0] = -2*(curWeights[0]-3);
gradients[1] = -2*(curWeights[1]-4);
resFuncVal[0] = -(curWeights[0]-3)*(curWeights[0]-3)-(curWeights[1]-4)*(curWeights[1]-4)+10;
return gradients;
}
public static void main(String[] args) {
double[] initWeights = new double[2];
/*initWeights[0] = 600000000000.0;
initWeights[1] = 600000000000.0;*/
initWeights[0] = 6.0;
initWeights[1] = 6.0;
int numPara =2;
Example example = new Example(numPara, initWeights, false);
double[] finalWeights = example.runLBFGS();
double[] finalFuncVal = new double[1];
example.computeFuncValAndGradient(finalWeights, finalFuncVal);
System.out.println("Final weight X is "+ finalWeights[0]);
System.out.println("Final weight Y is "+ finalWeights[1]);
System.out.println("Function value is "+ finalFuncVal[0]);
}
}