我目前正在研究一个优化问题,并希望在优化的每个迭代步骤期间从包中提取无效总体能量的分数的信息。
目前我正在使用回调来获得最佳解决方案和收敛:
def __call__(self, xk: NDArray[float64], convergence: float) -> bool:
是否可以通过回调获取人口能量?
我正在 python 3.11.2 中使用 scipy 1.12.0。
我已经改变了依赖关系(scipy微分进化)来打印分数,但这不是我想长期保留的解决方案)。
由于 os scipy 1.12.0 回调可以包含
intermediate_result: OptimizeResult
,这是一个 dict 结构,可以包含不同的参数,具体取决于返回的 scipy 优化。
scipys 文档中并不清楚
OptimizeResult
的内容。
对于 Differential_evolution,除了文档中指定的参数之外,还包含:
population
、population_energies
、constr
、constr_violation
和 convergence
。
我需要将回调中的
xk
和convergence
替换为intermediate_result: OptimizeResult
。然后可以从那里访问population_energies、x 和收敛性。
def __call__(self, intermediate_result: OptimizeResult) -> bool:
无效布居能量的比例可以通过以下方式计算:
sum(np.isinf(intermediate_result.population_energies))/len(intermediate_result.population_energies)