Текст подпрограммы и версий ( Фортран ) 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 |
Решение задачи безусловной минимизации функции многих переменных без вычисления производной.
Для решения задачи
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