@@ -21,7 +21,7 @@ $TYPEDEF
2121# Fields
2222$TYPEDFIELDS
2323"""
24- struct StochasticBackwardResource
24+ struct StochasticBackwardResource{is_convex}
2525 " piecewise linear function for each scenario, take as input propagated delay and outputs total delay of partail path"
2626 g:: Vector{PiecewiseLinearFunction{Float64}}
2727end
@@ -70,9 +70,19 @@ function Base.:<=(r1::StochasticForwardResource, r2::StochasticForwardResource)
7070 return true
7171end
7272
73- function Base. min(r1:: StochasticBackwardResource , r2:: StochasticBackwardResource )
73+ function Base. min(
74+ r1:: StochasticBackwardResource{true} , r2:: StochasticBackwardResource{true}
75+ )
76+ new_g = convex_meet.(r1. g, r2. g)
77+ # new_g = remove_redundant_breakpoints.(convex_meet.(r1.g, r2.g); atol=1e-8)
78+ return StochasticBackwardResource{true }(new_g)
79+ end
80+
81+ function Base. min(
82+ r1:: StochasticBackwardResource{false} , r2:: StochasticBackwardResource{false}
83+ )
7484 new_g = min.(r1. g, r2. g)
75- return StochasticBackwardResource(new_g)
85+ return StochasticBackwardResource{ false } (new_g)
7686end
7787
7888function (f:: StochasticForwardFunction )(q:: StochasticForwardResource )
@@ -90,8 +100,10 @@ function _backward_scenario(g::PiecewiseLinearFunction, delay::Float64, slack::F
90100 return f + g ∘ f - λᵥ
91101end
92102
93- function (f:: StochasticBackwardFunction )(q:: StochasticBackwardResource )
94- return StochasticBackwardResource([
103+ function (f:: StochasticBackwardFunction )(
104+ q:: StochasticBackwardResource{is_convex}
105+ ) where {is_convex}
106+ return StochasticBackwardResource{is_convex}([
95107 _backward_scenario(g, delay, slack, f. λ_value) for
96108 (g, delay, slack) in zip(q. g, f. intrinsic_delays, f. slacks)
97109 ])
@@ -116,6 +128,7 @@ function create_instance(
116128 origin_vertex:: T = one(T),
117129 destination_vertex:: T = nv(graph),
118130 bounding= true ,
131+ use_convex_resources= true ,
119132) where {T}
120133 @assert λ_values[origin_vertex] == 0.0 && λ_values[destination_vertex] == 0.0
121134 @assert all(intrinsic_delays[origin_vertex] .== 0.0 )
@@ -139,7 +152,7 @@ function create_instance(
139152 StochasticBackwardFunction(slacks[u, v], intrinsic_delays[v, :], λ_values[v])
140153 for (u, v) in zip(I, J)
141154 ]
142- destination_backward_resource = StochasticBackwardResource([
155+ destination_backward_resource = StochasticBackwardResource{use_convex_resources} ([
143156 piecewise_linear() for _ in 1 : nb_scenarios
144157 ])
145158
@@ -189,6 +202,7 @@ function stochastic_routing_shortest_path(
189202 origin_vertex:: T = one(T),
190203 destination_vertex:: T = nv(graph),
191204 bounding= true ,
205+ use_convex_resources= true ,
192206) where {T}
193207 instance = create_instance(
194208 graph,
@@ -198,6 +212,7 @@ function stochastic_routing_shortest_path(
198212 origin_vertex= origin_vertex,
199213 destination_vertex= destination_vertex,
200214 bounding= bounding,
215+ use_convex_resources= use_convex_resources,
201216 )
202217 return generalized_constrained_shortest_path(instance)
203218end
@@ -215,6 +230,7 @@ function stochastic_routing_shortest_path_with_threshold(
215230 origin_vertex:: T = one(T),
216231 destination_vertex:: T = nv(graph),
217232 bounding= true ,
233+ use_convex_resources= true ,
218234 threshold,
219235) where {T}
220236 instance = create_instance(
@@ -225,6 +241,7 @@ function stochastic_routing_shortest_path_with_threshold(
225241 bounding= bounding,
226242 origin_vertex= origin_vertex,
227243 destination_vertex= destination_vertex,
244+ use_convex_resources= use_convex_resources,
228245 )
229246 return generalized_constrained_shortest_path_with_threshold(instance, threshold)
230247end
0 commit comments