Quintiq file version 2.0
|
#parent: #root
|
Method UpdateStatistics (
|
MathematicalProgram program,
|
Boolean isautoscalingenabled
|
)
|
{
|
Description: 'Writes attributes related to numerical statistics. This should be done after optimizer run finished for current level.'
|
TextBody:
|
[*
|
statistics := program.Statistics();
|
|
//result side
|
this.Kappa( statistics.Kappa() );
|
this.Remark( program.Remark() );
|
this.PrimalInfeasibility( statistics.MaxPrimalInfeasibility() );
|
this.DualInfeasibility( statistics.MaxDualInfeasibility() );
|
this.PrimalResidual( statistics.MaxPrimalResidual() );
|
this.DualResidual( statistics.MaxDualResidual() );
|
|
//definition side
|
this.MinCoefficient( statistics.MinimumConstraintNonZero() );
|
this.MaxCoefficient( statistics.MaximumConstraintNonZero() );
|
this.MinGoalCoefficient( statistics.MinimumObjectiveNonZero() );
|
this.MaxGoalCoefficient( statistics.MaximumObjectiveNonZero() );
|
this.MinRHS( statistics.MinimumRHSNonZero() );
|
this.MaxCoefficientRatio( statistics.MaximumCoefficientRatio() );
|
|
if( this.MinRHS().IsInfinite() ) //prevent MaxReal from appearing
|
{
|
this.MinRHS( 0.0 );
|
}
|
this.MaxRHS( statistics.MaximumRHSNonZero() );
|
|
// To improve the performance, the min/max variable value statistics are only updated in autoscaling runs
|
if( isautoscalingenabled )
|
{
|
sets := selectvalues( program, Variables, var, var.Enabled() and guard( var.OptimalValue() <> 0, false ), abs ( var.OptimalValue() ) );
|
sets := sets.Sort();
|
if( sets.Size() > 0 )
|
{
|
this.MinVariableValue( sets.Element( 0 ) );
|
this.MaxVariableValue( sets.Element( sets.Size() - 1 ) );
|
}
|
}
|
*]
|
}
|