向mysti提供一个不等式/约束向量

2024-10-02 18:14:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一个函数最小化提供约束,到目前为止,我通过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)

Tags: 函数算法节点scipygeneratemsoptimizenon
1条回答
网友
1楼 · 发布于 2024-10-02 18:14:17

我是mystic的作者。我相信你想做的事情是这样的:

>>> import mystic.symbolic as ms
>>> ieqns = ''
>>> for p in range(10):
...   ieqns += 'x{0} <= 2*x{1}\n'.format(p+2,p)
... 
>>> cf = ms.generate_constraint(ms.generate_solvers(ieqns))
>>>
>>> # test that it applies the constraints
>>> cf([1.,3.,5.,7.,9.,11.,13.,15.,17.,19.,21.,23.,25.])
[1.0, 3.0, 2.0, 6.0, 4.0, 11.0, 8.0, 15.0, 16.0, 19.0, 21.0, 23.0, 25.0]

然后我们可以在应用约束的同时最小化(但是,在以下情况下,约束基本上是无关的):

^{pr2}$

相关问题 更多 >