не может обеспечить строгий ограничительный усилитель - PullRequest
0 голосов
/ 25 апреля 2018

Я установил переменную на var p > 0; после того, как она была var p >=0; (и рабочая модель), чтобы убедиться, что я не получаю ошибку деления на ноль. Теперь при попытке запустить модель выдает следующую ошибку:

cannot enforce strict bound
context:  var p >  >>> 0; <<<

После быстрого поиска я обнаружил, что мне нужно дать низкое значение, а не ноль, чтобы оно заработало.

var p > 0.00001; or var p > 1e-6;

однако, это все еще дает ту же ошибку. Не могли бы вы объяснить, в чем именно заключается проблема и как ее решить? Мое уравнение имеет вид

Максимизировать Z: (квадратичная функция от p) / p;

1 Ответ

0 голосов
/ 26 апреля 2018

Оптимизация в целом (и AMPL в частности) обычно требует, чтобы допустимая область была топологически замкнута , т.е. любая предельная точка разрешенного пространства решений сама является частью пространства решений,Это означает, что строгие неравенства, как правило, не допускаются в качестве ограничений на переменные.

Чтобы понять почему, рассмотрим проблему:

var p > 0;
maximize OF: 1-p^2;

Даже если OF явно ограничено и никогда не может превышать 1,это не может быть оптимизировано, потому что нет оптимального значения p.Для любого допустимого (т. Е. Положительного) значения p, которое вы можете предложить, я могу улучшить целевую функцию, вдвое уменьшив p.Трудно определить алгоритм оптимизации, который имеет дело с ситуацией, когда не существует оптимума, даже локального оптимума!

(Технически, точность машины действительно налагает оптимальное значение p, где pэто наименьшее положительное число, которое может быть представлено в компьютерной арифметике. Но если мы хотим взглянуть на это так, то фактически у нас есть строгое неравенство, p> = eps, и нам лучше признать это явно.)

По этой причине ограничения на переменные обычно должны быть нестрогими неравенствами, например, заменить "> 0" на "> = smallnum".

...