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

使用Mystic简化200变量约束表达式耗时过长的解决办法

使用mystic处理多变量求和约束的性能优化

问题背景

需要用mystic工具生成约束条件,限制200个变量的和在0到20000之间(0 ≤ x0 + x1 + ... + x199 ≤ 20000),但原代码仅处理该约束就耗时约1小时,原代码如下:

import mystic as ms
import mystic.constraints as my

min_lim = 0
max_lim = 20000

def constraint_func():
    variable_num = ['x'+str(i) for i in range(200)]
    constrain_eq = f'{min_lim} <= ' + ' + '.join(variable_num) + f' <= {max_lim}'
    return constrain_eq

eqn = ms.simplify(constraint_func(), all=True)
constrain = ms.generate_constraint(ms.generate_solvers(eqn), join=my.constraints.and_)

性能瓶颈原因

原代码通过字符串拼接生成超长的符号表达式,再调用ms.simplify进行符号解析与简化。对于200个变量的表达式,符号引擎需要处理大量语法解析、变量绑定和逻辑化简操作,产生极高的计算开销,导致耗时剧增。

优化方案

直接通过数值约束函数定义规则,跳过符号表达式的解析与简化流程。mystic支持直接传入接收变量数组的数值函数,无需走符号处理路径,性能会得到数量级的提升:

import mystic as ms
import mystic.constraints as my

min_lim = 0
max_lim = 20000

# 直接定义数值约束函数:输入变量数组,返回求和是否在指定范围内
def sum_constraint(x):
    total = sum(x)
    return min_lim <= total <= max_lim

# 直接生成约束,无需符号处理步骤
constrain = ms.generate_constraint(sum_constraint)

优化说明

  1. 避免了符号表达式的生成、解析与简化过程,直接用Python原生的sum计算变量和,时间复杂度为O(n),200个变量的计算几乎瞬间完成。
  2. ms.generate_constraint可以直接接收返回布尔值的约束函数,无需通过generate_solvers转换符号表达式,大幅减少不必要的计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:12