Saved in:
Bibliographic Details
Main Authors: Podhaisky, Georg, Sokolov, Igor M., Roichman, Yael, Lindner, Benjamin
Format: Recurso digital
Language:
Published: Zenodo 2025
Online Access:https://doi.org/10.5281/zenodo.19349444
Tags: Add Tag
No Tags, Be the first to tag this record!
_version_ 1866902106005307392
author Podhaisky, Georg
Sokolov, Igor M.
Roichman, Yael
Lindner, Benjamin
author_facet Podhaisky, Georg
Sokolov, Igor M.
Roichman, Yael
Lindner, Benjamin
contents <p>This repository provides the numerical routines that were used to create the figures in</p> <p> </p> <p>G. Podhaisky, I. M. Sokolov, Y. Roichman, B. Lindner: Reliability of a nonlinear fluctuation-dissipation relation as a test of Markovianity, Phys. Rev. E (2026).</p> <p> </p> <p> </p> <p>## Contributors</p> <p> </p> <p>Georg Podhaisky (1,2),</p> <p>Igor M. Sokolov (2),</p> <p>Yael Roichman (3,4),</p> <p>Benjamin Lindner (1,2)</p> <p> </p> <p>Affilitations:</p> <p> </p> <p>1. Bernstein Center for Computational Neuroscience Berlin, Philippstr. 13, Haus 6, 10115 Berlin, Germany</p> <p>2. Physics Department of Humboldt University Berlin, Newtonstr. 15, 12489 Berlin, Germany</p> <p>3. The Raymond and Beverley School of Physics and Astronomy, Tel Aviv University, Tel Aviv 6997801, Israel</p> <p>4. The Raymond and Beverley School of Chemistry, Tel Aviv University, Tel Aviv 6997801, Israel</p> <p> </p> <p>## License:</p> <p> </p> <p>This code is supplied as free software under the Affero GNU General Public License v3 (or later). You can use and modify it, but must cite our work. For details, see the LICENSE.txt file.</p> <p> </p> <p>## Setup</p> <p> </p> <p>Dependencies: python, numpy, scipy, c++</p> <p> </p> <p>## How to cite</p> <p> </p> <p>When reusing the code, please cite the corresponing publication.</p> <p> </p> <p>## Perform simulations and measure statistics in accordance with the measurement protocol</p> <p> </p> <p>The simulations are carried out with ./routines/ornstein_uhlenbeck_protocol_simulation.cpp. This routine simulates the trajectories of a given ensemble and computes the correlation estimator (in x and z) and the mean transient estimator (in z). The following arguments are handed over when calling the executable:</p> <p> </p> <p>1. total number of simulation steps per trajectory</p> <p>2. kappa (called gamma here), which governs the restoring force</p> <p>3. timestep for integration</p> <p>4. D, which governs the noise intensity</p> <p>5. initial position</p> <p>6. epsilon, i.e. the perturbation amplitude</p> <p>7. index, some integer that determines the seeds for the random numbers (by changing this, different realizations can be produced)</p> <p>8. number of realizations per ensemble, one call of the routine creates one ensemble with this number of distinct trajectories</p> <p>9. output_option, which governs which statistics are measured and written to file</p> <p>10. target_directory, this integer determines the suffix of the ./local_result_path_[suffix].txt file, which determines the output directory.</p> <p>* E.g. if this argument is 0, then the output is written to the directory specified in ./local_result_path_0.txt</p> <p> </p> <p>To compile and run this script efficiently for large test series, use the python script ./meta_scripts/calculation/test_series_index.py:</p> <p> </p> <p>1. Determine an output directory. Write the path to this directory into ./local_result_path_[suffix].txt, with [suffix] being a particular integer. Set the variable target_directory in test_series_index.py to this integer.</p> <p>2. Determine the output_option parameter. The value 1 is chosen to produce all output that is necessary for reproducing the plots.</p> <p>3. Specify the other parameters as</p> <p>* max_step = 100000</p> <p>* gamma = 1</p> <p>* timestep = 0.01</p> <p>* D = 1/11</p> <p>* initial_position = 0</p> <p>* realizations = 10</p> <p>4. Specify the indices that are used to seed the random numbers.</p> <p>* Provide these indices with the (step, first, last) variables. This creates a set of seeds with the python range(first, last, step) function.</p> <p>* For each of the indices i in range(first, last, step) an ensemble of trajectories is simulated.</p> <p>* Each trajectory in each ensemble gets a separate seed.</p> <p>* I.e. the first trajectory is seeeded with i, the second one is seeded with i+1, the last one is seeded with i + realizations -1</p> <p>* In order to simulate ensembles with distinct trajectories, the variables must be set with realizations <= step.</p> <p>5. Specify the perturbation amplitudes for which the simulation is performed.</p> <p>* write the values in a list in the for loop "for epsilon in [list of perturbation amplitudes]:"</p> <p> </p> <p>6. Run the python script in the directory ./meta_scripts/calculation/</p> <p> </p> <p>In order to get the results that were used for the figures, the following parameters need to be set in 4. and 5.</p> <p> </p> <p>* (step, first, last) = (0, 10000, 10) and [list of perturbation amplitudes] = [0.2]</p> <p>* (step, first, last) = (0, 1, 2000) and [list of perturbation amplitudes] = [0.2]</p> <p>* (step, first, last) = (0, 10000, 10) and [list of perturbation amplitudes] = [0.4]</p> <p>* (step, first, last) = (0, 30000, 10) and [list of perturbation amplitudes] = [0.5]</p> <p>* (step, first, last) = (0, 10000, 100) and [list of perturbation amplitudes] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]</p> <p> </p> <p>## Compute the predictions for Var(d), Avg(d) and Var(C_z)</p> <p> </p> <p>The predictions for Var(d), Avg(d) and Var(C_z) in the figures are obtained from the routine ./routines/nfdr_violation_prediction.cpp.</p> <p>The same arguments as for ornstein_uhlenbeck_protocol_simulation.cpp are handed over, except arguments 7 and 10.</p> <p> </p> <p>To compile and run this, use the python script ./meta_scripts/calculation/prediction_nfdr_violation.py.</p> <p> </p> <p>1. Determine an output directory. Write the path to this directory into the two files</p> <p>* prediction_nfdr_violation.py at</p> <p>* result_path = "[enter full path to output directory here]"</p> <p>* nfdr_violation_prediction.cpp at</p> <p>* result_file.open("[enter full path to output directory here]")</p> <p>* as well as at result_file.open("[enter full path to output directory here]/variance_correlation_estimator_")</p> <p>2. All other parameters are specifed as needed for the reproduction of the plots. They can be modified similarly to the parameters in test_series_index.py, see above.</p> <p>3. Run the python script in the directory ./meta_scripts/calculation/</p> <p> </p> <p> </p> <p>## Create figures</p> <p> </p> <p>If all of the simulations and computations described above have been done, the figures can be created with python routines in</p> <p>./meta_scripts/analysis/plot/.</p> <p>In all of these routines the target_directory_index must be set to match the suffix in ./local_result_path_[suffix].txt, s.t. the correct output directory is identified. Other than that, manually insert the paths to result files etc. where indicated.</p> <p>All other parameters can be left as they are.</p> <p> </p> <p>1. Figure 1:</p> <p>* run protocol_illustration.py in ./meta_scripts/analysis/plot/protocol_and_conj_variable_illustration/</p> <p>1. Figures 2-8:</p> <p>* run extensive_estimator_test.py in ./meta_scripts/analysis/plot/single_estimators/</p> <p>3. Figures 9, 10, 12:</p> <p>* run analysis_nfdr_violation.py in ./meta_scripts/analysis/plot/nfdr_deviation/</p> <p>4. Figure 11:</p> <p>* run conjugated_variable_illustration.py in ./meta_scripts/analysis/plot/protocol_and_conj_variable_illustration/</p> <p>5. Figure 13:</p> <p>* run normal_distribution_estimator.py in ./meta_scripts/analysis/plot/normal_distribution_estimator/</p> <p>6. Figures 14, 15:</p> <p>* run heavy_tail_distribution.py in ./meta_scripts/analysis/plot/heavy_tail_distribution/</p> <p>7. Figure 16:</p> <p>* This can only be created if step 6. has already been done.</p> <p>* run sampling_from_surrogate.py in ./meta_scripts/analysis/plot/heavy_tail_distribution/</p> <p>* run plot_sampling_from_surrogate.py in ./meta_scripts/analysis/plot/heavy_tail_distribution/</p> <p> </p> <p> </p> <p>## Contact person</p> <p> </p> <p>Georg Podhaisky</p> <p>ORCID 0009-0000-8731-6793</p> <p>g.podhaisky@hu-berlin.de</p> <p> </p> <p>## Funding acknowledgements</p> <p> </p> <p>This research was funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation), grant number</p> <p>LI 1046/15-1.</p> <p> </p> <p> </p>
format Recurso digital
id zenodo_https___doi_org_10_5281_zenodo_19349444
institution Zenodo
language
publishDate 2025
publisher Zenodo
record_format zenodo
spellingShingle Markov test reliability
Podhaisky, Georg
Sokolov, Igor M.
Roichman, Yael
Lindner, Benjamin
<p>This repository provides the numerical routines that were used to create the figures in</p> <p> </p> <p>G. Podhaisky, I. M. Sokolov, Y. Roichman, B. Lindner: Reliability of a nonlinear fluctuation-dissipation relation as a test of Markovianity, Phys. Rev. E (2026).</p> <p> </p> <p> </p> <p>## Contributors</p> <p> </p> <p>Georg Podhaisky (1,2),</p> <p>Igor M. Sokolov (2),</p> <p>Yael Roichman (3,4),</p> <p>Benjamin Lindner (1,2)</p> <p> </p> <p>Affilitations:</p> <p> </p> <p>1. Bernstein Center for Computational Neuroscience Berlin, Philippstr. 13, Haus 6, 10115 Berlin, Germany</p> <p>2. Physics Department of Humboldt University Berlin, Newtonstr. 15, 12489 Berlin, Germany</p> <p>3. The Raymond and Beverley School of Physics and Astronomy, Tel Aviv University, Tel Aviv 6997801, Israel</p> <p>4. The Raymond and Beverley School of Chemistry, Tel Aviv University, Tel Aviv 6997801, Israel</p> <p> </p> <p>## License:</p> <p> </p> <p>This code is supplied as free software under the Affero GNU General Public License v3 (or later). You can use and modify it, but must cite our work. For details, see the LICENSE.txt file.</p> <p> </p> <p>## Setup</p> <p> </p> <p>Dependencies: python, numpy, scipy, c++</p> <p> </p> <p>## How to cite</p> <p> </p> <p>When reusing the code, please cite the corresponing publication.</p> <p> </p> <p>## Perform simulations and measure statistics in accordance with the measurement protocol</p> <p> </p> <p>The simulations are carried out with ./routines/ornstein_uhlenbeck_protocol_simulation.cpp. This routine simulates the trajectories of a given ensemble and computes the correlation estimator (in x and z) and the mean transient estimator (in z). The following arguments are handed over when calling the executable:</p> <p> </p> <p>1. total number of simulation steps per trajectory</p> <p>2. kappa (called gamma here), which governs the restoring force</p> <p>3. timestep for integration</p> <p>4. D, which governs the noise intensity</p> <p>5. initial position</p> <p>6. epsilon, i.e. the perturbation amplitude</p> <p>7. index, some integer that determines the seeds for the random numbers (by changing this, different realizations can be produced)</p> <p>8. number of realizations per ensemble, one call of the routine creates one ensemble with this number of distinct trajectories</p> <p>9. output_option, which governs which statistics are measured and written to file</p> <p>10. target_directory, this integer determines the suffix of the ./local_result_path_[suffix].txt file, which determines the output directory.</p> <p>* E.g. if this argument is 0, then the output is written to the directory specified in ./local_result_path_0.txt</p> <p> </p> <p>To compile and run this script efficiently for large test series, use the python script ./meta_scripts/calculation/test_series_index.py:</p> <p> </p> <p>1. Determine an output directory. Write the path to this directory into ./local_result_path_[suffix].txt, with [suffix] being a particular integer. Set the variable target_directory in test_series_index.py to this integer.</p> <p>2. Determine the output_option parameter. The value 1 is chosen to produce all output that is necessary for reproducing the plots.</p> <p>3. Specify the other parameters as</p> <p>* max_step = 100000</p> <p>* gamma = 1</p> <p>* timestep = 0.01</p> <p>* D = 1/11</p> <p>* initial_position = 0</p> <p>* realizations = 10</p> <p>4. Specify the indices that are used to seed the random numbers.</p> <p>* Provide these indices with the (step, first, last) variables. This creates a set of seeds with the python range(first, last, step) function.</p> <p>* For each of the indices i in range(first, last, step) an ensemble of trajectories is simulated.</p> <p>* Each trajectory in each ensemble gets a separate seed.</p> <p>* I.e. the first trajectory is seeeded with i, the second one is seeded with i+1, the last one is seeded with i + realizations -1</p> <p>* In order to simulate ensembles with distinct trajectories, the variables must be set with realizations <= step.</p> <p>5. Specify the perturbation amplitudes for which the simulation is performed.</p> <p>* write the values in a list in the for loop "for epsilon in [list of perturbation amplitudes]:"</p> <p> </p> <p>6. Run the python script in the directory ./meta_scripts/calculation/</p> <p> </p> <p>In order to get the results that were used for the figures, the following parameters need to be set in 4. and 5.</p> <p> </p> <p>* (step, first, last) = (0, 10000, 10) and [list of perturbation amplitudes] = [0.2]</p> <p>* (step, first, last) = (0, 1, 2000) and [list of perturbation amplitudes] = [0.2]</p> <p>* (step, first, last) = (0, 10000, 10) and [list of perturbation amplitudes] = [0.4]</p> <p>* (step, first, last) = (0, 30000, 10) and [list of perturbation amplitudes] = [0.5]</p> <p>* (step, first, last) = (0, 10000, 100) and [list of perturbation amplitudes] = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]</p> <p> </p> <p>## Compute the predictions for Var(d), Avg(d) and Var(C_z)</p> <p> </p> <p>The predictions for Var(d), Avg(d) and Var(C_z) in the figures are obtained from the routine ./routines/nfdr_violation_prediction.cpp.</p> <p>The same arguments as for ornstein_uhlenbeck_protocol_simulation.cpp are handed over, except arguments 7 and 10.</p> <p> </p> <p>To compile and run this, use the python script ./meta_scripts/calculation/prediction_nfdr_violation.py.</p> <p> </p> <p>1. Determine an output directory. Write the path to this directory into the two files</p> <p>* prediction_nfdr_violation.py at</p> <p>* result_path = "[enter full path to output directory here]"</p> <p>* nfdr_violation_prediction.cpp at</p> <p>* result_file.open("[enter full path to output directory here]")</p> <p>* as well as at result_file.open("[enter full path to output directory here]/variance_correlation_estimator_")</p> <p>2. All other parameters are specifed as needed for the reproduction of the plots. They can be modified similarly to the parameters in test_series_index.py, see above.</p> <p>3. Run the python script in the directory ./meta_scripts/calculation/</p> <p> </p> <p> </p> <p>## Create figures</p> <p> </p> <p>If all of the simulations and computations described above have been done, the figures can be created with python routines in</p> <p>./meta_scripts/analysis/plot/.</p> <p>In all of these routines the target_directory_index must be set to match the suffix in ./local_result_path_[suffix].txt, s.t. the correct output directory is identified. Other than that, manually insert the paths to result files etc. where indicated.</p> <p>All other parameters can be left as they are.</p> <p> </p> <p>1. Figure 1:</p> <p>* run protocol_illustration.py in ./meta_scripts/analysis/plot/protocol_and_conj_variable_illustration/</p> <p>1. Figures 2-8:</p> <p>* run extensive_estimator_test.py in ./meta_scripts/analysis/plot/single_estimators/</p> <p>3. Figures 9, 10, 12:</p> <p>* run analysis_nfdr_violation.py in ./meta_scripts/analysis/plot/nfdr_deviation/</p> <p>4. Figure 11:</p> <p>* run conjugated_variable_illustration.py in ./meta_scripts/analysis/plot/protocol_and_conj_variable_illustration/</p> <p>5. Figure 13:</p> <p>* run normal_distribution_estimator.py in ./meta_scripts/analysis/plot/normal_distribution_estimator/</p> <p>6. Figures 14, 15:</p> <p>* run heavy_tail_distribution.py in ./meta_scripts/analysis/plot/heavy_tail_distribution/</p> <p>7. Figure 16:</p> <p>* This can only be created if step 6. has already been done.</p> <p>* run sampling_from_surrogate.py in ./meta_scripts/analysis/plot/heavy_tail_distribution/</p> <p>* run plot_sampling_from_surrogate.py in ./meta_scripts/analysis/plot/heavy_tail_distribution/</p> <p> </p> <p> </p> <p>## Contact person</p> <p> </p> <p>Georg Podhaisky</p> <p>ORCID 0009-0000-8731-6793</p> <p>g.podhaisky@hu-berlin.de</p> <p> </p> <p>## Funding acknowledgements</p> <p> </p> <p>This research was funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation), grant number</p> <p>LI 1046/15-1.</p> <p> </p> <p> </p>
title Markov test reliability
url https://doi.org/10.5281/zenodo.19349444