Текст подпрограммы и версий ( Фортран )
mnb6r.zip , mnb6d.zip
Тексты тестовых примеров ( Фортран )
tmnb6r.zip , tmnb6d.zip
Текст подпрограммы и версий ( Си )
mnb6r_c.zip , mnb6d_c.zip
Тексты тестовых примеров ( Си )
tmnb6r_c.zip , tmnb6d_c.zip
Текст подпрограммы и версий ( Паскаль )
mnb6r_p.zip , mnb6e_p.zip
Тексты тестовых примеров ( Паскаль )
tmnb6r_p.zip , tmnb6e_p.zip

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

Назначение

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

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

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

     min  φ (x) ,   x  En
      x
 используется алгоритм  Нелдера - Мида. 

Д.Химмельблау, Прикладное нелинейное программирование, Изд - во "Мир", M., 1975.

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

    SUBROUTINE  MNB6R (N, NP1, ITMAX, ALFA, BETA, GAM, ACC, A, 
                                             X, XCEN, Z, XREF, XCON, XEX, XX, FF, 
                                             MAXK, FUN, IERR) 

Параметры

N - размерность пространства переменных (тип: целый);
NP1 - целая переменная, значение которой на входе в подпpогpамму должно быть pавно N + 1;
ITMAX - целая переменная, на входе задающая максимально допустимое число итераций алгоритма; на выходе ее значение pавно фактически выполненному числу итераций;
ALFA - вещественная переменная, задающая параметр метода (см. замечания по использованию);
BETA - вещественная переменная, задающая параметр метода (см. замечания по использованию);
GAM - вещественная переменная, задающая параметр метода (см. замечания по использованию);
ACC - вещественная переменная, задающая точность вычисления минимума по функционалу;
A - вещественная переменная, задающая размер исходного многогранника (см. замечания по использованию);
X - вещественный двумеpный массив размера NP1 * N, используемый в подпрограмме как рабочий;
XCEN - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
Z - вещественный вектоp длины NP1, используемый в подпрограмме как рабочий;
XREF - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
XCON - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
XEX - вещественный вектоp длины  N, используемый в подпрограмме как рабочий;
XX - вещественный вектоp длины  N, на входе задающий начальную точку поиска; на выходе содержит точку с минимальным вычисленным значением функции;
FF - вещественная переменная, содержащая минимальное вычисленное значение функции;
MAXK - целая переменная, на входе задающая максимально допустимое число вычислений значения функции; на выходе содержит фактически выполненное число вычислений функции;
FUN - имя подпрограммы вычисления значения минимизиpуемой функции (см. замечания по использованию);
IERR - целая переменная, служащая для сообщения о причине окончания процесса; при этом:
IERR= 1 - когда найден минимум с заданной точностью;
IERR=65 - когда выполнено ITMAX итераций;
IERR=66 - когда выполнено MAXK вычислений функции.

Версии:

MNB6D - Решение задачи безусловной минимизации функции многих переменных без вычисления производной, при этом вычисления проводятся с удвоенной точностью. Параметры ALFA, BETA, GAM, ACC, A, X, XCEN, Z, XREF, XCON, XEX, XX, FF, F, FE подпрограммы MNB6D и подпрограммы FUN должны иметь тип DOUBLE PRECISION. Тип остальных параметров не изменяется.

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

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

 

Параметры ALFA, BETA и GAM являются соответственно параметрами отражения, сжатия и растяжения при построении построении многогранника.

Анализ влияния значений этих параметров на скорость сходимости процесса показывает, что в общем случае целесообразно задавать ALFA = 1, а выбор значений параметpов BETA и GAM подчинить условиям:

           0.4 ≤ BETA ≤ 0.6
           2.8 ≤ GAM  ≤ 3.0 

Процесс минимизации начинается с построения правильного симплекса в  En с начальной точкой поиска в одной из вершин. Размер симплекса определяется значением параметpа  A, равного расстоянию между двумя ближайшими веpшинами симплекса.

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

             SUBROUTINE  FUN (X, F, FE)

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

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

    min  { φ (x)  =  ( x1 - 1 )2 + 10 ( x2 - 1 )2 + 100 ( x3 - 1 )2 + 1000 ( x4 - 1 )2 } ,   x  E2
    x0  =  ( -1., -2., -3., -4. )
    x*  =  ( 1., 1., 1., 1. )
    φ (x*)  =  0.

       DIMENSION  X(5, 4), XCEN(4), Z(5), XREF(4), XCON(4), XEX(4), 
      *                      XX(4)
       EXTERNAL  FUND03
       DATA  ALFA, BETA, GAM, ACC, A /1., 0.5, 2., 1.E-09, 1./
       DATA  N, ITMAX, MAXK /4, 10000, 2500/
       DATA  XX(1), XX(2), XX(3), XX(4) /-1., -2., -3., -4./
       NP1 = N + 1
       CALL  MNB6R (N, NP1, ITMAX, ALFA, BETA, GAM, ACC, A,
      *                          X, XCEN, Z, XREF, XCON, XEX, XX, FF, 
      *                          MAXK, FUND03, IERR)
       STOP
       END

       SUBROUTINE  FUND03 (X, F, FE)
       DIMENSION  X(4)
       F = ( X(1) - 1. )**2 + 10.*( X(2) - 1. )**2 + 100.*( X(3) - 1. )**2
      * + 1000.*( X(4) - 1. )**2 
       RETURN
       END

Результаты:

      IERR     =  1
      ITMAX  =  199
      MAXK   =  539

      FF    =  0.90732750 - 09
      X(1)  =  0.99998510 + 00
      X(2)  =  0.99999270 + 00
      X(3)  =  0.10000010 + 01
      X(4)  =  0.10000000 + 01