Scipy 差分进化 - 提取无效总体能量的百分比(通过回调?)

问题描述 投票:0回答:1

我目前正在研究一个优化问题,并希望在优化的每个迭代步骤期间从包中提取无效总体能量的分数的信息。

目前我正在使用回调来获得最佳解决方案和收敛:

    def __call__(self, xk: NDArray[float64], convergence: float) -> bool:

是否可以通过回调获取人口能量?

我正在 python 3.11.2 中使用 scipy 1.12.0。

我已经改变了依赖关系(scipy微分进化)来打印分数,但这不是我想长期保留的解决方案)。

python optimization scipy statistics differential-evolution
1个回答
0
投票

由于 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)
© www.soinside.com 2019 - 2024. All rights reserved.