z3中实值计算的几个问题

z3中实值计算的几个问题,z3,smt,Z3,Smt,我正在研究一个问题,在这个问题上,我想学习基于某些约束的真实参数。以下是代码片段: s = Solver() def logistic_function(x, y): out = y[0] for i in range(len(x)): out = out + x[i] * y[i + 1] return out self.W = RealVector('w', X.shape[1]+1) self.F = RealVector('f', X.shape[0])

我正在研究一个问题,在这个问题上,我想学习基于某些约束的真实参数。以下是代码片段:

s = Solver()
def logistic_function(x, y):
   out = y[0]
   for i in range(len(x)):
      out = out + x[i] * y[i + 1]
   return out

self.W = RealVector('w', X.shape[1]+1)
self.F = RealVector('f', X.shape[0])

for h in hard_instances:
  if y[h] == 1:
      self.model.add(Learner.logistic_function(list(X.iloc[h]), self.W) >= 0)         
  else:
      self.model.add(Learner.logistic_function(list(X.iloc[h]), self.W) < 0)         
  self.model.add(Learner.logistic_function(list(X.iloc[h]), self.W) == self.F[h])

s.check()
F变量的值:

['6.63397?', '48.31824?', '9.84546?', '-0.5', '0', '0', '-0.5', '-5.38594?', '-0.5', '0', '2.67479?', '-3.55787?', '-10.59216?', '-0.5', '-2.87871?', '-0.5', '-0.5', '-0.5', '21.51906?', '-0.84313?', '0', '-0.5', '-0.5', '-0.5', '-3.33203?', '0', '-0.5', '0', '-8980.16307?', '-0.5', '-7.06012?', '-248.88109?', '-6.90423?', '-0.5', '-12.90605?', '-3945.30152?', '-0.5', '0', '2.09643?', '0.57093?', '-0.5', '0', '-0.5', '-0.5', '-227.57308?', '0', '0', '490.58834?', '-0.5', '0', '-20.46458?', '-0.5', '-0.5', '-0.5', '0', '75.43883?', '-0.5', '-0.5', '3.39666?', '-0.5', '-0.5', '0', '0', '-91.32681?', '-1.13005?', '0', '-41.40830?', '-972.60267?', '0', '-0.5', '0', '0', '-0.5', '43.98384?', '570.67543?', '-0.5', '-41.06592?', '0', '8.24429?', '-3.43914?', '-377.45813?', '-21.85040?', '0', '-11.83317?', '-4.00421?', '-0.5', '0.53349?', '-691.19144?', '264.52677?', '68.84287?', '9.83243?', '3.52497?', '269.78794?', '-21.63869?', '40.52079?', '6.89110?', '-1451.54107?', '26.21240?', '0', '-1190.68525?']
在由F表示的z3中计算的值和我根据从z3得到的解计算的值之间似乎存在巨大的差异。这些值应该相同


此外,硬实例是来自完整数据集的随机样本。这种差异只发生在一些样品上。对于很多样本,我计算的值和我从z3得到的值是相同的。此外,如果我使用整数解算器学习整数参数而不是实际参数,也不会有任何差异

你是说z3给了你一个不正确的模型,还是说它与你用其他方法计算的不匹配?从你的帖子很难理解

请注意,z3将为您提供满足约束的解决方案。你确定它们是独一无二的吗?如果约束可以有多个解决方案,那么您可能会得到一个完全有效的模型,但不是您所期望的。例如,如果对系统约束不足,可能会发生这种情况

还要记住,z3之外的计算可能是使用浮点数完成的,可能会出现计算错误。Z3的实数是代数实数:也就是说,它们的算术是精确的。使用浮点,您可能会得到不同的结果。尽管除非问题中存在巨大的不稳定性,差异不应该那么大;特别是对于小数字

如果你是说z3的模型不满足约束条件,那么那当然是一个应该报告的bug。如果你怀疑是这样的话,那么请发布一个MCVE:共享代码很好,但是如果我们不能自己加载/运行它,它就没有多大帮助了

['6.63397?', '48.31824?', '9.84546?', '-0.5', '0', '0', '-0.5', '-5.38594?', '-0.5', '0', '2.67479?', '-3.55787?', '-10.59216?', '-0.5', '-2.87871?', '-0.5', '-0.5', '-0.5', '21.51906?', '-0.84313?', '0', '-0.5', '-0.5', '-0.5', '-3.33203?', '0', '-0.5', '0', '-8980.16307?', '-0.5', '-7.06012?', '-248.88109?', '-6.90423?', '-0.5', '-12.90605?', '-3945.30152?', '-0.5', '0', '2.09643?', '0.57093?', '-0.5', '0', '-0.5', '-0.5', '-227.57308?', '0', '0', '490.58834?', '-0.5', '0', '-20.46458?', '-0.5', '-0.5', '-0.5', '0', '75.43883?', '-0.5', '-0.5', '3.39666?', '-0.5', '-0.5', '0', '0', '-91.32681?', '-1.13005?', '0', '-41.40830?', '-972.60267?', '0', '-0.5', '0', '0', '-0.5', '43.98384?', '570.67543?', '-0.5', '-41.06592?', '0', '8.24429?', '-3.43914?', '-377.45813?', '-21.85040?', '0', '-11.83317?', '-4.00421?', '-0.5', '0.53349?', '-691.19144?', '264.52677?', '68.84287?', '9.83243?', '3.52497?', '269.78794?', '-21.63869?', '40.52079?', '6.89110?', '-1451.54107?', '26.21240?', '0', '-1190.68525?']