Skip to content

Commit 668ecf9

Browse files
authored
Merge pull request #57 from JuliaDecisionFocusedLearning/aliases
Create aliases for exogenous/endogenous stochastic/dynamic benchmarks
2 parents a04313a + 68e5cdb commit 668ecf9

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

src/DecisionFocusedLearningBenchmarks.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ using .Utils
6363

6464
# Interface
6565
export AbstractBenchmark, AbstractStochasticBenchmark, AbstractDynamicBenchmark, DataSample
66+
export ExogenousStochasticBenchmark,
67+
EndogenousStochasticBenchmark, ExogenousDynamicBenchmark, EndogenousDynamicBenchmark
6668
export AbstractEnvironment, get_seed, is_terminated, observe, reset!, step!
6769

6870
export Policy, evaluate_policy!

src/Utils/Utils.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export TopKMaximizer
2727
export AbstractEnvironment, get_seed, is_terminated, observe, reset!, step!
2828

2929
export AbstractBenchmark, AbstractStochasticBenchmark, AbstractDynamicBenchmark
30+
export ExogenousStochasticBenchmark,
31+
EndogenousStochasticBenchmark, ExogenousDynamicBenchmark, EndogenousDynamicBenchmark
3032
export generate_instance, generate_sample, generate_dataset
3133
export generate_statistical_model, generate_maximizer
3234
export generate_scenario

src/Utils/interface.jl

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ context known before the scenario is revealed) and a **random scenario** (the un
215215
part). Decisions are taken by seeing only the instance. Scenarios are used to generate
216216
anticipative targets and compute objective values.
217217
218-
# Required methods (exogenous benchmarks, `{true}` only)
218+
# Required methods ([`ExogenousStochasticBenchmark`](@ref) only)
219219
- [`generate_instance`](@ref)`(bench, rng)`: returns a [`DataSample`](@ref) with instance
220220
and features but **no scenario**. Scenarios are added later by [`generate_dataset`](@ref)
221221
via [`generate_scenario`](@ref).
@@ -230,7 +230,7 @@ anticipative targets and compute objective values.
230230
`argmin_{y ∈ Y} c(y, scenario) + θᵀy`.
231231
232232
# Dataset generation (exogenous only)
233-
[`generate_dataset`](@ref) is specialised for `AbstractStochasticBenchmark{true}` and
233+
[`generate_dataset`](@ref) is specialised for [`ExogenousStochasticBenchmark`](@ref) and
234234
supports all three standard structures via `nb_scenarios`:
235235
236236
| Setting | Call |
@@ -251,8 +251,14 @@ abstract type AbstractStochasticBenchmark{exogenous} <: AbstractBenchmark end
251251
is_exogenous(::AbstractStochasticBenchmark{exogenous}) where {exogenous} = exogenous
252252
is_endogenous(::AbstractStochasticBenchmark{exogenous}) where {exogenous} = !exogenous
253253

254+
"Alias for [`AbstractStochasticBenchmark`](@ref)`{true}`. Uncertainty is independent of decisions."
255+
const ExogenousStochasticBenchmark = AbstractStochasticBenchmark{true}
256+
257+
"Alias for [`AbstractStochasticBenchmark`](@ref)`{false}`. Uncertainty depends on decisions."
258+
const EndogenousStochasticBenchmark = AbstractStochasticBenchmark{false}
259+
254260
"""
255-
generate_scenario(::AbstractStochasticBenchmark{true}, rng::AbstractRNG; kwargs...) -> scenario
261+
generate_scenario(::ExogenousStochasticBenchmark, rng::AbstractRNG; kwargs...) -> scenario
256262
257263
Draw a random scenario. Instance and context fields are passed as keyword arguments,
258264
spread from `sample.context`:
@@ -275,7 +281,7 @@ Return a callable that computes the anticipative solution.
275281
function generate_anticipative_solver end
276282

277283
"""
278-
generate_parametric_anticipative_solver(::AbstractStochasticBenchmark{true}) -> callable
284+
generate_parametric_anticipative_solver(::ExogenousStochasticBenchmark) -> callable
279285
280286
**Optional.** Return a callable `(θ, scenario; kwargs...) -> y` that solves the
281287
parametric anticipative subproblem:
@@ -299,7 +305,7 @@ Calls [`generate_instance`](@ref), draws `nb_scenarios` scenarios via
299305
(K samples, one per scenario) or SAA (1 sample aggregating all K scenarios).
300306
"""
301307
function generate_sample(
302-
bench::AbstractStochasticBenchmark{true},
308+
bench::ExogenousStochasticBenchmark,
303309
rng;
304310
target_policy=nothing,
305311
nb_scenarios::Int=1,
@@ -337,7 +343,7 @@ scenario draws. The scenario→sample mapping is controlled by the `target_polic
337343
- `kwargs...`: forwarded to [`generate_sample`](@ref).
338344
"""
339345
function generate_dataset(
340-
bench::AbstractStochasticBenchmark{true},
346+
bench::ExogenousStochasticBenchmark,
341347
nb_instances::Int;
342348
target_policy=nothing,
343349
nb_scenarios::Int=1,
@@ -379,6 +385,12 @@ meaning (whether uncertainty is independent of decisions).
379385
"""
380386
abstract type AbstractDynamicBenchmark{exogenous} <: AbstractStochasticBenchmark{exogenous} end
381387

388+
"Alias for [`AbstractDynamicBenchmark`](@ref)`{true}`. Uncertainty is independent of decisions."
389+
const ExogenousDynamicBenchmark = AbstractDynamicBenchmark{true}
390+
391+
"Alias for [`AbstractDynamicBenchmark`](@ref)`{false}`. Uncertainty depends on decisions."
392+
const EndogenousDynamicBenchmark = AbstractDynamicBenchmark{false}
393+
382394
"""
383395
generate_environment(::AbstractDynamicBenchmark, rng::AbstractRNG; kwargs...)
384396
@@ -424,7 +436,7 @@ to obtain standard baseline callables (e.g. the anticipative solver).
424436
- `rng`: random number generator.
425437
"""
426438
function generate_dataset(
427-
bench::AbstractDynamicBenchmark{true},
439+
bench::ExogenousDynamicBenchmark,
428440
environments::AbstractVector;
429441
target_policy,
430442
seed=nothing,
@@ -450,7 +462,7 @@ via [`generate_environments`](@ref), then calls
450462
`target_policy` is a **required** keyword argument.
451463
"""
452464
function generate_dataset(
453-
bench::AbstractDynamicBenchmark{true}, n::Int; target_policy, seed=nothing, kwargs...
465+
bench::ExogenousDynamicBenchmark, n::Int; target_policy, seed=nothing, kwargs...
454466
)
455467
environments = generate_environments(bench, n; seed)
456468
return generate_dataset(bench, environments; target_policy, seed, kwargs...)

0 commit comments

Comments
 (0)