跳转至
1.3.0

选择求解路径

三类求解入口共用 OptModel,求解能力均随 OptAgent 提供。通常先用 solve();需要指定求解方式时,再选择启发式或 OptX 精确求解。显式入口不自动互相回退。

路径对照

路径 适用场景 配置 不兼容时
混合求解 solve() 通用优化模型,自动协调适用的启发式与精确求解能力 time_limit_s、threads 等命名参数 返回停止状态或抛出对应异常
启发式求解 solve_heuristic() 希望独立使用遗传算法,且符合所选搜索方案要求的模型 通用参数直接传入,遗传参数使用 ga=GaOptions(...) HeuristicUnsupportedError,附带原因
OptX solve_optx() HiGHS 或 CP-SAT 各自支持的模型 HighsConfig 或 CpSatConfig OptxUnsupportedError,附带问题位置

OptX 可选择内置 HiGHS 或 OR-Tools CP-SAT,无须另装 Python ortools 或 highspy。 两个精确后端均不要求提供初始可行解。CP-SAT 面向整数兼容模型,不会自动将不支持的连续变量离散化。 包含外部 Python 函数的模型可使用混合或启发式求解,需设置 deterministic=False。

准备模型

完整声明业务中的变量、约束与目标即可,无须选择特定问题模板。初始值可以帮助搜索,但不能替代约束。

求解后先检查 solution.feasible,再读取变量值。限时搜索可能尚未找到可行解,feasible=False 不能单独证明模型无解。

配置时间预算

solution = model.solve(time_limit_s=10.0, log_level="off")

默认 30 秒,包含序列化与原生编译。可选日志为 off、on(默认)、debug。

solution = model.solve_heuristic(time_limit_s=10.0, threads=4)

默认 30 秒,包含模型准备、搜索、结果校验和返回。该入口只使用遗传算法。 专用参数见 启发式求解参数。

from optagent import HighsConfig

solution = model.solve_optx(config=HighsConfig(time_limit_s=10.0))

默认 30 秒,覆盖序列化、模型转换、求解及结果验证和交付。

from optagent import CpSatConfig

solution = model.solve_optx(config=CpSatConfig(time_limit_s=10.0, threads=4))

默认 30 秒,包含模型准备、求解、结果校验和返回。预算耗尽且没有已验证的可行解时,返回 unknown,不可读取变量值。

时间预算用于请求停止,正在执行的操作与结果清理可能使调用稍晚返回。各入口的完整参数见求解与配置。

目标阈值和外部评价次数

三个入口均支持 objective_threshold,用从零开始的目标索引映射到数值阈值,例如 {0: 100}。阈值必须有限,索引必须存在;精确求解的整数阈值还须落在 [-2^53, 2^53] 内。

混合和启发式求解均支持 external_evaluation_limit,用正整数限制实际启动的外部回调次数,失败调用也计入;已知结果和复用不额外消耗次数。默认 None 表示不设置次数上限,时间预算仍然有效。

查询完整求解参数 →

HiGHS 后端的转换边界

HiGHS 适合线性和混合整数线性模型。部分集合、序列、逻辑、索引、分段线性及有界离散非线性表达式也可转换求解;是否支持取决于具体组合、取值范围和模型规模。

二次目标支持连续凸二次最小化或凹二次最大化,约束须为线性,未固定变量须为连续变量。多目标中,二次目标必须放在最后,之前的目标须为线性。混合整数二次规划、非凸二次规划、一般连续非线性约束和外部回调不在支持范围内。

多目标按声明顺序求解,只有前级确认最优且未启用正间隙停止条件时才继续。达到目标阈值、时间或间隙限制,不代表全部目标已经最优。逐接口条件见求解器支持矩阵。