| Quintiq file version 2.0 | 
| #parent: #root | 
| Method FreezeVariableUpperBound ( | 
|   MPVariable var, | 
|   Real upperbound, | 
|   Boolean isfreezewithslack | 
| ) const | 
| { | 
|   Description: 'Set upper bound of the variable, with scaling factor influence' | 
|   TextBody: | 
|   [* | 
|     // soh yee Mar-15-2015 (created) | 
|      | 
|     upperbound := this.ScaleVariable( var, upperbound );   // scale the upper bound | 
|      | 
|     // (12110) Haikal Pribadi | 
|     // Freeze small values (1e-6) to zero, but give a warning for us to eventually debug when we can reproduce | 
|     cplexaccuracy := this.SmallestFeasibilityTolerance();  | 
|     if( abs( upperbound ) <= cplexaccuracy ) | 
|     { | 
|       if( 0.0 < abs( upperbound ) ) | 
|       { | 
|         info( "WARNING: Variable '", var.Name(), "' has encountered an upper bound value <= ", cplexaccuracy,", rounding to 0.0" ); | 
|       } | 
|       upperbound := 0.0; | 
|     } | 
|      | 
|     // If this is optimizer output, we have to add a small epsilon to prevent infeasibilities | 
|     if( isfreezewithslack ) | 
|     { | 
|       upperbound := upperbound + 1e-4; | 
|     } | 
|      | 
|     var.UpperBound( upperbound ); | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |