from ortools.sat.python import cp_model model = cp_model.CpModel() # relations = model.NewIntVar(0, 99999, 'relations') # 初始化 a=model.NewIntVar(0, 99999, 'a') b=model.NewIntVar(0, 99999, 'b') # 初始化自变量 x = model.NewIntVar(0, 100, 'x') y = model.NewIntVar(0, 200, 'y') z = model.NewIntVar(0, 300, 'z') l=[x,y,z] gap_lst=[] # 初始化平均值变量 avg=model.NewIntVar(0, 99999, 'avg') # 初始化加和变量 sum_l=model.NewIntVar(0, 99999, 'sum_l') # 对x,y,z求和,赋值给sum_l model.Add(sum_l==sum(l)) # 对x,y,z求平均,赋值给avg model.AddDivisionEquality(avg,sum_l,len(l)) error_lst=[] for i in range(len(l)-1): # 计算每个自变量对平均的差值 error=model.NewIntVar(0, 99999, 'error_%s'%i) t = model.NewIntVar(0, 99999, 't_%s' % i) model.Add(t==l[i]-avg) #对差值取绝对值并赋值给error model.AddAbsEquality(error,t) error_lst.append(error) print(gap_lst) #最小化error之和 model.Minimize(sum(error_lst)) solver = cp_model.CpSolver() status = solver.Solve(model) print(solver.StatusName(status)) print('x=',solver.Value(x)) print('y=',solver.Value(y)) print('z=',solver.Value(z)) print('b=',solver.Value(b)) print('a=',solver.Value(a))