.. 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. Michel Bierlaire, EPFL Sat Jun 28 2025, 21:09:19 .. GENERATED FROM PYTHON SOURCE LINES 12-22 .. code-block:: Python import numpy as np import pandas as pd from IPython.core.display_functions import display from biogeme.biogeme import BIOGEME from biogeme.database import Database from biogeme.draws import RandomNumberGeneratorTuple, get_halton_draws from biogeme.expressions import Draws, MonteCarlo, exp .. GENERATED FROM PYTHON SOURCE LINES 23-25 .. code-block:: Python R = 2_000_000 .. GENERATED FROM PYTHON SOURCE LINES 26-28 We create a fake database with one entry, as it is required to store the draws .. GENERATED FROM PYTHON SOURCE LINES 28-33 .. code-block:: Python df = pd.DataFrame() df['FakeColumn'] = [1.0] database = Database('fake_database', df) .. GENERATED FROM PYTHON SOURCE LINES 34-47 .. 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 get_halton_draws(sample_size, number_of_draws, base=13, skip=10) .. GENERATED FROM PYTHON SOURCE LINES 48-54 .. code-block:: Python my_draws = { 'HALTON13': RandomNumberGeneratorTuple( halton13, 'Halton draws, base 13, skipping 10' ) } .. GENERATED FROM PYTHON SOURCE LINES 55-59 .. code-block:: Python U = Draws('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 = Draws('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 = Draws('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-98 .. code-block:: Python biosim = BIOGEME( database, simulate, random_number_generators=my_draws, number_of_draws=R ) biosim.model_name = 'b03antithetic_explicit' .. GENERATED FROM PYTHON SOURCE LINES 99-102 .. code-block:: Python results = biosim.simulate(the_beta_values={}) display(results) .. rst-class:: sphx-glr-script-out .. code-block:: none Analytical Integral ... Error (MLHS) 0 1.718282 ... -4.418821e-11 [1 rows x 7 columns] .. GENERATED FROM PYTHON SOURCE LINES 103-117 .. 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.71826 1.71828 1.71828 Error -1.74385e-05 5.57648e-08 -4.41882e-11 .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.423 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 `_