Quintiq file version 2.0
|
#parent: #root
|
Method AdjustWorkLoad (
|
LibOpt_Task task,
|
Real timeA,
|
Real timeB,
|
Real timeC
|
)
|
{
|
TextBody:
|
[*
|
timeA := timeA + 1; // avoid division by 0
|
timeB := timeB + 1;
|
timeC := timeC + 1;
|
|
s := timeA + timeB + timeC;
|
|
fracA := timeA / s;
|
fracB := timeB / s;
|
fracC := timeC / s;
|
|
// task.Log( 'FracA,B,C=' + [String] fracA + ', ' + [String] fracB + ', ' + [String] fracC );
|
|
sizeA := this.ThreadAParameter();
|
sizeB := this.ThreadBParameter() - this.ThreadAParameter();
|
sizeC := 1000 - this.ThreadBParameter();
|
N := sizeA + sizeB + sizeC;
|
|
factorA := fracA * 3;
|
factorB := fracB * 3;
|
factorC := fracC * 3;
|
|
// task.Log( 'FactorsA,B,C=' + [String] factorA + ', ' + [String] factorB + ', ' + [String] factorC );
|
|
newsizeA := sizeA / factorA;
|
newsizeB := sizeB / factorB;
|
newsizeC := sizeC / factorC;
|
total := maxvalue( 1.0, newsizeA + newsizeB + newsizeC );
|
|
// task.Log( 'NewsizeA,B,C=' + [String] newsizeA + ', ' + [String] newsizeB + ', ' + [String] newsizeC );
|
|
newAratio := newsizeA / total;
|
newBratio := newsizeB / total;
|
// newCratio := newsizeC / total;
|
|
// task.Log( 'NewratioA,B,C=' + [String] newAratio + ', ' + [String] newBratio + ', ' + [String] newCratio );
|
|
|
newAparam := ceil( N * newAratio );
|
newBparam := newAparam + ceil( N * newBratio );
|
|
// task.Log( 'new A ' + [String] newAparam );
|
// task.Log( 'new B ' + [String] newBparam );
|
|
newAparam := maxvalue( newAparam, 0 );
|
newBparam := maxvalue( newBparam, 0 );
|
newAparam := minvalue( newAparam, 999 );
|
newBparam := minvalue( newBparam, 999 );
|
|
if ( newAparam > newBparam )
|
{
|
newAparam := newBparam;
|
}
|
|
this.ThreadAParameter( newAparam );
|
this.ThreadBParameter( newBparam );
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|