in pkg/trimaran/loadvariationriskbalancing/analysis.go [48:78]
func (rs *resourceStats) computeScore(margin float64, sensitivity float64) float64 {
if rs.capacity <= 0 {
klog.Errorf("invalid resource capacity %f!", rs.capacity)
return 0
}
// make sure values are within bounds
rs.req = math.Max(rs.req, 0)
rs.usedAvg = math.Max(math.Min(rs.usedAvg, rs.capacity), 0)
rs.usedStdev = math.Max(math.Min(rs.usedStdev, rs.capacity), 0)
// calculate average factor
mu := (rs.usedAvg + rs.req) / rs.capacity
mu = math.Max(math.Min(mu, 1), 0)
// calculate deviation factor
sigma := rs.usedStdev / rs.capacity
sigma = math.Max(math.Min(sigma, 1), 0)
// apply root power
if sensitivity >= 0 {
sigma = math.Pow(sigma, 1/sensitivity)
}
// apply multiplier
sigma *= margin
sigma = math.Max(math.Min(sigma, 1), 0)
// evaluate overall risk factor
risk := (mu + sigma) / 2
klog.V(6).Infof("mu=%f; sigma=%f; margin=%f; sensitivity=%f; risk=%f", mu, sigma, margin, sensitivity, risk)
return (1. - risk) * float64(framework.MaxNodeScore)
}