scipy.optimize.differential_evolution 的整数解约束?

Integer solution constraint for scipy.optimize.differential_evolution?

我正在尝试在我的程序中使用 scipy.optimize.differential_evolution 优化器。但是我需要的解决方案只有整数...

现在的解决方案(scipy.optimize.OptimizeResult 的 属性 x)总是看起来像这样:

[3.56932195, 1.69611735, 8.67970522, 9.69922539, 6.43961603, 3.3292928 , 2.32741226]

但我需要解中的所有元素都是整数,例如:

[6, 6, 4, 7, 2, 5, 3]

有什么办法可以强制执行吗?或者有什么 other/better 适合我的软件包吗?

您需要使用混合整数规划求解器。

除非您的约束矩阵是幺模的,否则如果没有 MIP 求解器,您将无法确保整数解。

通过说所有的解决方案都必须是整数,您是在说您的问题是非凸的。但是你反而试图解决一个凸问题。

如果您的 constraints/equations 是线性的,您可能需要检查 GLPK 和 CBC 等工具。如果您的约束是非线性的,则需要研究非线性整数规划求解器。

在 scipy 版本 1.9 differential_evolution 中将获得一个 integrality 关键字,该关键字将完全按照您的要求执行,无需修改。同时,您可以简单地将所有参数值四舍五入为整数,例如np.round,在你的 objective 函数中。这种方法在有和没有约束的情况下都有效。