.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_examples/timing/plot_comparison.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_timing_plot_comparison.py: Comparison of execution times ============================= Michel Bierlaire Tue Jul 2 14:48:52 2024 .. GENERATED FROM PYTHON SOURCE LINES 9-13 .. code-block:: Python import pandas as pd from IPython.core.display_functions import display .. GENERATED FROM PYTHON SOURCE LINES 14-16 Version 3.2.14 and 3.3.0 of Biogeme have been used to calculate a logit, a crossed-nested logit and a logit mixtures model on the same computer (MacBook Pro Apple M2 Max 64 GB). .. GENERATED FROM PYTHON SOURCE LINES 19-20 Raw data .. GENERATED FROM PYTHON SOURCE LINES 20-68 .. code-block:: Python running_times = [ # Logit 3.2.14 ('logit', '3.2.14', 'Function only', None, 0.132), ('logit', '3.2.14', 'Function and gradient', None, 0.135), ('logit', '3.2.14', 'Function, gradient and hessian', None, 0.141), # Logit new ('logit', '3.3.0', 'Function only', 'with JIT', 0.0022), ('logit', '3.3.0', 'Function only', 'without JIT', 0.0161), ('logit', '3.3.0', 'Function and gradient', 'with JIT', 0.000819), ('logit', '3.3.0', 'Function and gradient', 'without JIT', 0.0445), ('logit', '3.3.0', 'Function, gradient and hessian', 'with JIT', 0.00258), ('logit', '3.3.0', 'Function, gradient and hessian', 'without JIT', 0.136), # CNL 3.2.14 ('CNL', '3.2.14', 'Function only', None, 0.408), ('CNL', '3.2.14', 'Function and gradient', None, 0.362), ('CNL', '3.2.14', 'Function, gradient and hessian', None, 0.324), # CNL new ('CNL', '3.3.0', 'Function only', 'with JIT', 0.0034), ('CNL', '3.3.0', 'Function only', 'without JIT', 0.147), ('CNL', '3.3.0', 'Function and gradient', 'with JIT', 0.00848), ('CNL', '3.3.0', 'Function and gradient', 'without JIT', 0.525), ('CNL', '3.3.0', 'Function, gradient and hessian', 'with JIT', 0.121), ('CNL', '3.3.0', 'Function, gradient and hessian', 'without JIT', 1.79), # Mixtures 100 draws 3.2.14 ('mixtures_100', '3.2.14', 'Function only', None, 1.38), ('mixtures_100', '3.2.14', 'Function and gradient', None, 1.65), ('mixtures_100', '3.2.14', 'Function, gradient and hessian', None, 2.12), # Mixtures 100 draws new ('mixtures_100', '3.3.0', 'Function only', 'with JIT', 0.0476), ('mixtures_100', '3.3.0', 'Function only', 'without JIT', 0.0503), ('mixtures_100', '3.3.0', 'Function and gradient', 'with JIT', 0.0185), ('mixtures_100', '3.3.0', 'Function and gradient', 'without JIT', 0.116), ('mixtures_100', '3.3.0', 'Function, gradient and hessian', 'with JIT', 0.16), ('mixtures_100', '3.3.0', 'Function, gradient and hessian', 'without JIT', 0.586), # Mixtures 1000 draws new ('mixtures_1000', '3.3.0', 'Function only', 'with JIT', 0.0836), ('mixtures_1000', '3.3.0', 'Function only', 'without JIT', 0.32), ('mixtures_1000', '3.3.0', 'Function and gradient', 'with JIT', 0.199), ('mixtures_1000', '3.3.0', 'Function and gradient', 'without JIT', 0.61), ('mixtures_1000', '3.3.0', 'Function, gradient and hessian', 'with JIT', 1.63), ('mixtures_1000', '3.3.0', 'Function, gradient and hessian', 'without JIT', 4.84), ] df = pd.DataFrame( running_times, columns=['Model', 'Version', 'Computation', 'JIT', 'Time_sec'] ) display(df) .. rst-class:: sphx-glr-script-out .. code-block:: none Model Version ... JIT Time_sec 0 logit 3.2.14 ... None 0.132000 1 logit 3.2.14 ... None 0.135000 2 logit 3.2.14 ... None 0.141000 3 logit 3.3.0 ... with JIT 0.002200 4 logit 3.3.0 ... without JIT 0.016100 5 logit 3.3.0 ... with JIT 0.000819 6 logit 3.3.0 ... without JIT 0.044500 7 logit 3.3.0 ... with JIT 0.002580 8 logit 3.3.0 ... without JIT 0.136000 9 CNL 3.2.14 ... None 0.408000 10 CNL 3.2.14 ... None 0.362000 11 CNL 3.2.14 ... None 0.324000 12 CNL 3.3.0 ... with JIT 0.003400 13 CNL 3.3.0 ... without JIT 0.147000 14 CNL 3.3.0 ... with JIT 0.008480 15 CNL 3.3.0 ... without JIT 0.525000 16 CNL 3.3.0 ... with JIT 0.121000 17 CNL 3.3.0 ... without JIT 1.790000 18 mixtures_100 3.2.14 ... None 1.380000 19 mixtures_100 3.2.14 ... None 1.650000 20 mixtures_100 3.2.14 ... None 2.120000 21 mixtures_100 3.3.0 ... with JIT 0.047600 22 mixtures_100 3.3.0 ... without JIT 0.050300 23 mixtures_100 3.3.0 ... with JIT 0.018500 24 mixtures_100 3.3.0 ... without JIT 0.116000 25 mixtures_100 3.3.0 ... with JIT 0.160000 26 mixtures_100 3.3.0 ... without JIT 0.586000 27 mixtures_1000 3.3.0 ... with JIT 0.083600 28 mixtures_1000 3.3.0 ... without JIT 0.320000 29 mixtures_1000 3.3.0 ... with JIT 0.199000 30 mixtures_1000 3.3.0 ... without JIT 0.610000 31 mixtures_1000 3.3.0 ... with JIT 1.630000 32 mixtures_1000 3.3.0 ... without JIT 4.840000 [33 rows x 5 columns] .. GENERATED FROM PYTHON SOURCE LINES 69-70 Function evaluation .. GENERATED FROM PYTHON SOURCE LINES 70-86 .. code-block:: Python def generate_speedup_sentence(model_name, computation_type): old_time = df.query( 'Model == @model_name and Version == "3.2.14" and Computation == @computation_type' )['Time_sec'].values[0] new_time = df.query( 'Model == @model_name and Version == "3.3.0" and Computation == @computation_type and JIT == "with JIT"' )['Time_sec'].values[0] speedup = old_time / new_time return ( f'For a {model_name} model, version 3.3.0 of Biogeme with JIT is ' f'{speedup:.1f} times faster than version 3.2.14 for {computation_type.lower()}.' ) .. GENERATED FROM PYTHON SOURCE LINES 87-88 Generate all speedup sentences .. GENERATED FROM PYTHON SOURCE LINES 88-99 .. code-block:: Python unique_models = df['Model'].unique() unique_computations = df['Computation'].unique() for model in unique_models: for computation in unique_computations: try: sentence = generate_speedup_sentence(model, computation) print(sentence) except IndexError: # Skip combinations where data is missing continue .. rst-class:: sphx-glr-script-out .. code-block:: none For a logit model, version 3.3.0 of Biogeme with JIT is 60.0 times faster than version 3.2.14 for function only. For a logit model, version 3.3.0 of Biogeme with JIT is 164.8 times faster than version 3.2.14 for function and gradient. For a logit model, version 3.3.0 of Biogeme with JIT is 54.7 times faster than version 3.2.14 for function, gradient and hessian. For a CNL model, version 3.3.0 of Biogeme with JIT is 120.0 times faster than version 3.2.14 for function only. For a CNL model, version 3.3.0 of Biogeme with JIT is 42.7 times faster than version 3.2.14 for function and gradient. For a CNL model, version 3.3.0 of Biogeme with JIT is 2.7 times faster than version 3.2.14 for function, gradient and hessian. For a mixtures_100 model, version 3.3.0 of Biogeme with JIT is 29.0 times faster than version 3.2.14 for function only. For a mixtures_100 model, version 3.3.0 of Biogeme with JIT is 89.2 times faster than version 3.2.14 for function and gradient. For a mixtures_100 model, version 3.3.0 of Biogeme with JIT is 13.2 times faster than version 3.2.14 for function, gradient and hessian. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.031 seconds) .. _sphx_glr_download_auto_examples_timing_plot_comparison.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_comparison.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_comparison.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_comparison.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_