Как я могу уменьшить количество обращений к моему методу черного ящика в многоцелевой задаче оптимизации с несколькими переменными? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть функция черного ящика с несколькими входами и несколькими задачами .Я ищу структуру, которая помогает мне оптимизировать входные параметры.

Выполнение функции займет примерно две секунды.Поэтому общее время выполнения не должно быть слишком большим.

Я начал смотреть на platypus-opt .

Я создал небольшой скрипт для проверки количества обращенийк моей функции черного ящика через библиотеку (для простоты, только с одной целью).Что касается моих входных параметров, то, похоже, слишком много обращений.И только когда много обращений сделано, ожидаемый результат (0, 0) доставляется.

Как я могу уменьшить количество обращений к моей функции?

Или есть какие-то другие рамки, более подходящие для моей проблемы?

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}
...