ortools近似实现标准差作为目标函数

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值