Когда вы выполняете оптимизацию, вам нужно решить, когда остановиться. Один из способов проверить, является ли ваше решение достаточно хорошим, состоит в том, чтобы проверить, значительно ли оно все еще меняется. Существует два способа измерения степени изменения решения: относительное изменение (то есть% изменения) или абсолютное изменение.
Целесообразно проверять относительные изменения, поскольку изменение 5 означает что-то совсем другое, когда решение около 1, чем когда оно около 100000. Таким образом, процедура оптимизации проверяет на каждой итерации i
abs(1-x(i)/x(i-1))<relTol
, т.е. на какую долю новое решение изменилось со времени последней итерации. Обратите внимание, что x
может быть массивом решений, если вы оптимизируете несколько параметров одновременно (таким образом, решение имеет «несколько компонентов»). Конечно, вы хотите, чтобы условие было выполнено для всех «компонентов решения», прежде чем вы прекратите дальнейшую оптимизацию.
Относительный допуск, однако, становится проблематичным, когда решение около нуля, так как x/0
не определено. Таким образом, имеет смысл также взглянуть на абсолютное изменение значения и прекратить оптимизацию, когда abs(x(i)-x(i-1))<absTol
. Если вы выберете absTol
достаточно маленьким, для больших решений будет учитываться только relTol
, тогда как absTol
станет релевантным только в том случае, если решение окажется около 0.
Поскольку решатель останавливается при выполнении любого из двух критериев, то, насколько близко вы подходите к (локально) оптимальному решению, определяется с помощью absTol
или relTol
. Например, если relTol
равно 10%, вы никогда не приблизитесь к оптимальному решению намного ближе, чем на 10%, если только ваше решение не будет около нуля, и в этом случае критерий absTol
(скажем, 0,0001) будет удовлетворен ранее. критерий relTol
.