MCPcopy Create free account
hub / github.com/WinVector/Logistic / TestOpt

Class TestOpt

test/com/winvector/opt/imp/TestOpt.java:14–90  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12import com.winvector.opt.impl.Newton;
13
14public class TestOpt extends TestCase {
15
16 private static final class LinFun implements ScalarFn {
17 public final double sign;
18 public final double x0;
19
20 public LinFun(final double x0, final double sign) {
21 this.sign = sign;
22 this.x0 = x0;
23 }
24
25 @Override
26 public double eval(final double x) {
27 final double diff = x - x0;
28 return sign*diff*diff;
29 }
30 }
31
32 public void testLinMax() {
33 final LinFun f = new LinFun(3.2,-1.0);
34 final LinMax solver = new LinMax();
35 final double soln = solver.maximize(f,Double.NaN, 1.0,100);
36 assertTrue(Math.abs(f.x0-soln)<1.0e-2);
37 }
38
39 public void testLinMin() {
40 final LinFun f = new LinFun(3.2,01.0);
41 final LinMax solver = new LinMax();
42 final double soln = solver.minimize(f,Double.NaN, 1.0,100);
43 assertTrue(Math.abs(f.x0-soln)<1.0e-2);
44 }
45
46 private static final class QuadFun implements VectorFn {
47 public final double sign;
48 public final double[] x0;
49
50 public QuadFun(final double[] x0, final double sign) {
51 this.x0 = x0;
52 this.sign = sign;
53 }
54
55 @Override
56 public int dim() {
57 return x0.length;
58 }
59
60 @Override
61 public VEval eval(final double[] x, final boolean wantGrad, final boolean wantHessian) {
62 final int n = x0.length;
63 final VEval r = new VEval(x,wantGrad,wantHessian);
64 for(int i=0;i<n;++i) {
65 final double diff = x[i]-x0[i];
66 r.fx += sign*diff*diff;
67 if(wantGrad) {
68 r.gx[i] = sign*2.0*diff;
69 }
70 if(wantHessian) {
71 r.hx[i][i] = sign*2.0;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected