我正在使用 pyswarm,我想知道是否有人知道如何更改设置以仅获取群粒子 (x1, x2) 的整数!
from pyswarm import pso
def banana(x):
x1 = x[0] # Get only integer number
x2 = x[1] # Get only integer number
return x1**4 - 2*x2*x1**2 + x2**2 + x1**2 - 2*x1 + 5
def con(x):
x1 = x[0]
x2 = x[1]
return [-(x1 + 0.25)**2 + 0.75*x2]
lb = [-3, -1]
ub = [2, 6]
xopt, fopt = pso(banana, lb, ub, f_ieqcons=con)
最佳答案
今天遇到同样的问题,稍微看了一下代码,发现根本没有处理这个行为。此外,自 2015 年以来存储库上没有任何事件......
此外,将初始实域空间映射到整数空间并不是一个好主意:两个整数之间的所有解都将使用相同的参数计算。
更改目标函数参数意味着您定义了一个为非整数参数返回的“错误”值(某种被优化问题惩罚的极值)。但是您可能会以这种方式面临局部最优。
所以最后您可能想要搜索其他实现 PSO 的库,或者甚至尝试在实际的 pyswarm 代码上实现以支持粒子的自定义域。
编辑: 这是一篇关于整数规划 PSO 的论文:http://www.cs.uoi.gr/~kostasp/papers/C03.pdf
关于python - 仅获取 pyswarm 粒子生成的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43090407/