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

Z3Py中已求值模型下如何直接获取ArithRef表达式的数值?

Z3Py中获取已求解模型里ArithRef表达式的数值结果

完全可以直接获取ArithRef类型表达式的求值结果,不需要手动重新计算。当优化模型求解完成后,只需通过求解得到的Model对象调用eval()方法,传入目标表达式即可得到该表达式在当前模型下的具体取值,甚至可以进一步转换为Python原生数值类型。

举个具体的代码示例:

from z3 import *

# 定义变量与表达式
x = Real('x')
y = If(x > 5, 0, 0.5 * x)

# 创建优化器并设置求解规则
opt = Optimize()
opt.add(x <= 8)  # 添加约束:x不超过8
opt.maximize(x)   # 设置目标:最大化x

# 执行求解
if opt.check() == sat:
    model = opt.model()
    # 获取x的取值
    x_result = model.eval(x)
    # 直接获取y的求值结果
    y_result = model.eval(y)
    
    print(f"x的取值:{x_result}")
    print(f"y的求值结果:{y_result}")
    # 转换为Python原生float类型
    print(f"y的float值:{float(y_result)}")

运行这段代码后,因为x被约束为≤8且最大化,所以x的取值是8,此时y会触发x>5的分支,结果为0,Z3会自动完成这个逻辑判断与计算,无需手动代入x的值重新推导y的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:18:19