Scipy 整数差分进化

arr*_*ana 7 python mathematical-optimization scipy differential-evolution

我正在尝试使用 scipy.optimize. Differential_evolution 运行优化。该代码要求 x 中每个变量的边界。但我想要一个解决方案,其中 x 的一部分必须是整数,而其他部分可以作为浮点数自由变化。我的代码的相关部分看起来像

    bounds = [(0,3),(0,3),(0,3),???,???]
    result = differential_evolution(func, bounds)
Run Code Online (Sandbox Code Playgroud)

我该如何替换 ??? 来强制这些变量为给定范围内的整数?

man*_*lio 3

正如评论中所指出的,不直接支持“整数约束”。

但是,您可以最小化修改后的目标函数,例如:

def func1(x):
    return func(x) + K * (x[3] - round(x[3]))**2
Run Code Online (Sandbox Code Playgroud)

这将迫使x[3]一个整数值(不幸的是你必须调整K参数)。

另一种方法是在评估目标函数之前对(部分)实值参数进行舍入:

def func1(x):
    z = x;
    z[3] = round(z[3])
    return func(z)
Run Code Online (Sandbox Code Playgroud)

两者都是使用差分进化来解决离散优化问题的常用技术,并且效果很好。