pub struct Optimizer<'a, E: ErrorCtrl, const V: usize, const O: usize> {
pub prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
pub objectives: [Objective; O],
pub objective_frame: Option<(Frame, Arc<Cosm>)>,
pub variables: [Variable; V],
pub correction_frame: Option<Frame>,
pub iterations: usize,
}
Expand description
An optimizer structure with V control variables and O objectives.
Fields§
§prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>
The propagator setup (kind, stages, etc.)
objectives: [Objective; O]
The list of objectives of this targeter
objective_frame: Option<(Frame, Arc<Cosm>)>
An optional frame (and Cosm) to compute the objectives in. Needed if the propagation frame is separate from objectives frame (e.g. for B Plane targeting).
variables: [Variable; V]
The kind of correction to apply to achieve the objectives
correction_frame: Option<Frame>
The frame in which the correction should be applied, must be either a local frame or inertial
iterations: usize
Maximum number of iterations
Implementations§
source§impl<'a, E: ErrorCtrl> Optimizer<'a, E, 3, 6>
impl<'a, E: ErrorCtrl> Optimizer<'a, E, 3, 6>
sourcepub fn convert_impulsive_mnvr(
spacecraft: Spacecraft,
dv: Vector3<f64>,
prop: &'a Propagator<'a, SpacecraftDynamics<'_>, E>
) -> Result<Mnvr, NyxError>
pub fn convert_impulsive_mnvr( spacecraft: Spacecraft, dv: Vector3<f64>, prop: &'a Propagator<'a, SpacecraftDynamics<'_>, E> ) -> Result<Mnvr, NyxError>
Create a new Targeter which will apply an impulsive delta-v correction.
The spacecraft
must be the spacecraft BEFORE the Δv is applied
source§impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 3, O>
impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 3, O>
sourcepub fn delta_v(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
objectives: [Objective; O]
) -> Self
pub fn delta_v( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply an impulsive delta-v correction.
sourcepub fn delta_r(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
objectives: [Objective; O]
) -> Self
pub fn delta_r( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, objectives: [Objective; O] ) -> Self
Create a new Targeter which will MOVE the position of the spacecraft at the correction epoch
sourcepub fn vnc(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
objectives: [Objective; O]
) -> Self
pub fn vnc( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply an impulsive delta-v correction on all components of the VNC frame. By default, max step is 0.5 km/s.
source§impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 4, O>
impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 4, O>
sourcepub fn thrust_dir(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
objectives: [Objective; O]
) -> Self
pub fn thrust_dir( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply a continuous thrust for the whole duration of the segment
source§impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 7, O>
impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 7, O>
sourcepub fn thrust_dir_rate(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
objectives: [Objective; O]
) -> Self
pub fn thrust_dir_rate( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply a continuous thrust for the whole duration of the segment
source§impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 10, O>
impl<'a, E: ErrorCtrl, const O: usize> Optimizer<'a, E, 10, O>
sourcepub fn thrust_profile(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
objectives: [Objective; O]
) -> Self
pub fn thrust_profile( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply a continuous thrust for the whole duration of the segment
source§impl<'a, E: ErrorCtrl, const V: usize, const O: usize> Optimizer<'a, E, V, O>
impl<'a, E: ErrorCtrl, const V: usize, const O: usize> Optimizer<'a, E, V, O>
sourcepub fn new(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
variables: [Variable; V],
objectives: [Objective; O]
) -> Self
pub fn new( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, variables: [Variable; V], objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply an impulsive delta-v correction.
sourcepub fn in_frame(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
variables: [Variable; V],
objectives: [Objective; O],
objective_frame: Frame,
cosm: Arc<Cosm>
) -> Self
pub fn in_frame( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, variables: [Variable; V], objectives: [Objective; O], objective_frame: Frame, cosm: Arc<Cosm> ) -> Self
Create a new Targeter which will apply an impulsive delta-v correction.
sourcepub fn vnc_with_components(
prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>,
variables: [Variable; V],
objectives: [Objective; O]
) -> Self
pub fn vnc_with_components( prop: &'a Propagator<'a, SpacecraftDynamics<'a>, E>, variables: [Variable; V], objectives: [Objective; O] ) -> Self
Create a new Targeter which will apply an impulsive delta-v correction on the specified components of the VNC frame.
sourcepub fn try_achieve_from(
&self,
initial_state: Spacecraft,
correction_epoch: Epoch,
achievement_epoch: Epoch
) -> Result<TargeterSolution<V, O>, NyxError>
pub fn try_achieve_from( &self, initial_state: Spacecraft, correction_epoch: Epoch, achievement_epoch: Epoch ) -> Result<TargeterSolution<V, O>, NyxError>
Runs the targeter using finite differencing (for now).
sourcepub fn apply(
&self,
solution: &TargeterSolution<V, O>
) -> Result<Spacecraft, NyxError>
pub fn apply( &self, solution: &TargeterSolution<V, O> ) -> Result<Spacecraft, NyxError>
Apply a correction and propagate to achievement epoch. Also checks that the objectives are indeed matched
sourcepub fn apply_with_traj(
&self,
solution: &TargeterSolution<V, O>
) -> Result<(Spacecraft, Traj<Spacecraft>), NyxError>
pub fn apply_with_traj( &self, solution: &TargeterSolution<V, O> ) -> Result<(Spacecraft, Traj<Spacecraft>), NyxError>
Apply a correction and propagate to achievement epoch, return the final state and trajectory. Also checks that the objectives are indeed matched.
source§impl<'a, E: ErrorCtrl, const V: usize, const O: usize> Optimizer<'a, E, V, O>
impl<'a, E: ErrorCtrl, const V: usize, const O: usize> Optimizer<'a, E, V, O>
sourcepub fn try_achieve_fd(
&self,
initial_state: Spacecraft,
correction_epoch: Epoch,
achievement_epoch: Epoch
) -> Result<TargeterSolution<V, O>, NyxError>
pub fn try_achieve_fd( &self, initial_state: Spacecraft, correction_epoch: Epoch, achievement_epoch: Epoch ) -> Result<TargeterSolution<V, O>, NyxError>
Differential correction using finite differencing
source§impl<'a, E: ErrorCtrl, const V: usize, const O: usize> Optimizer<'a, E, V, O>
impl<'a, E: ErrorCtrl, const V: usize, const O: usize> Optimizer<'a, E, V, O>
sourcepub fn try_achieve_dual(
&self,
initial_state: Spacecraft,
correction_epoch: Epoch,
achievement_epoch: Epoch
) -> Result<TargeterSolution<V, O>, NyxError>
pub fn try_achieve_dual( &self, initial_state: Spacecraft, correction_epoch: Epoch, achievement_epoch: Epoch ) -> Result<TargeterSolution<V, O>, NyxError>
Differential correction using hyperdual numbers for the objectives
Trait Implementations§
Auto Trait Implementations§
impl<'a, E, const V: usize, const O: usize> !RefUnwindSafe for Optimizer<'a, E, V, O>
impl<'a, E, const V: usize, const O: usize> Send for Optimizer<'a, E, V, O>
impl<'a, E, const V: usize, const O: usize> Sync for Optimizer<'a, E, V, O>
impl<'a, E, const V: usize, const O: usize> Unpin for Optimizer<'a, E, V, O>
impl<'a, E, const V: usize, const O: usize> !UnwindSafe for Optimizer<'a, E, V, O>
Blanket Implementations§
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Printing<T> for Twhere
T: Display,
impl<T> Printing<T> for Twhere T: Display,
§fn to_str(self) -> String
fn to_str(self) -> String
printing.rs
. §fn to_plainstr(self) -> String
fn to_plainstr(self) -> String
printing.rs
.§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.