在多目标,多变量优化问题中,如何减少对黑盒方法的访问量?

时间:2019-07-06 06:10:42

标签: python optimization genetic-algorithm platypus-optimizer

我有一个带有多个输入和several objectives的黑匣子功能。我正在寻找一个可以帮助我优化输入参数的框架。

执行该功能大约需要两秒钟。因此,总体运行时间不应过多。

我开始看platypus-opt

我创建了一个小脚本来检查通过库对我的黑匣子函数的访问量(为简单起见,仅使用一个目标即可)。关于我的输入参数,似乎访问太多。并且只有在完成大量访问后,才会交付预期结果(00)。

如何减少对函数的访问量?

或者还有其他更适合我的问题的框架吗?

from platypus import Problem, Integer, NSGAII

accessCounter = 0

def my_function(x):
    global accessCounter
    accessCounter += 1
    return -x[0] ** 2 - x[1] ** 2

problem = Problem(2, 1)  # define 2 inputs and 1 objective (and no constraints)
problem.directions[:] = Problem.MAXIMIZE
int0 = Integer(-2, 2)
int1 = Integer(-2, 2)
problem.types[:] = [int0, int1]
problem.function = my_function
algorithm = NSGAII(problem)

myLengths = [10, 100, 1_000]

for myLength in myLengths:
    algorithm.run(myLength)
    uniqueResults0 = set([int0.decode(x.variables[0]) for x in algorithm.result])
    uniqueResults1 = set([int1.decode(x.variables[1]) for x in algorithm.result])
    print('-----------------')
    print("myLength:", myLength)
    print("accessCounter:", accessCounter)
    print("uniqueResults0:", uniqueResults0)
    print("uniqueResults1:", uniqueResults1)

结果:

-----------------
myLength: 10
accessCounter: 100
uniqueResults0: {0, 1, 2, -2, -1}
uniqueResults1: {0, 1, 2, -1, -2}
-----------------
myLength: 100
accessCounter: 273
uniqueResults0: {0, 1, -1}
uniqueResults1: {0, 1, -1}
-----------------
myLength: 1000
accessCounter: 1314
uniqueResults0: {0}
uniqueResults1: {0}

0 个答案:

没有答案