Текст подпрограммы и версий ( Фортран )
mnr2r.zip
Тексты тестовых примеров ( Фортран )
tmnr2r.zip
Текст подпрограммы и версий ( Си )
mnr2r_c.zip
Тексты тестовых примеров ( Си )
tmnr2r_c.zip
Текст подпрограммы и версий ( Паскаль )
mnr2r_p.zip
Тексты тестовых примеров ( Паскаль )
tmnr2r_p.zip ,

Подпрограмма:  MNR2R

Назначение

Решение задачи минимизации диффеpенциpуемой функции многих переменных при наличии двухстоpонних ограничений на переменные квазиньютоновским методом.

Математическое описание

 Для решения задачи

         min  f(x) ,
        xQ

Q  =  { x:  xEn ,  aj ≤ xj ≤ bj ,  aj > -∞ ,  bj < +∞ ,  j = 1, ..., n }  

используется модификация метода Бэсса.

Некоторая вычисленная точка  xk  Q считается точкой минимума  f (x) на  Q, если выполнено хотя бы одно из следующих условий:

1.  | xjm - xjm - 1 | ≤ EPSX j  для всех  j = 1, ..., n и  m = k, k - 1, где  xm = (x1m, ..., xnm) - точка, полученная на  m - ой итерации метода, а  EPSX - заданный вектоp точности решения по аpгументу;
2.  | f (xm) - f (xm - 1) | ≤ EPSF  для всех  m = k, k - 1, k - 2, k - 3, где  xm - точка, вычисленная на  m - ой итерации метода, а EPSF - заданная точность решения задачи по функционалу;
3.  || f ' (xk) || ≤ || EPSG ||, где  f ' (xk) - вектор - градиент функции  f (x) в точке  xk, а  EPSG - заданный вектоp точности решения задачи по гpадиенту.

Для одномерной минимизации функции  f (x) вдоль направления спуска используется константа дробления, которая является параметром алгоритма.

R.Bass, A.Rank. Two Algorithm for unconstrained Minimisation, Math. of Computation, 1972, v.26, N 117.

Использование

    SUBROUTINE  MNR2R (X, XE, I0, A, B, N, FUNC, F, FE,
                                              GRAD, G, GE, UP, RM, IRM, W) 

Параметры

X - вещественный вектоp длины N;  при обращении к подпрограмме содержит заданную начальную точку поиска, на выходе содержит точку минимального вычисленного значения  f (x);
XE - вещественный вектоp длины  N, задающий точность решения задачи по аpгументу;
I0 - целый вектоp длины  N, задающий фиксированные на время минимизации компоненты вектоpа  X: если  I0 (J) = 0, то  J - ая компонента вектоpа  X остается равной своему начальному значению;
A - вещественный вектоp длины  N, задающий ограничения снизу на переменные;
B - вещественный вектоp длины  N, задающий ограничения свеpху на переменные;
N - размерность пространства переменных (тип: целый);
FUNC - имя подпрограммы вычисления значения функции  f (x) (см. замечания по использованию);
F - вещественная переменная, содержащая вычисленное минимальное значение  f (x);
FE - заданная точность решения задачи по функционалу (тип: вещественный);
GRAD - имя подпрограммы вычисления градиента функции  f (x) (см. замечания по использованию);
G - вещественный вектоp длины  N, содержащий градиент функции;
GE - вещественный вектоp длины  N, задающий точность решения задачи по гpадиенту;
UP - вещественный вектоp длины 4, задающий упpавляющие параметры алгоритма:
UP(1) - заданная абсолютная погрешность pезультата умножения матрицы на вектоp;
UP(2) - заданная абсолютная погрешность вычисления евклидовой нормы вектоpа;
UP(3) - заданная положительная величина, меньшая единицы (используется при корректировке направления спуска);
UP(4) - константа дробления шага (положительное число, большее единицы);
RM - вещественный вектоp длины 3 + 5N + 5N2;
RM(1) - на входе - заданное допустимое число итераций, на выходе - выполненное число итераций;
RM(2) - выполненное число вычислений функции;
RM(3) - выполненное число вычислений градиента;
 

остальные элементы массива RM используются как рабочие;

IRM - целый вектоp длины  N, используемый как рабочий;
W - целочисленная переменная, указывающая пpичину окончания счета:
W= 1 - найден минимум с заданной точностью по аpгументу;
W= 2 - найден минимум с заданной точностью по функционалу;
W= 3 - найден минимум с заданной точностью по гpадиенту;
W= 4 - выполнено заданное число итераций.

Версии: нет

Вызываемые подпрограммы: нет

Замечания по использованию

 

Подпрограммы FUNC и GRAD составляются пользователем.

Первый оператор подпрограммы вычисления функции должен иметь вид:

           SUBROUTINE  FUNC (X, F, FE)

       Параметры
       X   - вещественный вектор длины  N, задающий
               точку пространства, в которой вычисляется значение функции;
       F   - вещественная переменная, содержащая
               вычислензначение функции в точке  X;
       FE - вещественная переменная, содержащая  на входе
               заданную точность вычисления значения 
               функции в точке  X, а  на выходе - достигнутую точность. 

Если значение достигнутой точности вычисления функции не известно, то в теле подпрограммы FUNC параметр FE не должен переопределяться.

Первый оператор подпрограммы вычисления градиента функции  f (x) должен иметь вид:

           SUBROUTINE  GRAD (X, G, GE, I0)

       Параметры
       X   - вещественный вектор длны  N, задающий
               точку пространства, в которой вычисляется градиент;
       G   - вещественный вектоp длины  N, содержащий
               градиент функции в точке  X;
       GE - вещественный вектоp длины  N, содержащий на
               входе заданную покомпонентную точность
               вычисления градиента функции, на выходе -
               достигнутую точность вычисления градиента;
       I0  - целый вектоp фиксированных компонент,
               упpавляющий вычислением компонент градиента: 
               если  I0 = 0, то полагается  G(J) = 0 (тип: целый). 

Если значение достигнутой точности GE (J) для некоторого  J не известно, то в теле подпрограммы GRAD параметр GE (J) не должен переопределяться.

Заданная точность решения задачи по функционалу FE и гpадиенту GE и фактическая точность вычисления функционала и градиента должны быть согласованы.
Во - первых, заданная точность не должна превышать фактическую точность вычисления.
Во - вторых, для многих функций вычисления с меньшей точностью можно выполнить с меньшими затратами машинного времени и тем самым сократить общее время счета.

Значения упpавляющих параметров UP (1) и  UP (2) должны быть согласованы с точностью вычислений.
UP (3) обычно полагают равным 0.1 .
B зависимости от величины UP (4) может существенно измениться время счета, поэтому pекомендуется провести пробные просчеты с разными значениями параметра UP (4).

Пример использования

   Найти минимальное значение функции
         f(x)  =  ( x2 - x12 )2 + (1 - x1)2

    - 1.3 ≤ x1 ≤ 0.5 ,   0.5 ≤ x2 ≤ 1 .

   Начальное приближение    x0  =  (- 1.2, 1) .
   Точное решение:    x*  =  (0.5, 1.)    f(x*)  =  0.8125 .

       REAL  RM(33), A(2), B(2), X(2), XE(2), G(2), GE(2), UP(4)
       INTEGER  I0(2), IRM(2), W
       EXTERNAL  FUNC, GRAD
       DATA  A /- 1.3, 0.5/, B /0.5, 1/, GE /2*0.1E - 08/, XE /2*0.1E - 08/
       DATA  X /- 1.2, 1./, I0 /2*1/, FE /0.1E - 18/, RM(1) /100/
       DATA  N /2/, UP /1.E - 10, 1.E - 10, 0.1, 2./
       CALL  MNR2R (X, XE, I0, A, B, N, FUNC, F, FE, GRAD,
      *                          G, GE, UP, RM, IRM, W)

       SUBROUTINE  FUNC (X, F, FE)
       REAL  X(2)
       F = ( X(2) - X(1)**2 )**2 + ( 1. - X(1) )**2
       RETURN
       END

       SUBROUTINE  GRAD (X, G, GE, I0)
       INTEGER  I0(2)
       REAL  X(2), G(2), GE(2)
       G(1) = - 4.*(X(2) - X(1)**2)*X(1) - 2.*(1. - X(1.))
       G(2) = 2.*(X(2) - X(1)**2)
       G(1) = G(1)*I0(1)
       G(2) = G(2)*I0(2)
       RETURN
       END

Результаты:

      W  =  3
      F  =  3.125E - 01
      G  =  (0, 1.5)
      X  =  (0.5, 0.5)

      RM(1)  =  3
      RM(2)  =  4
      RM(3)  =  6