跳转至
1.3.0

当前接口与迁移

1.3 版将求解入口统一为混合、启发式和 OptX 精确求解三类。模型方法与模块函数使用相同参数。旧入口及参数别名已移除,需同步调整调用、配置和结果判断。

调整调用方式

原调用 当前调用
solve(worker_threads=4) solve(threads=4);基础配置直接展开
solve_ga(config=GaConfig(...)) solve_heuristic(...);时间、线程等参数直接传入,遗传参数移入 ga=GaOptions(...)
solve_optx(config=OptxConfig(...)) solve_optx(config=HighsConfig(...))
solve_cpx(config=CpxConfig(...)) solve_optx(config=CpSatConfig(...))
solve_cpsat(config=CpSatConfig(...)) solve_optx(config=CpSatConfig(...));改用内置 CP-SAT,并检查配置参数
solve_mathopt(config=MathOptConfig(...)) 按模型支持范围改用 solve_optx() 的 HiGHS 或 CP-SAT 后端,并重新配置

迁移运行参数

原参数 当前参数
solve(worker_threads=...) solve(threads=...)
旧配置中的 time_limit,或 CP-SAT 的 max_time_in_seconds time_limit_s
HiGHS 的 mip_rel_gap / mip_abs_gap relative_gap_limit / absolute_gap_limit
CP-SAT 的 num_search_workers / num_workers threads
HiGHS 的 output_flag / log_to_console,或 CP-SAT 的 log_search_progress log_level="off"、"on" 或 "debug"

例如,原先 OptxConfig(time_limit=10, mip_rel_gap=0.01) 改为 HighsConfig(time_limit_s=10, relative_gap_limit=0.01)。旧参数不能作为原生选项继续透传。

独立 GA 的通用参数和遗传参数按下面的方式分开设置:

from optagent import GaOptions

solution = model.solve_heuristic(
    time_limit_s=10.0,
    threads=4,
    ga=GaOptions(population_size=64),
)

选择精确后端

from optagent import CpSatConfig, HighsConfig, solve_optx

solution = solve_optx(model)  # 默认 HiGHS,30 秒
solution = solve_optx(model, config=HighsConfig(time_limit_s=30.0, threads=4))
solution = model.solve_optx(config=CpSatConfig(time_limit_s=30.0, threads=4))

config 接收一个 HighsConfig 或 CpSatConfig 对象,由类型选择后端。 time_limit_s 以秒为单位,覆盖序列化、转换、求解、核验和交付;线程数统一使用 threads。 原生调优参数直接作为对应配置类的命名参数传入,例如 HighsConfig(presolve="on")。 HiGHS 和 OR-Tools CP-SAT 均已内置,无须为这些入口安装 Python highspy 或 ortools。 集成的 OR-Tools 能力是 CP-SAT,原 MathOpt 的其他求解器选项不能直接迁入。 各后端的支持范围见求解路径与限制。

读取结果与处理异常

三个入口均返回 Solution,先检查 solution.feasible 再读取 .value。 solver_name 分别为 hybrid、heuristic 和 optx;精确求解的实际后端由 diagnostics["backend"] 标明,值为 highs 或 cp_sat。 原先按 search、ga、highs 或 cpx 判断一次性求解入口的代码,也需按此调整。 精确转换不支持模型时统一抛出 OptxUnsupportedError,可读取 .issues 及其中的 backend 查看原因。 未知结果不证明模型无解;修改模型后需要重新求解才能读取当前值。 完整说明见结果与诊断及求解与配置。

从当前示例开始 →