pub enum CoppObjective<'a> {
Time(f64),
ThermalEnergy(f64, &'a [f64]),
TotalVariationTorque(f64, &'a [f64]),
Linear(f64, &'a [f64], &'a [f64]),
}Expand description
Objective terms for COPP optimization.
Continuous formulation is shared by COPP2/COPP3; discrete form depends on how b and torque are sampled.
Torque notation:
- continuous: $\boldsymbol{\tau}(s)$.
- discrete:
tau[i][k]for jointiats[k]. - COPP2:
tau[i][k]is the right-limit value $\boldsymbol{\tau}(s_k^+)$, i.e. computed on interval $[s_k, s_{k+1}]$ from(a[k], a[k+1], b[k]). - COPP3:
tau[i][k]is node value $\boldsymbol{\tau}(s_k)$, computed from(a[k], b[k]).
Variants§
Time(f64)
Time objective.
- Continuous: $J_{\mathrm{time}} = w_t\int_{0}^{t_f} 1 \mathrm{d}t = w_t\int_{s_0}^{s_f} \frac{1}{\sqrt{a(s)}} \mathrm{d}s$.
- Discrete (COPP2):
J_time = 2*w_t*sum_{k=0}^{n-2} (s[k+1]-s[k])/(sqrt(a[k])+sqrt(a[k+1])). - Discrete (COPP3):
J_time = w_t*sum_k weight_a_time[k]/sqrt(a[k])
ThermalEnergy(f64, &'a [f64])
Thermal-energy objective.
- Continuous: $J_{\mathrm{th}} = w_e\int_{0}^{t_f} \sum_i(\tau_i(s)\nu_i)^2\mathrm{d}t = w_e\int_{s_0}^{s_f} \sum_i(\tau_i(s)\nu_i)^2\frac{1}{\sqrt{a(s)}}\mathrm{d}s$ where
nu_i = normalize[i]. - Discrete (COPP2):
J_th = 2*w_e*sum_{k=0}^{n-2} (s[k+1]-s[k])/(sqrt(a[k])+sqrt(a[k+1])) * sum_i (tau[i][k]*normalize[i])^2. - Discrete (COPP3):
J_th = w_e*sum_k weight_a_torque[k] * sum_i (tau[i][k]*normalize[i])^2.
TotalVariationTorque(f64, &'a [f64])
Total-variation of torque objective.
- Continuous: $J_{\mathrm{tv}} = w_v\sum_i \int_{0}^{t_f} \left|\frac{d\tau_i}{\mathrm{d}s}(s)\right|\nu_i\mathrm{d}t = w_v\sum_i \int_{s_0}^{s_f} \left|\frac{d\tau_i}{\mathrm{d}s}(s)\right|\nu_i\mathrm{d}s$.
- Discrete:
J_tv = w_v*sum_i sum_k |tau[i][k+1]-tau[i][k]|*normalize[i]
Linear(f64, &'a [f64], &'a [f64])
Linear objective over a and b.
- Continuous: $J_{\mathrm{lin}} = w_l\int_{s_0}^{s_f}(\alpha(s)a(s)+\beta(s)b(s))\mathrm{d}s$.
- Discrete (COPP2):
alpha.len()==n,beta.len()==n-1J_lin = w_l*( sum_{k=0}^{n-1} alpha[k]*a[k] + sum_{k=0}^{n-2} beta[k]*b[k] )
- Discrete (COPP3):
alpha.len()==beta.len()==nJ_lin = w_l*sum_{k=0}^{n-1} (alpha[k]*a[k] + beta[k]*b[k])
Auto Trait Implementations§
impl<'a> Freeze for CoppObjective<'a>
impl<'a> RefUnwindSafe for CoppObjective<'a>
impl<'a> Send for CoppObjective<'a>
impl<'a> Sync for CoppObjective<'a>
impl<'a> Unpin for CoppObjective<'a>
impl<'a> UnwindSafe for CoppObjective<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§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>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
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
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.