如何在Mystic中使用线性符号不等式创建约束并解决SyntaxError报错
错误原因
你直接将手写的线性不等式约束字符串传递给generate_solvers时,该函数默认按等式约束解析,尝试生成变量替换的赋值代码,而不等式左侧是运算表达式(例如1.0*x0 + 1.0*x1),无法作为赋值目标,因此触发SyntaxError: cannot assign to operator语法错误。
解决方案
方案1:通过linear_symbolic生成标准约束字符串(推荐)
先将菱形约束转换为线性不等式标准形式G @ x ≤ h,再通过linear_symbolic生成Mystic可识别的标准约束字符串,修改对应代码即可:
# 替换原来的basic_constraint定义部分 G = np.array([ [1.0, 1.0], [-1.0, 1.0], [-1.0, -1.0], [1.0, -1.0] ]) h = np.array([5.0, 5.0, 5.0, 5.0]) basic_constraint = linear_symbolic(G=G, h=h, nvars=2)
其余代码保持不变即可正常运行。
方案2:使用线性约束专用接口
直接调用generate_linear_constraint接口,无需手动处理约束字符串,更不易出错:
# 引入对应接口 from mystic.symbolic import generate_linear_constraint # 定义标准线性约束参数 G = np.array([ [1.0, 1.0], [-1.0, 1.0], [-1.0, -1.0], [1.0, -1.0] ]) h = np.array([5.0, 5.0, 5.0, 5.0]) constraint = generate_linear_constraint(G=G, h=h) # 直接设置约束,不需要调用generate_solvers、generate_constraint solver.SetConstraints(constraint)
内容的提问来源于stack exchange,提问作者Max Candocia
相关产品推荐
相关产品推荐

