.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/montecarlo/plot_b03antithetic_explicit.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_examples_montecarlo_plot_b03antithetic_explicit.py: Antithetic draws explicitly generated ===================================== Calculation of a simple integral using Monte-Carlo integration. It illustrates how to use antithetic draws, explicitly generated. :author: Michel Bierlaire, EPFL :date: Thu Apr 13 20:49:50 2023 .. GENERATED FROM PYTHON SOURCE LINES 12-21 .. code-block:: Python import numpy as np import pandas as pd import biogeme.database as db import biogeme.biogeme as bio from biogeme import draws from biogeme.expressions import exp, bioDraws, MonteCarlo from biogeme.native_draws import RandomNumberGeneratorTuple .. GENERATED FROM PYTHON SOURCE LINES 22-24 .. code-block:: Python R = 10000 .. GENERATED FROM PYTHON SOURCE LINES 25-27 We create a fake database with one entry, as it is required to store the draws .. GENERATED FROM PYTHON SOURCE LINES 27-32 .. code-block:: Python df = pd.DataFrame() df['FakeColumn'] = [1.0] database = db.Database('fake_database', df) .. GENERATED FROM PYTHON SOURCE LINES 33-46 .. code-block:: Python def halton13(sample_size: int, number_of_draws: int) -> np.array: """ The user can define new draws. For example, Halton draws with base 13, skipping the first 10 draws. :param sample_size: number of observations for which draws must be generated. :param number_of_draws: number of draws to generate. """ return draws.get_halton_draws(sample_size, number_of_draws, base=13, skip=10) .. GENERATED FROM PYTHON SOURCE LINES 47-54 .. code-block:: Python my_draws = { 'HALTON13': RandomNumberGeneratorTuple( halton13, 'Halton draws, base 13, skipping 10' ) } database.set_random_number_generators(my_draws) .. GENERATED FROM PYTHON SOURCE LINES 55-59 .. code-block:: Python U = bioDraws('U', 'UNIFORM') integrand = exp(U) + exp(1 - U) simulated_integral = MonteCarlo(integrand) / 2.0 .. GENERATED FROM PYTHON SOURCE LINES 60-64 .. code-block:: Python U_halton13 = bioDraws('U_halton13', 'HALTON13') integrand_halton13 = exp(U_halton13) + exp(1 - U_halton13) simulated_integral_halton13 = MonteCarlo(integrand_halton13) / 2.0 .. GENERATED FROM PYTHON SOURCE LINES 65-69 .. code-block:: Python U_mlhs = bioDraws('U_mlhs', 'UNIFORM_MLHS') integrand_mlhs = exp(U_mlhs) + exp(1 - U_mlhs) simulated_integral_mlhs = MonteCarlo(integrand_mlhs) / 2.0 .. GENERATED FROM PYTHON SOURCE LINES 70-72 .. code-block:: Python true_integral = exp(1.0) - 1.0 .. GENERATED FROM PYTHON SOURCE LINES 73-75 .. code-block:: Python error = simulated_integral - true_integral .. GENERATED FROM PYTHON SOURCE LINES 76-78 .. code-block:: Python error_halton13 = simulated_integral_halton13 - true_integral .. GENERATED FROM PYTHON SOURCE LINES 79-81 .. code-block:: Python error_mlhs = simulated_integral_mlhs - true_integral .. GENERATED FROM PYTHON SOURCE LINES 82-92 .. code-block:: Python simulate = { 'Analytical Integral': true_integral, 'Simulated Integral': simulated_integral, 'Error ': error, 'Simulated Integral (Halton13)': simulated_integral_halton13, 'Error (Halton13) ': error_halton13, 'Simulated Integral (MLHS)': simulated_integral_mlhs, 'Error (MLHS) ': error_mlhs, } .. GENERATED FROM PYTHON SOURCE LINES 93-96 .. code-block:: Python biosim = bio.BIOGEME(database, simulate) biosim.modelName = 'b03antithetic_explicit' .. GENERATED FROM PYTHON SOURCE LINES 97-100 .. code-block:: Python results = biosim.simulate(the_beta_values={}) results .. raw:: html
Analytical Integral Simulated Integral Error Simulated Integral (Halton13) Error (Halton13) Simulated Integral (MLHS) Error (MLHS)
0 1.718282 1.725178 0.006897 1.718669 0.000387 1.71837 0.000088


.. GENERATED FROM PYTHON SOURCE LINES 101-115 .. code-block:: Python print(f"Analytical integral: {results.iloc[0]['Analytical Integral']:.6f}") print( f" \t{'Uniform (Anti)':>15}\t{'Halton13 (Anti)':>15}\t{'MLHS (Anti)':>15}" ) print( f"Simulated\t{results.iloc[0]['Simulated Integral']:>15.6g}\t" f"{results.iloc[0]['Simulated Integral (Halton13)']:>15.6g}\t" f"{results.iloc[0]['Simulated Integral (MLHS)']:>15.6g}" ) print( f"Error\t\t{results.iloc[0]['Error ']:>15.6g}\t" f"{results.iloc[0]['Error (Halton13) ']:>15.6g}\t" f"{results.iloc[0]['Error (MLHS) ']:>15.6g}" ) .. rst-class:: sphx-glr-script-out .. code-block:: none Analytical integral: 1.718282 Uniform (Anti) Halton13 (Anti) MLHS (Anti) Simulated 1.72518 1.71867 1.71837 Error 0.00689653 0.000387301 8.7832e-05 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.012 seconds) .. _sphx_glr_download_auto_examples_montecarlo_plot_b03antithetic_explicit.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_b03antithetic_explicit.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_b03antithetic_explicit.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_b03antithetic_explicit.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_