|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r64283 - in sandbox/SOC/2010/quasi_random: boost/random/detail libs/random/example libs/random/test
From: jvd_at_[hidden]
Date: 2010-07-23 02:25:00
Author: qrng
Date: 2010-07-23 02:24:59 EDT (Fri, 23 Jul 2010)
New Revision: 64283
URL: http://svn.boost.org/trac/boost/changeset/64283
Log:
Dropped the identity_distribution idea
Removed:
sandbox/SOC/2010/quasi_random/boost/random/detail/identity_distribution.hpp
Binary files modified:
sandbox/SOC/2010/quasi_random/libs/random/example/out-faure.png
sandbox/SOC/2010/quasi_random/libs/random/example/out-niederreiter_base2.png
sandbox/SOC/2010/quasi_random/libs/random/example/out-sobol.png
Text files modified:
sandbox/SOC/2010/quasi_random/libs/random/example/qrng_images.cpp | 32 ++++++++++----------------------
sandbox/SOC/2010/quasi_random/libs/random/test/d_star.hpp | 13 ++++++-------
sandbox/SOC/2010/quasi_random/libs/random/test/discrepancy.cpp | 29 +++++++++++------------------
sandbox/SOC/2010/quasi_random/libs/random/test/gsl_validate.cpp | 2 --
4 files changed, 27 insertions(+), 49 deletions(-)
Deleted: sandbox/SOC/2010/quasi_random/boost/random/detail/identity_distribution.hpp
==============================================================================
--- sandbox/SOC/2010/quasi_random/boost/random/detail/identity_distribution.hpp 2010-07-23 02:24:59 EDT (Fri, 23 Jul 2010)
+++ (empty file)
@@ -1,35 +0,0 @@
-// Copyright Justinas Vygintas Daugmaudis, 2010.
-// Use, modification and distribution is subject to the
-// Boost Software License, Version 1.0. (See accompanying
-// file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
-
-#ifndef BOOST_IDENTITY_DISTRIBUTION_HPP_INCLUDED
-#define BOOST_IDENTITY_DISTRIBUTION_HPP_INCLUDED
-
-namespace boost {
-
-namespace random {
-
-namespace detail {
-
-// To be used when no transformation of a sequence is required
-struct identity_distribution
-{
- // makes compatible with result_of<>
- template<typename FArgs>
- struct result;
-
- template<typename F, typename Engine>
- struct result<F(Engine)>
- {
- typedef typename Engine::result_type type;
- };
-
- template<typename Engine>
- typename Engine::result_type operator()(Engine& gen) const
- { return gen(); }
-};
-
-}}} // namespace boost::random::detail
-
-#endif // BOOST_IDENTITY_DISTRIBUTION_HPP_INCLUDED
Modified: sandbox/SOC/2010/quasi_random/libs/random/example/out-faure.png
==============================================================================
Binary files. No diff available.
Modified: sandbox/SOC/2010/quasi_random/libs/random/example/out-niederreiter_base2.png
==============================================================================
Binary files. No diff available.
Modified: sandbox/SOC/2010/quasi_random/libs/random/example/out-sobol.png
==============================================================================
Binary files. No diff available.
Modified: sandbox/SOC/2010/quasi_random/libs/random/example/qrng_images.cpp
==============================================================================
--- sandbox/SOC/2010/quasi_random/libs/random/example/qrng_images.cpp (original)
+++ sandbox/SOC/2010/quasi_random/libs/random/example/qrng_images.cpp 2010-07-23 02:24:59 EDT (Fri, 23 Jul 2010)
@@ -3,9 +3,8 @@
// Boost Software License, Version 1.0. (See accompanying
// file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
-
-#include <boost/random/sobol.hpp>
#include <boost/random/niederreiter_base2.hpp>
+#include <boost/random/sobol.hpp>
#include <boost/random/faure.hpp>
#include <boost/random/uniform_real.hpp>
@@ -17,7 +16,7 @@
using namespace boost::gil;
// Models a Unary Function
-template <typename Qrng, typename Distribution, typename P> // Models PixelValueConcept
+template <typename QEngine, typename P> // Models PixelValueConcept
struct pixelnoise_fn {
typedef point2<ptrdiff_t> point_t;
@@ -33,7 +32,7 @@
point_t _img_size;
std::vector<point_t> _random_points;
- static const int MAX_ITER=6000; // max number of iterations
+ static const int MAX_ITER=20000; // max number of iterations
pixelnoise_fn() {}
pixelnoise_fn(const point_t& sz, const value_type& in_color) : _pnt_color(in_color), _img_size(sz) { gen_random(); }
@@ -47,28 +46,17 @@
private:
void gen_random()
{
- Qrng gen;
- Distribution d;
+ QEngine gen;
+ boost::uniform_real<> d;
for( int i = 0; i < MAX_ITER; ++i )
_random_points.push_back( point_t( _img_size.x * d(gen), _img_size.y * d(gen) ) );
}
};
-// To be used in place of uniform_real, where scaling is not necessary
-template<typename T = double>
-struct identity_distribution
-{
- typedef T result_type;
- template<typename QRNG>
- result_type operator()(QRNG& q) const
- { return q(); }
-};
-
-
-template<typename Qrng, typename Distribution>
+template<typename QEngine>
void output_image(const char* img_name)
{
- typedef pixelnoise_fn<Qrng, Distribution, rgb8_pixel_t> deref_t;
+ typedef pixelnoise_fn<QEngine, rgb8_pixel_t> deref_t;
typedef typename deref_t::point_t point_t;
typedef virtual_2d_locator<deref_t,false> locator_t;
typedef image_view<locator_t> my_virt_view_t;
@@ -83,8 +71,8 @@
int main()
{
- output_image<boost::sobol_4d, boost::uniform_real<> >("out-sobol.png");
- output_image<boost::niederreiter_base2_4d, boost::uniform_real<> >("out-niederreiter_base2.png");
- output_image<boost::faure_4d, identity_distribution<> >("out-faure.png");
+ output_image<boost::sobol_2d>("out-sobol.png");
+ output_image<boost::niederreiter_base2_2d>("out-niederreiter_base2.png");
+ output_image<boost::faure_2d>("out-faure.png");
return 0;
}
Modified: sandbox/SOC/2010/quasi_random/libs/random/test/d_star.hpp
==============================================================================
--- sandbox/SOC/2010/quasi_random/libs/random/test/d_star.hpp (original)
+++ sandbox/SOC/2010/quasi_random/libs/random/test/d_star.hpp 2010-07-23 02:24:59 EDT (Fri, 23 Jul 2010)
@@ -14,7 +14,6 @@
#include <boost/pool/pool.hpp>
#include <boost/shared_array.hpp>
#include <boost/random/uniform_real.hpp>
-#include <boost/utility/result_of.hpp>
// The time required to compute the star discrepancy of a sequence of points
// in a multidimensional unit cube is prohibitive and the best known upper
@@ -123,7 +122,7 @@
};
-// An s-dimensional table of values that are stored consecutively in the
+// An table of values that are stored consecutively in the
// memory area pointed by the given pointer.
// The table is strictly read-only.
template<typename T>
@@ -657,12 +656,12 @@
// Accepts a pseudo-random number generator
template<typename Engine, typename Distribution>
inline typename detail::star_discrepancy<
- typename boost::result_of<Distribution(Engine)>::type
+ typename Distribution::result_type
>::bounds_t
d_star(Engine& eng, Distribution d, std::size_t dimension, std::size_t n,
- typename boost::result_of<Distribution(Engine)>::type epsilon)
+ typename Distribution::result_type epsilon)
{
- typedef typename boost::result_of<Distribution(Engine)>::type value_t;
+ typedef typename Distribution::result_type value_t;
detail::star_discrepancy<value_t> discr(eng, d, dimension, n, epsilon);
return discr.compute();
}
@@ -670,10 +669,10 @@
// Accepts a quasi-random number generator and distribution
template<typename QEngine, typename Distribution>
inline typename detail::star_discrepancy<
- typename boost::result_of<Distribution(QEngine)>::type
+ typename Distribution::result_type
>::bounds_t
d_star(QEngine& q, Distribution d, std::size_t n,
- typename boost::result_of<Distribution(QEngine)>::type epsilon)
+ typename Distribution::result_type epsilon)
{
return d_star(q, d, q.dimension(), n, epsilon);
}
Modified: sandbox/SOC/2010/quasi_random/libs/random/test/discrepancy.cpp
==============================================================================
--- sandbox/SOC/2010/quasi_random/libs/random/test/discrepancy.cpp (original)
+++ sandbox/SOC/2010/quasi_random/libs/random/test/discrepancy.cpp 2010-07-23 02:24:59 EDT (Fri, 23 Jul 2010)
@@ -11,10 +11,6 @@
#include <boost/random/mersenne_twister.hpp>
-#include <boost/random/detail/identity_distribution.hpp>
-
-#include <boost/utility/result_of.hpp>
-
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
#include <boost/test/unit_test_log.hpp>
@@ -72,18 +68,16 @@
}
-template<typename QEngine, typename Distribution, typename Bounds>
+template<typename QEngine, typename Bounds, typename T>
inline void check_discrepancy(const char* name,
- Distribution d,
- std::size_t n_vectors,
- typename boost::result_of<Distribution(QEngine)>::type epsilon,
+ std::size_t n_vectors, T epsilon,
Bounds mersenne_twister_discrepancy)
{
QEngine q; // default-construct
BOOST_TEST_MESSAGE( "Testing " << name << "[" << q.dimension() << "]" );
- Bounds qrng_discrepancy = d_star(q, d, n_vectors, epsilon);
+ Bounds qrng_discrepancy = d_star(q, n_vectors, epsilon);
BOOST_CHECK_LT( qrng_discrepancy.first, mersenne_twister_discrepancy.first );
BOOST_CHECK_LE( qrng_discrepancy.second, mersenne_twister_discrepancy.second );
}
@@ -105,25 +99,24 @@
BOOST_REQUIRE( eps > 0 && eps < 1 );
BOOST_TEST_MESSAGE( "Starting tests in dimension " << D << " with sample size " << n_vectors << ", epsilon=" << eps );
- boost::uniform_real<value_t> u;
-
// Compute the discrepancy of the Mersenne twister pseudo-random number generator
bounds_t mt_discrepancy;
{
boost::mt19937 mt;
+ boost::uniform_real<value_t> u;
BOOST_TEST_MESSAGE( "Computing discrepancy bounds for mt19937[" << D << "]" );
mt_discrepancy = d_star(mt, u, D, n_vectors, eps);
}
-#define UNIT_TEST_CHECK_QRNG_DISCREPANCY(N, U) \
- check_discrepancy<N>(#N, U, n_vectors, eps, mt_discrepancy); \
+#define UNIT_TEST_CHECK_QRNG_DISCREPANCY(N) \
+ check_discrepancy<N>(#N, n_vectors, eps, mt_discrepancy); \
/**/
// Compare the discrepancy of quasi-random number generators against the Mersenne twister discrepancy
- UNIT_TEST_CHECK_QRNG_DISCREPANCY(niederreiter_base2_t, u);
- UNIT_TEST_CHECK_QRNG_DISCREPANCY(sobol_t, u);
- UNIT_TEST_CHECK_QRNG_DISCREPANCY(faure_t, boost::random::detail::identity_distribution());
+ UNIT_TEST_CHECK_QRNG_DISCREPANCY(niederreiter_base2_t);
+ UNIT_TEST_CHECK_QRNG_DISCREPANCY(sobol_t);
+ UNIT_TEST_CHECK_QRNG_DISCREPANCY(faure_t);
#undef UNIT_TEST_CHECK_QRNG_DISCREPANCY
}
@@ -151,9 +144,9 @@
compare_qrng_discrepancy<5>( 100, 0.06 );
compare_qrng_discrepancy<6>( 60, 0.08 );
compare_qrng_discrepancy<7>( 60, 0.15 );
- compare_qrng_discrepancy<8>( 100, 0.4 );
+ compare_qrng_discrepancy<8>( 3000, 0.3 );
compare_qrng_discrepancy<9> ( 60, 0.5 );
- compare_qrng_discrepancy<10>( 80, 0.3 ); // mersenne twister has good discrepancy from dim 10. :-)
+ compare_qrng_discrepancy<10>( 80, 0.3 );
compare_qrng_discrepancy<11>( 500, 0.4 );
compare_qrng_discrepancy<12>( 500, 0.5 );
Modified: sandbox/SOC/2010/quasi_random/libs/random/test/gsl_validate.cpp
==============================================================================
--- sandbox/SOC/2010/quasi_random/libs/random/test/gsl_validate.cpp (original)
+++ sandbox/SOC/2010/quasi_random/libs/random/test/gsl_validate.cpp 2010-07-23 02:24:59 EDT (Fri, 23 Jul 2010)
@@ -3,8 +3,6 @@
// Boost Software License, Version 1.0. (See accompanying
// file LICENSE-1.0 or http://www.boost.org/LICENSE-1.0)
-#include "identity_distribution.hpp"
-
#include <boost/random/niederreiter_base2.hpp>
#include <boost/random/sobol.hpp>
#include <boost/random/faure.hpp>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk