繁体   English   中英

如何将参数传递给 scipy.optimize 中的非线性约束?

[英]How to pass arguments to non-linear constraints in scipy.optimize?

我正在尝试使用 scipy 优化来解决优化问题。 我在代码中定义了非线性约束和适应度函数,如下所示。 我能够将参数传递给适应度函数,但不能传递给非线性约束。 有没有干净的方法来做到这一点? 传递给适应度函数的参数和非线性约束是相同的。

def func_nlc1(x, a1, a2):
    .
    .
   return val

def func_nlc1(x, a1, a2):
    .
    .
   return val

def fitness_function(x, args):
    .
    .
   return val



if __name__ == '__main__':

   nlc1 = NonlinearConstraint(func_nlc1, -0.01, 0.01))
   nlc2 = NonlinearConstraint(func_nlc1, -0.01, 0.01))

   bounds = Bounds([0.0, 0.0], [1.0, 1.0])

   result = differential_evolution(self.fitness_function, args=(a1,a2), bounds=bounds, strategy='rand1bin', constraints=(nlc1, nlc2))

您可以使用 lambda 函数:

a1, a2 = 1, 2 # example values
nlc1 = NonlinearConstraint(lambda x: func_nlc1(x, a1, a2), -0.01, 0.01))
nlc2 = NonlinearConstraint(lambda x: func_nlc1(x, a1, a2), -0.01, 0.01))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM