in sort/traffic_control_sort.go [929:1060]
func setHyperParams(controllers map[string]*PIDController, ctx *context.RecommendContext) bool {
params := ctx.ExperimentResult.GetExperimentParams()
on := params.GetInt("pid_control_enable", 1)
if on == 0 {
return false
}
offPrefix := params.GetString("pid_off_target_name_prefix", "")
if offPrefix != "" {
for _, controller := range controllers {
if strings.HasPrefix(controller.target.Name, offPrefix) {
controller.SetOnline(false)
ctx.LogDebug(fmt.Sprintf("module=TrafficControlSort\tset target turn off, targetName:%s", controller.target.Name))
}
}
}
onPrefix := params.GetString("pid_on_target_name_prefix", "")
if onPrefix != "" {
for _, controller := range controllers {
if strings.HasPrefix(controller.target.Name, onPrefix) {
controller.SetOnline(true)
ctx.LogDebug(fmt.Sprintf("module=TrafficControlSort\tset target turn on, targetName:%s", controller.target.Name))
}
}
}
planParams := params.Get("pid_plan_params", nil)
if planParams != nil {
if values, ok := planParams.(map[string]interface{}); ok {
for pid, args := range values {
if dict, good := args.(map[string]interface{}); good {
if _on, exist := dict["online"]; exist {
for _, c := range controllers {
if c.task.TrafficControlTaskId == pid {
c.SetOnline(_on.(bool))
}
}
}
}
}
}
}
hyperParams := params.Get("pid_params", nil)
if hyperParams == nil {
return true
}
if values, ok := hyperParams.(map[string]interface{}); ok {
hasDefaultValue := false
var defaultKp, defaultKi, defaultKd, defaultErrDiscount float64
var defaultStartPageNo = 0
if args, exist := values["default"]; exist {
if dict, good := args.(map[string]interface{}); good {
hasDefaultValue = true
if _kp, okay := dict["kp"]; okay {
defaultKp = _kp.(float64)
}
if _ki, okay := dict["ki"]; okay {
defaultKi = _ki.(float64)
}
if _kd, okay := dict["kd"]; okay {
defaultKd = _kd.(float64)
}
if _d, okay := dict["err_discount"]; okay {
defaultErrDiscount = _d.(float64)
}
if _s, okay := dict["start_page_num"]; okay {
defaultStartPageNo = int(_s.(float64))
}
}
}
if hasDefaultValue {
for _, c := range controllers {
if _, okay := values[c.target.TrafficControlTargetId]; !okay {
if defaultKp != 0 {
c.SetParameters(defaultKp, defaultKi, defaultKd)
}
c.SetStartPageNum(defaultStartPageNo)
c.SetErrDiscount(defaultErrDiscount)
}
}
}
for pid, args := range values {
if pid == "default" {
continue
}
if c, okay := controllers[pid]; okay {
dict, good := args.(map[string]interface{})
if !good {
if hasDefaultValue {
c.SetParameters(defaultKp, defaultKi, defaultKd)
}
continue
}
var kp, ki, kd float64
if _kp, exist := dict["kp"]; exist {
kp = _kp.(float64)
}
if _ki, exist := dict["ki"]; exist {
ki = _ki.(float64)
}
if _kd, exist := dict["kd"]; exist {
kd = _kd.(float64)
}
c.SetParameters(kp, ki, kd)
if threshold, exist := dict["integral_threshold"]; exist {
c.SetIntegralThreshold(threshold.(float64))
}
if threshold, exist := dict["err_threshold"]; exist {
c.SetErrorThreshold(threshold.(float64))
}
if discount, exist := dict["err_discount"]; exist {
c.SetErrDiscount(discount.(float64))
}
if _exp, exist := dict["allocate_exp_wise"]; exist {
c.SetAllocateExpWise(_exp.(bool))
}
if _s, exist := dict["start_page_num"]; exist {
startPageNo := int(_s.(float64))
c.SetStartPageNum(startPageNo)
}
if _s, exist := dict["min_exp_traffic"]; exist {
c.SetMinExpTraffic(_s.(float64))
}
if _on, exist := dict["online"]; exist {
c.SetOnline(_on.(bool))
}
}
}
}
return true
}