SGD, чтобы максимизировать расстояния - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь решить задачу оптимизации, состоящую в том, чтобы найти самую дальнюю точку из списка точек.Скажем, в пределах допустимого региона найдите оптимальный x, чтобы расстояние D(x, c1) + D(x, c2) + ... D(x, cn) было максимальным.Мне подсказали решить ее стохастическим градиентным спуском, поэтому я выполнил функцию расстояния, как показано ниже:

def distance(loc_x, loc_c):
  """
  arg:
    loc_x: 1x2 array: decision variable
    loc_c: 662x2 array: locations x needs to be away as much as possible
  """
  return np.sum(np.power(np.sum(np.power(loc_x - loc_c, 2), axis=1), 1/2))

Но я не знаю, как действовать программно.Математически я знаю, что хочу вычислить производную для расстояния и получить x_opt, когда derivative = 0

1 Ответ

0 голосов
/ 19 сентября 2019

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

def df(x):
    # derivative function of your distance function
    return 
max_iters = 100
for _i in range(max_iters):
    current_x = next_x
    next_x = current_x - gamma * df(current_x)
    step = next_x - current_x
print(current_x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...