ailearn
ailearn copied to clipboard
优化函数的参数个数
请问目标函数的参数支持输入数组吗,我有x_1到x_100共100个参数,应该怎么简洁定义目标函数?
可以的。比如Sphere
class Sphere:
def __init__(self):
self.min = -100
self.max = 100
def func(self, *x):
x = np.array(x)
result = np.sum(np.square(x))
return -result
其中*x可以输入任意个参数。 寻优的时候可以用:
from ailearn.Evaluation import Sphere
from ailearn.Swarm import PSO
func=Sphere()
p = PSO(func=func.func, param_len=100, x_min=func.min, x_max=func.max)
x = p.solve()
print(x)
输出为: [-23.31299978 14.31205962 18.83073263 -52.34569722 76.33663913 -7.45384004 -22.39242168 -14.08662827 29.2208244 58.07917282 30.68668063 13.67663009 -57.83097653 69.81539589 12.91717323 -38.31868793 -58.23780743 39.25466874 2.89564218 -32.49507554 18.1226366 -36.53527301 28.38007083 61.6801436 -53.32745691 22.18551314 -70.75390077 11.44672075 9.64782545 -33.85509137 -17.69892066 -31.20362606 11.20565329 -44.98477617 -10.22284945 40.85998809 -5.03009517 71.87915824 -18.22645591 48.63490013 -65.8525499 27.07688377 20.0520889 -26.99113087 24.67209724 -42.55226983 16.07914378 60.42663382 -68.33108274 49.23914105 -31.39217874 -14.6416154 51.32200812 -15.28453506 14.95489601 -46.99502407 -8.17849328 -51.51420586 -22.79973992 -29.6016994 17.70150058 -59.06646085 26.26142846 -59.14824565 -24.9499329 -22.19814093 -30.60929187 -58.47268225 -6.92347159 -9.73823673 58.51229436 -15.99939462 -14.81937203 -43.95817409 9.19864364 -14.80404062 40.65797105 -23.37488173 -70.63918208 62.43703616 -74.47491476 -58.71244651 18.91382446 -16.80086968 9.50725663 64.21894695 62.4645148 -33.86029286 -45.72031278 -36.4625238 41.45982165 -65.80604835 33.50746001 -64.10185451 -35.39700176 -60.53182362 38.09318377 70.05586415 7.26808273 29.06627938]
谢谢! @axi345
还有一个问题,这个能不能加约束条件呀
在ailearn库中实现的函数定义是不能加约束条件的。但是可以自己编写定义约束条件,如x1在[0,100]之间,编程实现时可以在函数中写
if x1<0:
x1=0
elif x1>100:
x1=100
在ailearn库中实现的函数定义是不能加约束条件的。但是可以自己编写定义约束条件,如x1在[0,100]之间,编程实现时可以在函数中写
if x1<0: x1=0 elif x1>100: x1=100
好的,谢谢!