Текст подпрограммы и версий ( Фортран ) mnn1r.zip |
Тексты тестовых примеров ( Фортран ) tmnn1r.zip |
Текст подпрограммы и версий ( Си ) mnn1r_c.zip |
Тексты тестовых примеров ( Си ) tmnn1r_c.zip |
Текст подпрограммы и версий ( Паскаль ) mnn1r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmnn1r_p.zip |
Решение задачи минимизации функции многих переменных без вычисления производных при наличии двухсторонних ограничений на переменные методом покоординатного спуска с построением аппроксимирующей параболы с использованием метода Хука - Дживса.
Для решения задачи
min f (x) ,
Q = { x: x ∈ En , aj ≤ xj ≤ bj , aj > - ∞ , bj < ∞ , j = 1, ..., n } ,
используется метод покоординатного спуска с построением аппроксимирующей параболы.
Точка xk ∈ Q считается точкой минимума f (x) на Q, если выполнено хотя бы одно из следующих условий:
1. | | xjk - xjk - 1 | ≤ EPSX j для всех j = 1, ..., n, где xk = (x1k, ..., xnk) - точка, полученная на k - ой итерации метода, а EPSX - заданный вектоp точности решения задачи по аргументу; |
2. | | f (xk) - f (xk - 1) | ≤ EPSF, где xk - точка, вычисленная на k - ой итерации метода, а EPSF - заданная точность решения задачи по функционалу; |
3. | NF > KMAX, где NF - фактически выполненное число вычислений функции, KMAX - заданное максимально допустимое число вычислений функции. |
SUBROUTINE MNN1R (N, X, XE, A, B, FUN, F, FE, UP, I0, IRM, RM, IERR)
Параметры
N - | размерность пространства переменных (тип: целый); |
X - | вещественный вектоp длины N, содержащий на входе заданную начальную точку поиска, на выходе - точку минимума функции f (x); |
XE - | вещественный вектоp длины N, содержащий заданную абсолютную точность решения задачи по аргументу; |
A - | вещественный вектоp длины N, задающий ограничения снизу на переменные; |
B - | вещественный вектоp длины N, задающий ограничения свеpху на переменные; |
FUN - | имя подпрограммы вычисления функции f (x); |
F - | вещественная переменная, содержащая вычисленное минимальное значение f (x); |
FE - | заданная абсолютная точность решения задачи по функционалу; |
UP - | вещественный вектоp длины 11, задающий управляющие параметры алгоритма: |
UP(1) - | заданная вещественная константа, участвующая в формировании начальной точности вычисления по аргументу (UP (1) ≥ 1); |
UP(2) - | заданная вещественная константа, участвующая в формировании начальной точности вычисления по функционалу (UP (2) ≥ 1); |
UP(3) - | заданная вещественная константа, используемая при сравнении разностных производных (0 < UP (3) < 1); |
UP(4) - | заданная вещественная константа, участвующая в формировании начального шага (UP (4) > 1); |
UP(5) - | заданная вещественная константа, используемая для изменения величины шага (константа дробления) (UP (5) > 1); |
UP(6) - | вещественная константа, участвующая в изменении точности по аргументу, 0 < UP (6) < 1; |
UP(7) - | вещественная константа, участвующая в изменении точности вычисления по функционалу, 0 < UP (7) < 1; |
UP(8) - | вещественная константа, используемая в качестве "машинного нуля" (UP (8) ≈ 103 * min, где min - минимально представимое число с плавающей запятой в машине); |
UP(9) - | вещественная константа, используемая для изменения величины шага (для увеличения шага) (UP > 1); |
UP(10) - | заданная вещественная константа, указывающая максимальное время работы подпрограммы; |
UP(11) - | вещественная константа, влияющая на величину шага в подпрограмме MNN09 (0.1 < < UP (11) < 1); |
I0 - | целый вектоp длины N, задающий фиксированные компоненты вектоpа переменных (если I0 (I)= 0, то X (I) - фиксируется, в противном случае I0 (I) = 1); |
IRM - | целый вектоp длины N, используемый в подпрограмме как рабочий; |
RM - |
вещественный вектоp длины 4N; на входе: |
RM(1) - | заданное максимально допустимое число итераций метода; |
RM(2) - | заданное максимально допустимое число вычислений функции; |
на выходе: |
RM(1) - | выполненное число итераций; |
RM(2) - | выполненное число вычислений функции; |
IERR - | целочисленная переменная, указывающая причину окончания счета: |
IERR= 1 - | если достигнута точность по аргументу; |
IERR= 2 - | если достигнута точность вычисления функции; |
IERR= 4 - | если выполнено заданное число вычислений функции; |
IERR= 5 - | если истекло заданное время вычислений; |
IERR= 6 - | если произошло замедление счета. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
Подпрограмма FUN составляется пользователем. SUBROUTINE FUN (X, F, FE) Параметры X - вещественный вектор длины N, содержащий текущую точку пространства, в которой вычисляется значение функции; F - вещественная переменная, содержащая вычисленное значение функции в точке X; FE - вещественная переменная, содержащая заданную точность вычисления значения функции в точке X. Имя подпрограммы вычисления значения функции должно быть определено в вызывающей подпрограмме оператором EXTERNAL. Используются служебные подпрограммы MNN02, MNN04, MNN05, MNN06, MNN07, MNN08, MNN09, UTMN05, MMKRIT и СОММОN - блок MMKRIC. |
Найти минимальное значение функции:
f(x) = (x1 - 1)2 + 10(x2 - 1)2 + 100(x3 - 1)2 + 1000(x4 - 1)2 - 4 ≤ x i ≤ 4 , i = 1, ..., 4 ; начальное приближение x0 = ( - 1, - 2, - 3, - 4 ) DIMENSION X(4), A(4), B(4), I0(4), UP(11), XE(4), IRM(4), RM(30) COMMON /MNKRIC/ZF, KR, AKR, DF(15) REAL X, XE, A, B, UP, RM, FE EXTERNAL FUNC DATA X /- 1., - 2., - 3., - 4./ DATA A /4* - 4./, B /4*4./, XE/4*0.1E - 4/, FE /0.1E - 4/ DATA I0 /1, 1, 1, 1/ DATA UP /2*0.1E + 3, 1.E - 1, 0.1E + 2, 2., 2*1.E - 1, 0.1E - 15, * 0.2E + 1, 0.2E + 2, 0.8/ DATA RM(1), RM(2) /200., 200./ N = 4 CALL MNN1R (N, X, XE, A, B, FUNC, F, FE, UP, I0, IRM, RM, IERR) STOP END SUBROUTINE FUNC (X, F, FE) REAL X(4), F, FE F = (X(1) - 1.)**2 + 10.0*(X(2) - 1.0)**2 + 100.* *(X(3) - 1.0)**2 + 1000.*(X(4) - 1.)**2 RETURN END Результаты: F = 0.00000 FE = 0.000010 X = 1.00000, 1.00000, 1.00000, 1.00000 XE = 0.00001, 0.00001, 0.00001, 0.00001 RM(1) = 10 RM(2) = 60 IERR = 12 UP = 2.0000
Примечание: IERR=12 означает, что выполнено одновременно два критерия останова 1 и 2.