Мне было интересно, есть ли у кого-нибудь предложения по минимизации функции f (x, y), где x и y - целые числа. Я исследовал множество методов минимизации и оптимизации, таких как BFGS и другие из GSL, и вещи из Numerical Recipes. До сих пор я пытался внедрить несколько различных схем. Первые работы по выбору направления наибольшего спуска f (x + 1, y), f (x-1, y), f (x, y + 1), f (x, y-1) и следуют этому направлению с минимизацией линии. Я также пробовал использовать метод простого спуска (Nelder-Mead). Оба метода застряли далеко от минимума. Они оба работают над более простыми функциями, такими как поиск минимума параболоида, но я думаю, что и то и другое, и особенно первое, предназначены для функций, где x и y являются вещественными (удваивает). Еще одна проблема заключается в том, что мне нужно называть f (x, y) как можно меньше раз. Он разговаривает с внешним оборудованием и занимает пару секунд для каждого вызова. Любые идеи для этого были бы весьма признательны.Минимизация f (x, y), где x и y - целые числа
Вот пример функции ошибки. Извините, я не публиковал это раньше. Эта функция занимает пару секунд для оценки. Кроме того, информация, которую мы запрос от устройства не добавляет к ошибке, если она находится ниже нашего желаемого значения, только если она выше
double Error(x,y)
{
SetDeviceParams(x,y);
double a = QueryParamA();
double b = QueryParamB();
double c = QueryParamC();
double _fReturnable = 0;
if(a>=A_desired)
{
_fReturnable+=(A_desired-a)*(A_desired-a);
}
if(b>=B_desired)
{
_fReturnable+=(B_desired-b)*(B_desired-b);
}
if(c>=C_desired)
{
_fReturnable+=(C_desired-c)*(C_desired-c);
}
return Math.sqrt(_fReturnable)
}
Любые идеи относительно класса и поведения вашей функции также будут оценены. – EFraim
Интересный вопрос. Забавно, как математика сначала становится трудной, когда вы начали изучать фракции и реальные числа, а также трудные снова, как только вы удалите их и вернитесь к натуральным числам. =) –
Знаете ли вы уравнение для f (x, y)? – Noldorin