Scipy优化:最小化优化过程中违反约束

h6my8fg2  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(277)

我正在使用Scipy optimize.minimize with constraints and bounds(使用SLSQP方法)处理第三方软件优化问题。确切地说,我正在给一个非常复杂的函数(这里不能写)提供输入,该函数将启动我的软件,并返回一个我需要最小化的输出。

def func_to_minimize(param):
   launch_software(param)

   return software_output() # I retrieve the output after the software finish his computation

在处理它的过程中,我注意到在优化过程中,算法并不总是遵守约束条件。
然而,我试图优化的软件不能在特定的输入值下运行(物理定律不能被违反),我在代码中写了这些方程作为约束条件。例如,输出流量不能大于输入流量。
我想知道是否有可能在优化过程中遵守这些约束条件。

kx7yvsdv

kx7yvsdv1#

您可以尝试的一种方法是截取param,并在将其发送到launch_software之前检查其是否可行。如果不可行,则返回np.inf。我不确定这是否适用于SLSQP,但请给予一下。
一种可行的方法是使用optimize.differential_evolution,该函数在计算目标函数之前检查约束条件是否可行;如果不是,那么你的目标函数就不会被调用。然而,differential_evolution确实要求更多数量级的函数求值,所以如果你的目标函数很昂贵,那么这可能是一个问题。一个改进是矢量化或并行计算。

相关问题