| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CheckVariables ( | 
|   SnapshotMacroPlannerOptimizer snapshot, | 
|   CapacityPlanningSuboptimizer_CapacityPlanningAlgorithm program | 
| ) | 
| { | 
|   TextBody: | 
|   [* | 
|     variableboundthreshold := 1e-4;  | 
|     intvarthreshold := 1e-5;  | 
|     traverse( program, Variables, var )  | 
|     { | 
|       lowerboundviolation := guard( maxvalue(  var.LowerBound() - var.OptimalValue(), 0.0 ), 0.0 ); | 
|       upperboundviolation := guard( maxvalue(  var.OptimalValue() - var.UpperBound(), 0.0 ), 0.0 );  | 
|       epsilon := ifexpr( var.VariableType() =  'Continuous', variableboundthreshold, intvarthreshold );  | 
|       if ( lowerboundviolation > epsilon | 
|            or upperboundviolation > epsilon )  | 
|       { | 
|         logentry := snapshot.OptimizerDebugCPLEXLogEntry( relnew, OptimizerDebugCPLEXLogEntryMPVariable );   | 
|         logentry.VariableName( var.Name() );  | 
|         logentry.LowerBoundViolation( lowerboundviolation );  | 
|         logentry.LowerBound( var.LowerBound() );  | 
|         logentry.UpperBoundViolation( upperboundviolation );  | 
|         logentry.UpperBound ( var.UpperBound() );  | 
|         logentry.OptimalValue( var.OptimalValue() ); | 
|         logentry.VariableTypeName( typeofexpression( var ).ShortName() );   | 
|       }  | 
|     } | 
|   *] | 
| } |