updating throughput experiment to include reschedule counts and makespan - #65
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This pull request extends the throughput experiment pipeline to record additional outcome metrics (makespan and online-policy reschedule counts), enabling richer comparisons across schedulers/policies and improved visualization for both throughput and makespan.
Changes:
- Added
Environment.reschedule_counttracking and wired it into rescheduling policies. - Updated throughput experiment runner to emit
MakespanandRescheduleCountcolumns per run. - Updated analysis script to normalize and render separate heatmaps for throughput and makespan.
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| src/saga/schedulers/online/policy/reschedule.py | Increment reschedule_count when reschedules occur across multiple rescheduling policies. |
| src/saga/schedulers/online/environment/frontier.py | Reset reschedule_count in FrontierEnvironment.reset(). |
| src/saga/schedulers/online/environment/init.py | Add and reset Environment.reschedule_count as part of simulation state. |
| scripts/experiments/throughput_experiment/run.py | Emit throughput, makespan, and reschedule counts into experiment CSV rows. |
| scripts/experiments/throughput_experiment/analyze.py | Normalize throughput/makespan separately and generate two heatmaps per workflow. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
OnlinePolicy.update() is documented to return None when it leaves the schedule unchanged, but the no-reschedule branches returned environment.schedule. That made Environment.step() treat every step as a revision and redo the task/network state recompute for nothing. Return None instead. reschedule_count is unaffected (it is incremented after the no-reschedule guard, so it already counted only real reschedules); add tests covering that it starts at zero, resets per run, stays zero under a never-rescheduling policy, and matches the reschedule count under an always-rescheduling policy.
jaredraycoleman
approved these changes
Jul 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Small updates to throughput experiment to include makespan and reschedule count
Type of change
Checklist
mainand up to date with it (no conflicts)uv run pytest tests/ --timeout=120passes locallyuv run mypy src/saga --ignore-missing-importsis cleanuv run ruff check src/sagaanduv run ruff format --check src/sagaare cleanpyproject.toml/uv.lockchanges, or version bumpNotes for reviewers