fix(problems): default Δt bounds window + three-mode free-time guidance - #145
fix(problems): default Δt bounds window + three-mode free-time guidance#145aarontrowbridge wants to merge 2 commits into
Conversation
Unbounded per-knot free time is ill-posed — the optimizer spends the timestep freedom on the discretization error itself (measured: duration runaway and fidelity collapse on drift-dominated problems). When :Δt carries no bounds, apply a default window of a quarter to four times the nominal step instead of only clamping at zero; explicit bounds still win. The injected-bounds warning text now states the three free-time modes (uniform mesh with free duration / bounded per-knot / pinned) and no longer mislabels the all-equal option as fixing timesteps — it leaves one free scale degree of freedom by design. Evidence and semantics survey: harmoniqs/Piccolo.jl#317
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'DirectTrajOpt.jl benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 9fe75cd | Previous: 110708d | Ratio |
|---|---|---|---|
scaling_N101_d16_ipopt [wall] |
52.392247318 s |
7.520233163 s |
6.97 |
scaling_N101_d16_ipopt [alloc] |
214081178896 bytes |
31020145144 bytes |
6.90 |
scaling_N101_d16_ipopt [iters] |
50 iterations |
6 iterations |
8.33 |
scaling_N25_d8_ipopt [wall] |
0.035958695 s |
0.007596808 s |
4.73 |
scaling_N25_d8_ipopt [alloc] |
165824528 bytes |
22601216 bytes |
7.34 |
scaling_N51_d16_ipopt [wall] |
7.255641397 s |
1.104382817 s |
6.57 |
scaling_N51_d16_ipopt [alloc] |
28280315880 bytes |
4518562000 bytes |
6.26 |
scaling_N51_d16_ipopt [iters] |
12 iterations |
1 iterations |
12 |
This comment was automatically generated by workflow using github-action-benchmark.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
⚠️ Performance Alert ⚠️
Possible performance regression was detected for benchmark 'DirectTrajOpt.jl convergence'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.
| Benchmark suite | Current: 9fe75cd | Previous: 082c146 | Ratio |
|---|---|---|---|
xgate_convergence_ipopt_N51 [wall] |
20.195453639 s |
16.579704121 s |
1.22 |
xgate_convergence_madnlp_N51 [wall] |
19.447817476 s |
15.358710286 s |
1.27 |
This comment was automatically generated by workflow using github-action-benchmark.
|
Review notes (for @jeonghun-jj-lee) The behavioral core is small: Three things that make review faster:
|
Closes the DirectTrajOpt half of harmoniqs/Piccolo.jl#317 (free-time semantics).
What
Δtnow receives a default window of [nominal/4, nominal×4] instead of only a zero lower bound — unbounded free time with no duration anchor is ill-posed (measured: duration runaway to ~^5\times$ nominal, fidelity collapse on a drift-dominated 1-qubit benchmark).Follow-on (research track, not here): derived timesteps — remove
Δtfrom the decision vector entirely; the same benchmark stalls at F=0.65 under pinned-but-variable timesteps where a derived-timestep prototype solves to ^{-12}$.Re-vet flag: produced templates using unbounded free time will see bounded durations; per #317.