Существует ли адаптируемый алгоритм (или код) для оптимизации нескольких параметров в Python? - PullRequest
1 голос
/ 17 июня 2019

Я делаю инструмент оптимизации нескольких параметров для симулятора в Python.У меня 7 параметров и с изменением параметров 5 элементов результата меняются.(каждый параметр имеет свою границу.) Я не знаю, как симулятор.Итак, я думаю, что мне нужно инициировать случайное значение и выполнять алгоритм оптимизации до тех пор, пока не будут найдены значения параметров, которые приблизят 5 элементов к объективным значениям.Не могли бы вы посоветовать мне адаптивный алгоритм?Если вы дадите мне пример кода, мне было бы лучше понять.Заранее спасибо.

Я попробовал GA, но это занимает слишком много времени, и он не может найти адаптируемое значение.Я думаю, это потому, что граница слишком велика и много параметров для изменения.

1 Ответ

0 голосов
/ 17 июня 2019

В python есть много библиотек, посвященных численной оптимизации.Я бы порекомендовал scipy.optimize для более простых задач, таких как та, о которой вы говорите, и pyomo для более сложных задач оптимизации.

Тип задачи

Давайте посмотрим наscipy.optimize.Во-первых, вам нужно знать, является ли ваша проблема оптимизации выпуклой или невыпуклой . Выпуклый в основном означает, что существует только один локальный минимум, который мы хотим найти. Невыпуклые задачи могут иметь несколько локальных минимумов, в которых могут застрять алгоритмы оптимизации.

Выпуклые задачи

Для выпуклых задач мы можем простосм. scipy.optimize.minimize.Требуется функция f(x), которую мы хотим минимизировать, а также начальное значение x0 и (если доступно) границы переменных.

Простой пример:

from math import inf
import numpy as np
from scipy.optimize import minimize

def func(x):
    simulation_result = sim(x)  # use simulator here
    objective_vector = np.array([1,2,3,4,5])  # Replace this with your objective target vector
    return np.linalg.norm(simulation_result - objective_vector)

res = minimize(func, x0=np.ones(7,1),
               bounds=[(1,2),(10,20),(0,1),(0,1),(0,inf),(-inf,0)])

if res.success:
    print(res.x)

Невыпуклые задачи

Этот класс задач намного сложнее и требует гораздо более сложных алгоритмов.К счастью scipy.optimize также предоставляет алгоритмы для этого!Проверьте мой ответ здесь и документация .

...