You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Z3如何实现Real类型变量为指定TICK值整数倍的约束?

Real类型量化为TICK整数倍的约束编写方案

Z3的模运算仅对整数、浮点数类型生效,未实现Real类型的模运算重载,因此你原来的写法无法正常工作。可以通过引入辅助整数变量的方式实现等价约束,无需预生成合法值集合,性能开销极低:

from z3 import *

TICK = RealVal("0.5") # 用有理数形式避免浮点精度损失
x = Real('x')
# 引入整数辅助变量,代表x是TICK的k倍
k = Int('k')

s = Solver()
# 核心约束:x等于整数k乘以TICK,等价于x是TICK的整数倍
s.add(x == k * TICK)
# 可追加其他业务约束,例如 s.add(x > 0, x < 20)

print(s.check())
print(s.model())

注意事项

  • 若TICK为非十进制有限小数,务必使用RealVal构造有理数形式的TICK值,不要直接传入Python的float类型,避免隐式精度损失
  • 该方案仅额外增加1个整数变量,求解效率不受x取值范围影响,即使x的合法取值范围极大也可以正常使用

内容的提问来源于stack exchange,提问作者Levan Gharibashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:06:06