ailearn icon indicating copy to clipboard operation
ailearn copied to clipboard

优化函数的参数个数

Open xingyuezhiji opened this issue 6 years ago • 5 comments

请问目标函数的参数支持输入数组吗,我有x_1到x_100共100个参数,应该怎么简洁定义目标函数?

xingyuezhiji avatar Nov 23 '18 10:11 xingyuezhiji

可以的。比如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 avatar Nov 24 '18 05:11 axi345

谢谢! @axi345

xingyuezhiji avatar Nov 24 '18 08:11 xingyuezhiji

还有一个问题,这个能不能加约束条件呀

xingyuezhiji avatar Nov 24 '18 08:11 xingyuezhiji

在ailearn库中实现的函数定义是不能加约束条件的。但是可以自己编写定义约束条件,如x1在[0,100]之间,编程实现时可以在函数中写

if x1<0:
    x1=0
elif x1>100:
    x1=100

axi345 avatar Nov 25 '18 07:11 axi345

在ailearn库中实现的函数定义是不能加约束条件的。但是可以自己编写定义约束条件,如x1在[0,100]之间,编程实现时可以在函数中写

if x1<0:
    x1=0
elif x1>100:
    x1=100

好的,谢谢!

xingyuezhiji avatar Nov 25 '18 08:11 xingyuezhiji