Changeset 3359 for trunk/test_more


Ignore:
Timestamp:
Sep 25, 2014 8:12:56 PM (5 years ago)
Author:
bradbell
Message:

Fix bug in optimization with discrete functions.

opt_discrete.sh: test of the fix.
discrete.hpp: spelling error in comment.
hash_code.hpp: make discrete operator a special case.
optimize.hpp: handle discrete operator.
optimize.cpp: test of the fix.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/test_more/optimize.cpp

    r3008 r3359  
    14311431                return ok;
    14321432        }
     1433        // -----------------------------------------------------------------------
     1434        double floor(const double& x)
     1435        {       return std::floor(x); }
     1436        CPPAD_DISCRETE_FUNCTION(double, floor)
     1437        bool discrete_function(void)
     1438        {       bool ok = true;
     1439                using CppAD::vector;
     1440       
     1441                vector< CppAD::AD<double> > ax(1), ay(1);
     1442                ax[0] = 0.0;
     1443                CppAD::Independent(ax);
     1444                ay[0] =  floor(ax[0]) + floor(ax[0]); 
     1445                CppAD::ADFun<double> f(ax, ay);
     1446       
     1447                size_t size_before = f.size_var();
     1448                f.optimize();
     1449                size_t size_after = f.size_var();
     1450                ok &= size_after + 1 == size_before;
     1451       
     1452                vector<double> x(1), y(1);
     1453                x[0] = -2.2;
     1454                y    = f.Forward(0, x);
     1455                ok &= y[0] == -6.0;
     1456       
     1457                return ok;
     1458        }
     1459        // -----------------------------------------------------------------------
    14331460}
    14341461
     
    14731500        // case where results are not identically equal
    14741501        ok     &= not_identically_equal();
     1502        // case where a discrete function is used
     1503        ok     &= discrete_function();
    14751504        //
    14761505        CppAD::user_atomic<double>::clear();
Note: See TracChangeset for help on using the changeset viewer.