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)
我该如何替换 ??? 来强制这些变量为给定范围内的整数?
正如评论中所指出的,不直接支持“整数约束”。
但是,您可以最小化修改后的目标函数,例如:
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)
两者都是使用差分进化来解决离散优化问题的常用技术,并且效果很好。
| 归档时间: |
|
| 查看次数: |
5692 次 |
| 最近记录: |