Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pause and restart simulation #174

Closed
lec00q opened this issue Jun 7, 2020 · 2 comments
Closed

Pause and restart simulation #174

lec00q opened this issue Jun 7, 2020 · 2 comments

Comments

@lec00q
Copy link

lec00q commented Jun 7, 2020

Would it be possible to run the simulation up to a certain point, stop it to inspect the current status and then restart it again?

This would be equivalent to initialize the simulation with a known initial state.
Possibly related to: #98 ?

Alternatively, does the tracker have the ability to inspect the results while the simulation is running?

Thanks!

@geraintpalmer
Copy link
Member

Hi @lec00q

Pausing and restarting the simulation can be done by running until a certain time, then using the same Simulation object again to run the rest of the time.

For example, running a simulatiuon for 20 time units, but pausing at 10.

First consider not pausing at all:

>>> N = ciw.create_network(
...     arrival_distributions=[ciw.dists.Exponential(1)],
...     service_distributions=[ciw.dists.Exponential(2)],
...     number_of_servers=[2]
... )

>>> ciw.seed(0)
>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(20)
>>> recs = Q.get_all_records()

>>> len(recs)
14

>>> [r.arrival_date for r in recs]
[2.4063202566068163,
 1.8606071110652234,
 3.122275006373967,
 4.65381985396865,
 5.301223323521953,
 7.688417791844613,
 8.019477683822869,
 8.982778780921402,
 11.387908978434579,
 13.421061759569643,
 13.049784186726923,
 15.712096692891578,
 16.35102601912159,
 16.9204908622033]

Now lets run it for the first 10 time units, lookn at the resutls, then continue it to the end of the simulation:

>>> ciw.seed(0)
>>> Q = ciw.Simulation(N)
>>> Q.simulate_until_max_time(10)
>>> recs_pause = Q.get_all_records()

>>> len(recs_pause)
8

>>> [r.arrival_date for r in recs_pause]
[2.4063202566068163,
 1.8606071110652234,
 3.122275006373967,
 4.65381985396865,
 5.301223323521953,
 7.688417791844613,
 8.019477683822869,
 8.982778780921402]

>>> # Now continue to simulate the same object until time 20:
>>> Q.simulate_until_max_time(20)
>>> recs_afterpause = Q.get_all_records()

>>> len(recs_afterpause)
14

>>> [r.arrival_date for r in recs_afterpause]
[2.4063202566068163,
 1.8606071110652234,
 3.122275006373967,
 4.65381985396865,
 5.301223323521953,
 7.688417791844613,
 8.019477683822869,
 8.982778780921402,
 11.387908978434579,
 13.421061759569643,
 13.049784186726923,
 15.712096692891578,
 16.35102601912159,
 16.9204908622033]

Hope this helps

@lec00q
Copy link
Author

lec00q commented Jun 8, 2020

Hi @geraintpalmer, I was trying that but I wasn't sure about the result. My bad!

I will give it a go again after your suggestion.

Many thanks!

@lec00q lec00q closed this as completed Jun 8, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants