func()

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)
}