Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
880d2a3
Per-type service models and per-type construction
rodrigomha Jul 21, 2026
990dc98
Dense service-indexed reserve containers
rodrigomha Jul 21, 2026
4295367
Regression tests: per-type reserve slacks and mixed-service reserve i…
rodrigomha Jul 21, 2026
e066c15
Docs: per-type merged service containers; plan status
rodrigomha Jul 21, 2026
4b27dc4
Remove aggregated_service_model / NO_SERVICE_NAME_PROVIDED; fix per-t…
rodrigomha Jul 21, 2026
9b204f4
Add TODO: per-service keying for reserve feedforward VariableValuePar…
rodrigomha Jul 21, 2026
1780229
Regression test: RequirementConstraint dual assigned and readable per…
rodrigomha Jul 21, 2026
bef3aed
Add TODO markers on the deferred ORDC per-service meta cost path (ser…
rodrigomha Jul 21, 2026
6c17278
Reword stale 'grouped' comment references to per-type (no grouping re…
rodrigomha Jul 21, 2026
e4c7f9e
Plan: note single-service TimeSeriesParameter _add_parameters! retire…
rodrigomha Jul 21, 2026
b4adb4d
Avoid flattening contributing devices in the service model-skip guard
rodrigomha Jul 22, 2026
04630eb
Plan: track deferred type-stability follow-ups from PR #141 review
rodrigomha Jul 22, 2026
4b000e7
Avoid flattening contributing devices for the empty-service check
rodrigomha Jul 22, 2026
bbacec8
Stop tracking .claude/plans; keep them local only
rodrigomha Jul 22, 2026
c0345c0
Flag reviewer-only container-change comments for post-approval removal
rodrigomha Jul 22, 2026
dab95ec
Use lazy get! defaults in the contributing-devices map builder
rodrigomha Jul 22, 2026
d777aa3
revert variable export
rodrigomha Jul 22, 2026
c73b07f
Error when a modeled reserve has no available contributing devices
rodrigomha Jul 22, 2026
b44a7e5
Add TODO for extending the no-contributing-devices error to transmiss…
rodrigomha Jul 22, 2026
22ea2fb
Fix stale get_service_name in DCP interface add_to_expression after r…
rodrigomha Jul 23, 2026
b04bba4
Pin PowerSystems to psy6 (jd/converter-dc-current-base merged in)
rodrigomha Jul 23, 2026
b583718
Type-stability quick wins in reserve construction + defer TODOs
rodrigomha Jul 23, 2026
6d38e17
Test GroupReserve requirement constraint sums only contributing services
rodrigomha Jul 23, 2026
74d3264
Point InfrastructureOptimizationModels source at rh/dev_service_refactor
rodrigomha Jul 23, 2026
0dfd341
Merge branch 'main' into rh/dev_refactor_services
jd-lara Jul 30, 2026
da4461e
Use type-as-constructor get! defaults instead of anonymous closures
rodrigomha Jul 30, 2026
5992977
Phase A: merge TransmissionInterface slack + flow-limit-param containers
rodrigomha Jul 23, 2026
fb0e53a
Flag Phase A old-per-service-meta comments for post-approval removal
rodrigomha Jul 23, 2026
1ab5a30
Merge the no-contributing-devices/branches error into one, exempt Con…
rodrigomha Jul 23, 2026
8e1721b
Flag the merged interface-slack comment for post-approval removal
rodrigomha Jul 23, 2026
9b3b8e2
Phase B: fold ORDC ProductionCostExpression into a merged dense (serv…
rodrigomha Jul 23, 2026
7e3630a
Phase C1: merge ORDC slope/breakpoint PWL cost params into one contai…
rodrigomha Jul 26, 2026
62072db
Retire the now-dead single-service TimeSeriesParameter add_parameters!
rodrigomha Jul 26, 2026
5722a1b
Add mock fixture + tests for per-device ancillary-service reserve offers
rodrigomha Jul 26, 2026
ecd01ff
Phase C2: price per-device ancillary-service reserve offers
rodrigomha Jul 26, 2026
ddbe923
Phase C2 follow-ups: 4D reserve-offer container, magnitude test, disp…
rodrigomha Jul 26, 2026
364e397
update tests
rodrigomha Jul 30, 2026
2f81b37
add service bids tutorial
rodrigomha Jul 30, 2026
168ac23
docs: explain what set_service_bid! does in the service-bids tutorial
rodrigomha Jul 30, 2026
2267737
formatter
rodrigomha Jul 30, 2026
17aa5ec
update comments
rodrigomha Jul 30, 2026
25eb2ec
update comment
rodrigomha Jul 30, 2026
cbf5488
Drop stale empty-meta phrasing from add_expressions! comments
rodrigomha Jul 30, 2026
a032091
update add_parameters comments
rodrigomha Jul 30, 2026
159b454
update comments in add to expression
rodrigomha Jul 30, 2026
ba6afd4
update comments in market bid overrides
rodrigomha Jul 30, 2026
005c006
De-version problem_template comments (drop PSY6 / historical-bug refe…
rodrigomha Jul 30, 2026
81b4bd9
update comment for storage and hybrids
rodrigomha Jul 30, 2026
a2d19a9
Drop claude-plan reference from reserve_group efficiency TODO
rodrigomha Jul 30, 2026
e526e1c
Add GroupReserve test coverage (closes #151)
rodrigomha Jul 30, 2026
bc7208f
Index GroupReserve contributing variables once instead of scanning pe…
rodrigomha Jul 30, 2026
0ad6a78
Clean stale meta/plan references in reserves.jl comments
rodrigomha Jul 30, 2026
8fd2a08
Index reserve proportional cost by contributing device names, not a f…
rodrigomha Jul 30, 2026
1e4bd8a
update comments in slacks
rodrigomha Jul 30, 2026
fc753d9
Revert .gitignore: local Claude tooling entries were pushed by mistake
rodrigomha Jul 31, 2026
6bc7baf
Clean stale meta / DELETE-AFTER-REVIEW / psy6 references in services …
rodrigomha Jul 31, 2026
96a666d
Price per-resource AS offers in StepwiseCostReserve
rodrigomha Jul 31, 2026
f271de3
Pin IOM to rh/dev_service_refactor in root and docs sources
rodrigomha Aug 3, 2026
84537e0
Pin IOM to main: service refactor merged upstream (IOM #141)
rodrigomha Aug 3, 2026
5ea37d6
Match main test compat: Ipopt =1.4.0 and julia ^1.11
rodrigomha Aug 3, 2026
f55a151
Keep Ipopt compat at 1; drop unused SCS test dependency
rodrigomha Aug 3, 2026
3729849
Address review: narrow reserve-offer dispatch; refresh migrated-conta…
rodrigomha Aug 3, 2026
d6ffa2a
Document 3D/4D service containers in the container-axes reference
rodrigomha Aug 6, 2026
b8cf4cb
Describe service containers by structure, not by what changed
rodrigomha Aug 6, 2026
454542a
Trim comment verbosity across the service refactor
rodrigomha Aug 6, 2026
c24fe46
Drop ASDC, spell out reserve acronyms on first use
rodrigomha Aug 6, 2026
c88704e
Key group-reserve member lookup by time step instead of (service, time)
rodrigomha Aug 6, 2026
b0c5d86
Dedupe the service time series parameter axis and match model resolution
rodrigomha Aug 6, 2026
5e2e802
Dedupe the branch time series parameter axis and match model resolution
rodrigomha Aug 6, 2026
5168784
Merge branch 'main' into rh/dev_refactor_services
rodrigomha Aug 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ make_tutorials()

pages = OrderedDict(
"Welcome Page" => "index.md",
# "Tutorials" => Any["stub" => "tutorials/generated_stub.md"],
"Tutorials" => Any[
"Running a Problem with Service Bids" => "tutorials/generated_service_bids.md",
],
# "How to..." => Any["stub" => "how_to_guides/stub.md"],
# "Explanation" => Any["stub" => "explanation/stub.md"],
"Reference" => Any[
Expand Down
22 changes: 16 additions & 6 deletions docs/make_tutorials.jl
Original file line number Diff line number Diff line change
Expand Up @@ -441,19 +441,29 @@ function make_tutorials()

outputfile = string("generated_", replace("$file", ".jl" => ""))

# Generate markdown
# Generate markdown with the Documenter flavor (so `@ref`/`@extref` links and
# `!!! admonition` blocks render). Code-block execution follows the `execute`
# opt-in: tutorials marked `EXECUTE = TRUE` keep Documenter `@example` blocks
# (run at `makedocs` time, output captured); all others have their `@example`
# fences rewritten to plain `julia` blocks that Documenter does not execute - so
# a tutorial needing solvers or data the docs environment does not carry still
# builds, and the downloadable script/notebook remains fully runnable.
Literate.markdown(infile_path,
tutorial_outputdir;
name = outputfile,
credit = false,
flavor = Literate.DocumenterFlavor(),
documenter = true,
postprocess = (
content -> add_download_links(
insert_md(content),
file,
string(outputfile, ".ipynb"),
)
content -> begin
content = add_download_links(
insert_md(content),
file,
string(outputfile, ".ipynb"),
)
execute ? content :
replace(content, r"```@example[^\n]*" => "```julia")
end
),
execute = execute)

Expand Down
22 changes: 11 additions & 11 deletions docs/src/reference/formulation_library.md
Original file line number Diff line number Diff line change
Expand Up @@ -514,15 +514,15 @@ no-op.

## [Service Formulations](@id service_formulations)

| Formulation | Service type | Argument stage | Model stage |
|:---------------------------- |:--------------------------- |:---------------------------------------------------------------------------------------------- |:---------------------------------------------------------- |
| `RangeReserve` | `PSY.Reserve` | `RequirementTimeSeriesParameter` (omitted for `ConstantReserve`), `ActivePowerReserveVariable` | `RequirementConstraint`, `ParticipationFractionConstraint` |
| `RampReserve` | `PSY.Reserve` | as above | as above **+ `RampConstraint`** |
| `NonSpinningReserve` | `PSY.ReserveNonSpinning` | as above, but **no** device-range expression wiring | as above **+ `ReservePowerConstraint`** |
| `StepwiseCostReserve` (ORDC) | `PSY.Reserve` | `ServiceRequirementVariable` + ORDC slope/breakpoint parameters | `RequirementConstraint` only — no participation constraint |
| `GroupReserve` | `PSY.ConstantReserveGroup` | no variables | `RequirementConstraint` across contributing services |
| `ConstantMaxInterfaceFlow` | `PSY.TransmissionInterface` | optional slacks, `InterfaceTotalFlow` expression | `InterfaceFlowLimit` (`"ub"`/`"lb"`) |
| `VariableMaxInterfaceFlow` | `PSY.TransmissionInterface` | as above **+ min/max flow-limit parameters** | as above, with parameterized limits |
| Formulation | Service type | Argument stage | Model stage |
|:------------------------------------------------------ |:--------------------------- |:---------------------------------------------------------------------------------------------- |:---------------------------------------------------------- |
| `RangeReserve` | `PSY.Reserve` | `RequirementTimeSeriesParameter` (omitted for `ConstantReserve`), `ActivePowerReserveVariable` | `RequirementConstraint`, `ParticipationFractionConstraint` |
| `RampReserve` | `PSY.Reserve` | as above | as above **+ `RampConstraint`** |
| `NonSpinningReserve` | `PSY.ReserveNonSpinning` | as above, but **no** device-range expression wiring | as above **+ `ReservePowerConstraint`** |
| `StepwiseCostReserve` (operating reserve demand curve) | `PSY.Reserve` | `ServiceRequirementVariable` + demand-curve slope/breakpoint parameters | `RequirementConstraint` only — no participation constraint |
| `GroupReserve` | `PSY.ConstantReserveGroup` | no variables | `RequirementConstraint` across contributing services |
| `ConstantMaxInterfaceFlow` | `PSY.TransmissionInterface` | optional slacks, `InterfaceTotalFlow` expression | `InterfaceFlowLimit` (`"ub"`/`"lb"`) |
| `VariableMaxInterfaceFlow` | `PSY.TransmissionInterface` | as above **+ min/max flow-limit parameters** | as above, with parameterized limits |

`GroupReserve` is deliberately constructed **last** in both stages, because it aggregates the other
services' variables.
Expand Down Expand Up @@ -586,8 +586,8 @@ commitment.

Offer *direction* selects the delta family: generation is an `IncrementalOffer`; the charging side
of storage, the import side of a `Source`, and controllable loads are `DecrementalOffer` (negative
objective sign). ORDC reserve demand curves are also decremental, because a willingness-to-pay
curve is concave.
objective sign). Operating reserve demand curves are also decremental, because a
willingness-to-pay curve is concave.

## [When to use `meta` versus a new key type](@id meta_vs_key_type)

Expand Down
Loading
Loading