Changeset 1474 for trunk/test_more


Ignore:
Timestamp:
Aug 2, 2009 11:51:37 PM (11 years ago)
Author:
bradbell
Message:

trunk: Compute reverse jacobian and Hessian along side each other.

sparse_vec_ad.cpp: better testing of sparsity pattern for Hessians.
rev_sparse_hes.cpp: better testing of sparsity pattern for Hessians.
prototype_op.hpp: change reverse jacobian to compute along side Hessian.
op_code.hpp: fix printing of load and store parameter indexing.
rev_sparse_hes.hpp: change reverse jacobian to compute along side Hessian.
cond_op.hpp: change reverse jacobian to compute along side Hessian.
rev_hes_sweep.hpp: change reverse jacobian to compute along side Hessian.
sparse_binary_op.hpp: change reverse jacobian to compute along side Hessian.
sparse_unary_op.hpp: change reverse jacobian to compute along side Hessian.

Location:
trunk/test_more
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/test_more/rev_sparse_hes.cpp

    r1469 r1474  
    167167}
    168168
     169bool case_three(void)
     170{       bool ok = true;
     171        using CppAD::AD;
     172
     173        // domain space vector
     174        size_t n = 1;
     175        CPPAD_TEST_VECTOR< AD<double> > X(n);
     176        X[0] = 0.;
     177
     178        // declare independent variables and start recording
     179        CppAD::Independent(X);
     180
     181        // range space vector
     182        size_t m = 1;
     183        CPPAD_TEST_VECTOR< AD<double> > Y(m);
     184
     185        // make sure reverse jacobian is propogating dependency to
     186        // intermediate values (not just final ones).
     187        Y[0] = X[0] * X[0] + 2;
     188
     189        // create f: X -> Y and stop tape recording
     190        CppAD::ADFun<double> f(X, Y);
     191
     192        // sparsity pattern for the identity matrix
     193        CppAD::vector<bool> r(n * n);
     194        size_t i, j;
     195        for(i = 0; i < n; i++)
     196        {       for(j = 0; j < n; j++)
     197                        r[ i * n + j ] = false;
     198                r[ i * n + i ] = true;
     199        }
     200
     201        // compute sparsity pattern for J(x) = F^{(1)} (x)
     202        f.ForSparseJac(n, r);
     203
     204        // compute sparsity pattern for H(x) = F_0^{(2)} (x)
     205        CppAD::vector<bool> s(m);
     206        for(i = 0; i < m; i++)
     207                s[i] = false;
     208        s[0] = true;
     209        CppAD::vector<bool> h(n * n);
     210        h    = f.RevSparseHes(n, s);
     211
     212        // check values
     213        ok  &= (h[ 0 * n + 0 ] == true);  // second partial w.r.t x[0], x[0]
     214
     215        return ok;
     216}
     217
    169218} // End of empty namespace
    170219
    171220bool rev_sparse_hes(void)
    172221{       bool ok = true;
    173         // ok &= case_one();
     222        ok &= case_one();
    174223        ok &= case_two();
    175 
    176         return ok;
    177 }
     224        ok &= case_three();
     225
     226        return ok;
     227}
  • trunk/test_more/sparse_vec_ad.cpp

    r1472 r1474  
    5050                // y[i] depends on x[j] for j <= i
    5151                // (and is non-linear for j <= 1).
    52                 if( j <= 1 )
     52                if( j == 1 )
    5353                        Y[j] = Z[J] * Z[J];
    5454                else    Y[j] = Z[J];
     
    9393        }       
    9494
    95         // compute sparsity pattern for Hessian of F_m ( Identity(x) )
     95        // test sparsity pattern for Hessian of F_2 ( Identity(x) )
    9696        CPPAD_TEST_VECTOR<bool> Hy(m);
    9797        for(i = 0; i < m; i++)
    9898                Hy[i] = false;
    99         Hy[m-1] = true;
     99        Hy[2] = true;
    100100        CPPAD_TEST_VECTOR<bool> Pxx(n * n);
    101101        Pxx = F.RevSparseHes(n, Hy);
     102        for(i = 0; i < n; i++)
     103        {       for(j = 0; j < n; j++)
     104                        ok &= (Pxx[i * n + j] == false );
     105        }
    102106
    103 # if 0
    104         // This test case demonstrates a bug in the current version of
    105         // of the reverse Hessian sparsity pattern calculations. It will be
    106         // fixed in the next commit.
     107        // test sparsity pattern for Hessian of F_1 ( Identity(x) )
     108        for(i = 0; i < m; i++)
     109                Hy[i] = false;
     110        Hy[1] = true;
     111        Pxx = F.RevSparseHes(n, Hy);
    107112        for(i = 0; i < n; i++)
    108113        {       for(j = 0; j < n; j++)
    109114                        ok &= (Pxx[i * n + j] == ( (i <= 1) & (j <= 1) ) );
    110115        }
    111 # endif
     116
    112117
    113118        return ok;
Note: See TracChangeset for help on using the changeset viewer.