yanweiyuan3
2023-10-27 d1d15b61dfcf7fd0f800b32359f082cf580ed556
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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() );  
      } 
    }
  *]
}