.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/indicators/plot_b03simulation.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_indicators_plot_b03simulation.py: Simulation of a choice model ============================ We use an estimated model to perform various simulations. Michel Bierlaire, EPFL Sat Jun 28 2025, 16:56:26 .. GENERATED FROM PYTHON SOURCE LINES 11-24 .. code-block:: Python import sys import time import pandas as pd from biogeme.biogeme import BIOGEME from biogeme.calculator import get_value_c from biogeme.data.optima import normalized_weight, read_data from biogeme.models import nested from biogeme.results_processing import EstimationResults from scenarios import scenario .. GENERATED FROM PYTHON SOURCE LINES 25-27 Obtain the specification for the default scenario. The definition of the scenarios is available in :ref:`scenarios`. .. GENERATED FROM PYTHON SOURCE LINES 27-33 .. code-block:: Python v, nests, _, _ = scenario() v_pt = v[0] v_car = v[1] v_sm = v[2] .. GENERATED FROM PYTHON SOURCE LINES 34-35 Obtain the expression for the choice probability of each alternative. .. GENERATED FROM PYTHON SOURCE LINES 35-51 .. code-block:: Python prob_pt = nested(v, None, nests, 0) prob_car = nested(v, None, nests, 1) prob_sm = nested(v, None, nests, 2) # Read the estimation results from the file try: results = EstimationResults.from_yaml_file( filename='saved_results/b02estimation.yaml' ) except FileNotFoundError: sys.exit( 'Run first the script b02simulation.py ' 'in order to generate the ' 'file b02estimation.yaml.' ) .. GENERATED FROM PYTHON SOURCE LINES 52-53 Read the database .. GENERATED FROM PYTHON SOURCE LINES 53-55 .. code-block:: Python database = read_data() .. GENERATED FROM PYTHON SOURCE LINES 56-59 We now simulate various expressions on the database, and store the results in a Pandas dataframe. %% .. GENERATED FROM PYTHON SOURCE LINES 59-115 .. code-block:: Python start_time = time.time() simulate_formulas = { 'weight': get_value_c( expression=normalized_weight, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), 'Utility PT': get_value_c( expression=v_pt, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), 'Utility car': get_value_c( expression=v_car, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), 'Utility SM': get_value_c( expression=v_sm, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), 'Prob. PT': get_value_c( expression=prob_pt, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), 'Prob. car': get_value_c( expression=prob_car, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), 'Prob. SM': get_value_c( expression=prob_sm, betas=results.get_beta_values(), database=database, numerically_safe=False, use_jit=True, ), } simulated_values = pd.DataFrame.from_dict(simulate_formulas) end_time = time.time() .. GENERATED FROM PYTHON SOURCE LINES 116-121 .. code-block:: Python print( f'--- Execution time without Biogeme: ' f'{end_time - start_time:.2f} seconds ---' ) .. rst-class:: sphx-glr-script-out .. code-block:: none --- Execution time without Biogeme: 0.77 seconds --- .. GENERATED FROM PYTHON SOURCE LINES 122-126 We now perform the same simulation using Biogeme. The results are identical, but the syntax is simpler and the execution time is a little bit faster. Indeed, Biogeme recycles calculations performed for one expression for the other expressions. .. GENERATED FROM PYTHON SOURCE LINES 128-129 A dictionary with the requested expression must be provided to Biogeme .. GENERATED FROM PYTHON SOURCE LINES 129-139 .. code-block:: Python simulate = { 'weight': normalized_weight, 'Utility PT': v_pt, 'Utility car': v_car, 'Utility SM': v_sm, 'Prob. PT': prob_pt, 'Prob. car': prob_car, 'Prob. SM': prob_sm, } .. GENERATED FROM PYTHON SOURCE LINES 140-146 .. code-block:: Python start_time = time.time() the_biogeme = BIOGEME(database, simulate) the_betas = results.get_beta_values() biogeme_simulation = the_biogeme.simulate(results.get_beta_values()) end_time = time.time() .. GENERATED FROM PYTHON SOURCE LINES 147-152 .. code-block:: Python print( f'--- Execution time with Biogeme: ' f'{time.time() - start_time:.2f} seconds ---' ) .. rst-class:: sphx-glr-script-out .. code-block:: none --- Execution time with Biogeme: 0.62 seconds --- .. GENERATED FROM PYTHON SOURCE LINES 153-154 Let's print the two results, to show that they are identical .. GENERATED FROM PYTHON SOURCE LINES 156-157 Without Biogeme .. GENERATED FROM PYTHON SOURCE LINES 157-159 .. code-block:: Python print(simulated_values) .. rst-class:: sphx-glr-script-out .. code-block:: none weight Utility PT Utility car ... Prob. PT Prob. car Prob. SM 0 0.893779 -0.234985 -0.156370 ... 0.479431 0.519165 0.001404 1 0.868674 -0.442406 0.195938 ... 0.241046 0.560868 0.198086 2 0.868674 -2.021524 -0.048079 ... 0.119893 0.875040 0.005067 3 0.965766 -2.293563 0.027404 ... 0.051229 0.813507 0.135264 4 0.868674 -1.010973 0.008391 ... 0.259609 0.729616 0.010775 ... ... ... ... ... ... ... ... 1894 2.053830 -1.156962 -0.256143 ... 0.288859 0.711097 0.000044 1895 0.868674 -2.145229 -0.412661 ... 0.149688 0.849018 0.001294 1896 0.868674 -0.998305 0.065662 ... 0.205928 0.688197 0.105875 1897 0.965766 -1.145931 0.009557 ... 0.222025 0.742202 0.035772 1898 0.965766 -1.293037 -0.048959 ... 0.211584 0.763156 0.025259 [1899 rows x 7 columns] .. GENERATED FROM PYTHON SOURCE LINES 160-161 With Biogeme .. GENERATED FROM PYTHON SOURCE LINES 161-162 .. code-block:: Python print(biogeme_simulation) .. rst-class:: sphx-glr-script-out .. code-block:: none weight Utility PT Utility car ... Prob. PT Prob. car Prob. SM 0 0.893779 -0.234985 -0.156370 ... 0.479431 0.519165 0.001404 1 0.868674 -0.442406 0.195938 ... 0.241046 0.560868 0.198086 2 0.868674 -2.021524 -0.048079 ... 0.119893 0.875040 0.005067 3 0.965766 -2.293563 0.027404 ... 0.051229 0.813507 0.135264 4 0.868674 -1.010973 0.008391 ... 0.259609 0.729616 0.010775 ... ... ... ... ... ... ... ... 1894 2.053830 -1.156962 -0.256143 ... 0.288859 0.711097 0.000044 1895 0.868674 -2.145229 -0.412661 ... 0.149688 0.849018 0.001294 1896 0.868674 -0.998305 0.065662 ... 0.205928 0.688197 0.105875 1897 0.965766 -1.145931 0.009557 ... 0.222025 0.742202 0.035772 1898 0.965766 -1.293037 -0.048959 ... 0.211584 0.763156 0.025259 [1899 rows x 7 columns] .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 2.120 seconds) .. _sphx_glr_download_auto_examples_indicators_plot_b03simulation.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_b03simulation.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_b03simulation.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_b03simulation.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_