非线性约束函数的SciPy优化算法

px9o7tmv  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(63)

我正在寻找一个合适的SciPy(或另一个Python库)算法来找到一个具有非常坚韧非线性约束的光滑函数(实际上是预算的总和)的全局最小值。
我已经尝试过全局优化算法,比如shgo和basinhopping,使用局部优化器,比如'trust-bands','COBYLA'或'SLSQP',但总是失败。所有排除结果都是不适当的高值或非常接近我的x 0。例如,几十种预防措施之一:

def cons_J(x, *args):
        return np.ones(len(x))
    minimizer_kwargs = {'method': 'SLSQP',
                        'args': (reach, freq, DF_GROUP, MEMBER, days),
                        'constraints': cons_sqlsqp,
                        'tol': 0.01,
                        'options': {'maxiter': 15, 'disp':True},
                        'jac': cons_J}
    result = basinhopping(minimize_me_reach, x0=x0,
                  minimizer_kwargs=minimizer_kwargs,
                  niter=150, T=1500, stepsize=10000,
                  interval=40, disp=True,
                  niter_success=80, seed=350
                    )

也许超参数看起来太奇怪了,但我已经尝试了不同的设置,默认情况下也是如此。
现在有一个非线性约束,它定义为

cons_sqlsqp = ({'type': 'eq', 'fun': constr_reach})

但之后会有3个额外的限制。
那么,有什么合适的算法吗?

bnl4lu3b

bnl4lu3b1#

您可以尝试genetic algorithms,这是解决困扰现代优化工具箱的问题的传统选择。这将提供一个近似的解决方案 * 最终**,但可能需要非常,非常长的时间。只要确保启用精英选择,因为在这种情况下有收敛的证明。
这可能在严格意义上回答了这个问题。然而,在这种情况下,通常最好是重新制定的优化问题,可能通过选择不同的建模方法。

相关问题