pub struct ScalingPreview {
pub max_gradient: Number,
pub max_grad_f: Number,
pub obj_scale: Number,
pub c: RowScaleBlock,
pub d: RowScaleBlock,
pub quad_rows: Vec<QuadRowScale>,
pub n_quad_rows: usize,
pub n_quad_unscaled: usize,
pub n_quad_zero_jac: usize,
pub max_quad_mismatch: Number,
}Expand description
What nlp_scaling_method=gradient-based will do to this model at this
x0 — the solver’s own arithmetic
(gradient_obj_scale / gradient_row_scale), not a copy of it.
§Why a preflight reports this
Gradient-based scaling is a point sample: it reads ∇f and the
Jacobian once, at x0, and never looks again. That is a good estimator
of a row’s magnitude when the row’s derivative at x0 is representative
of its derivative elsewhere, and no estimator at all when it is not.
The extreme case is a row whose Jacobian vanishes at x0 — a
½xᵀQx ≤ b written about the origin, started from x = 0. The sample
reads zero, the row is left at factor 1.0, and however badly Q and b
disagree in magnitude the scaler has no way to know it. That is how
AMPL emits qcqp1000-2c — every variable free, no initial guess, and
k rows of pure ½xᵀQᵢx ≤ bᵢ.
So the two halves of this report are complementary: the block below
says what the sample decided, and Self::quad_rows says what the
sample could not see. See dev-notes/quadratic-structure-exploitation.md
§8 (gh #703).
Fields§
§max_gradient: NumberThe nlp_scaling_max_gradient cutoff this preview assumed.
max_grad_f: Number‖∇f(x0)‖_∞.
obj_scale: NumberThe objective factor df the scaler will pick.
c: RowScaleBlockEquality rows (g_l == g_u).
d: RowScaleBlockEverything else — the inequality and range rows.
quad_rows: Vec<QuadRowScale>Rows recognized as quadratic, worst mismatch first. .nl models
only; empty for a builtin or a model with no quadratic row.
n_quad_rows: usizeTotal quadratic rows found (quad_rows is capped at --max-list).
n_quad_unscaled: usizeOf those, how many the sample leaves at factor 1.0.
n_quad_zero_jac: usizeOf those, how many have an identically-zero Jacobian row at x0.
max_quad_mismatch: NumberLargest rhs / curvature over the quadratic rows, or 0 when there
are none.
Trait Implementations§
Source§impl Clone for ScalingPreview
impl Clone for ScalingPreview
Source§fn clone(&self) -> ScalingPreview
fn clone(&self) -> ScalingPreview
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ScalingPreview
impl Debug for ScalingPreview
Source§impl Default for ScalingPreview
impl Default for ScalingPreview
Source§fn default() -> ScalingPreview
fn default() -> ScalingPreview
Auto Trait Implementations§
impl Freeze for ScalingPreview
impl RefUnwindSafe for ScalingPreview
impl Send for ScalingPreview
impl Sync for ScalingPreview
impl Unpin for ScalingPreview
impl UnsafeUnpin for ScalingPreview
impl UnwindSafe for ScalingPreview
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T, U> Imply<T> for U
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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> ⓘ
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> ⓘ
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