【发布时间】:2020-08-16 02:42:24
【问题描述】:
运动:
找出集合 Z 中加起来为 4285 的最小元素数。
在哪里Z = { w(i): w(n) - n^2 - n + 1, i = 1,2,...,30 }
我创建了一个解决方案:
def f(t):
return t ** 2 - t + 1
opt = z3.Optimize()
x = IntVector('x', 30)
x_val = [And(x[i] >= 0, x[i] <= 1) for i in range(30)]
opt.add(x_val)
m = [x[i] * f(i + 1) for i in range(30)]
m_sum = z3.Sum(m)
opt.add(m_sum == 4285)
opt.minimize(z3.Sum(x))
if z3.sat == opt.check():
model = opt.model()
print(model)
但它运行得太慢了。仅适用于小数字。我该如何改进它?
【问题讨论】: