Ampl находит оптимальное решение за 0 итераций, но переменные ошибочно установлены на 0

Я пытаюсь решить эту нелинейную проблему:

var c;
var n;

minimize error:
(
    (6770924 - (n * c * exp(-c * 1)))^2 + 
    (3617627 - (n * c * exp(-c * 2)))^2 + 
    (2344172 - (n * c * exp(-c * 3)))^2
) / 3;

Когда я выполняю этот код, у меня появляется сообщение об успешном выполнении с нулевой итерацией:

MINOS 5.51: optimal solution found.
0 iterations, objective 214759264300000
Non lin evals: obj = 3 grad = 2.

Но переменные «n» и «c» установлены в «0». И, используя этот ответ, я получаю от функции плохое значение, поскольку из постоянных значений ничего не вычитается.

Если я возьму переменную n из функции, у меня будет нормальный ответ, где c минимизирует мою функцию. Что не так с описанной мной моделью?

Заранее спасибо.


person joaocarlospf    schedule 01.04.2015    source источник


Ответы (1)


Как уже упоминалось в этом сообщении, MINOS чувствителен к начальной точке. Например, использование 1 в качестве начального значения для n дает лучшее целевое значение:

ampl: let n := 1;
ampl: solve;
MINOS 5.51: optimal solution found.
10 iterations, objective 24439722900
Nonlin evals: obj = 34, grad = 33.
person vitaut    schedule 02.04.2015
comment
Отличное объяснение на форуме групп Google! Большое тебе спасибо. - person joaocarlospf; 05.04.2015
comment
Еще одно сомнение: решатель BARON предлагает глобальные оптимальные решения нелинейных задач? - person joaocarlospf; 05.04.2015
comment
Да, если он сможет доказать свою оптимальность. - person vitaut; 07.04.2015