我正在使用 SciPy Differential_evolution 来解决优化问题。我有一个 Web 应用程序,我想显示其进度。提供优化过程中间反馈的好技术是什么? SciPy 支持yield 关键字吗?
不,SciPy 中的
differential_evolution
函数不直接支持 yield
关键字在优化过程中提供中间反馈。
但是,您可以实现自定义回调函数,在每次迭代时打印或记录优化进度。您可以使用此回调函数向您的 Web 应用程序提供反馈。以下是如何做到这一点的示例:
import numpy as np
from scipy.optimize import rosen, differential_evolution
# Define the objective function
def objective_function(x):
return rosen(x)
# Define a custom callback function to print out the progress
def callback(xk, convergence):
print(f"Iteration {callback.iteration}: Best solution: {xk}, Best value: {rosen(xk)}, Convergence: {convergence}")
callback.iteration += 1
callback.iteration = 0 # Initialize the iteration counter
# Define the bounds for the variables
bounds = [(-5, 5)] * 2
# Perform differential evolution optimization with the custom callback
result = differential_evolution(objective_function, bounds, callback=callback, disp=True)
# Print the final result
print("\nFinal result:")
print(f"Best solution: {result.x}, Best value: {result.fun}, Convergence: {result.success}")
在此示例中,在优化过程的每次迭代时都会调用
callback
函数。它打印出迭代次数、当前最佳解、最佳解处的目标函数值以及收敛状态。您可以修改此函数来记录进度或根据需要将其发送到您的网络应用程序。