我正在尝试为函数最小化提供约束,迄今为止我一直使用通过 scipy ( scipy.optimize.fmin_l_bfgs_b()
) 可用的无约束算法成功执行该函数。
阅读(例如,参见Python constrained non-linear optimization),我发现了一个最小化打包调用mystic
,这似乎是我需要的。我的情况如下。我有一个3N
变量函数(表示N
节点的 xyz 位置坐标),我想提供一个约束列表,以便z/x = const.
为每个节点提供。这造成了总的N
约束。我如何最有效地定义/提供这些约束mystic()
?是否也可以使用相同的约束对象scipy.optimize.slsqp()
?由于我的约束是线性的,因此这也应该是一个可行的选择。
我尝试了以下方法,但它使我的计算机崩溃了:
import mystic.symbolic as ms
ieqns = ''
for p in range(N):
ieqns += 'x'+str(p+2) +'/x'+str(p) +" <= 2"
cf = ms.generate_constraint(ms.generate_solvers(ms.simplify(ieqns)))
pf = ms.generate_penalty(ms.generate_conditions(ieqns), k=1e12)