Начальное значение в алгоритмах оптимизации - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь использовать решатель L-BFGS в математическом пакете Accord.net на C #.Однако я не могу найти, как определить начальное значение оптимизации.Как мы можем определить это?

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


//Target function to minimize;
public double f(double[] x) { 
   double z = Math.Cos(x[0])-0.2*x[0] + x[1] * x[1]; //Function with multiple local minima : x ~ { (2n+1)pi , 0 }
   return z;
  }

//Gradient
  public double[] g(double[] x) { 
      double[] grad = {-Math.Sin(x[0])-0.2 , 2 * x[1]};
      return grad;
  }

  double[] x = {3*3.141592,0}; // Starting value (local minimum, -2.88)

  var lbfgs = new BroydenFletcherGoldfarbShanno(numberOfVariables: 2, function: f, gradient: g);

  bool success = lbfgs.Minimize();
  double minValue = lbfgs.Value;
  double[] solution = lbfgs.Solution; // {3.34,0} This solution is a local min that has a higher value (-1.65) than the local min next to which we started !!

1 Ответ

1 голос
/ 29 мая 2019

Синтаксис просто: lbfgs.Minimize (x);Спасибо "500 - Внутренняя ошибка сервера"!

...