pub trait EllipticControlProblem<const N: usize>: ControlProblem<N> {
// Required methods
fn dimension_kind(&self, dim: usize) -> DimensionKind;
fn transport(
&self,
state: &[f64; N],
control: &Self::Control,
derivs: &StateDerivatives<N>,
) -> Transport<N>;
// Provided method
fn boundary_conditions(&self) -> BoundaryConditions<N> { ... }
}Expand description
A stationary (infinite-horizon) stochastic optimal control problem.
The stationary HJB equation is
0 = sup_u { f(x,u) + L^u V - r V }where f is the running reward, L^u V is the controlled generator, and
r is the discount rate. After optimizing over u, the equation is
assembled in the same -T V + r V = source form as EllipticProblem,
with T V + source = sup_u { f + L^u V }.
This trait extends crate::models::control::ControlProblem with the
discretization data needed by the stationary finite-difference solver. The
transport method has the same semantics as
crate::numeric::finite_difference::pde::PdeProblem::transport:
plus and minus define T, and source is the residual that makes
T V + source equal the optimized driver.
Required Methods§
Sourcefn dimension_kind(&self, dim: usize) -> DimensionKind
fn dimension_kind(&self, dim: usize) -> DimensionKind
Discretization kind for dim.
Sourcefn transport(
&self,
state: &[f64; N],
control: &Self::Control,
derivs: &StateDerivatives<N>,
) -> Transport<N>
fn transport( &self, state: &[f64; N], control: &Self::Control, derivs: &StateDerivatives<N>, ) -> Transport<N>
Transport coefficients and residual source for the given control and derivatives.
The returned source is used as the right-hand side of the stationary
operator. It must satisfy T V + source = f + L^u V at the current
derivative bundle, where T V is the discrete transport operator
built from plus and minus.
Provided Methods§
Sourcefn boundary_conditions(&self) -> BoundaryConditions<N>
fn boundary_conditions(&self) -> BoundaryConditions<N>
Boundary conditions for each dimension.
Defaults to zero Neumann (natural boundary) on every side.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".