Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/mn/mn11r.htm
Дата изменения: Fri Sep 26 15:34:56 2014 Дата индексирования: Sun Apr 10 00:47:43 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий ( Фортран ) mn11r.zip |
Тексты тестовых примеров ( Фортран ) tmn11r.zip |
Текст подпрограммы и версий ( Си ) mn11r_c.zip |
Тексты тестовых примеров ( Си ) tmn11r_c.zip |
Текст подпрограммы и версий ( Паскаль ) mn11r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmn11r_p.zip |
Решение задачи квадратичного программирования при наличии двухсторонних ограничений на переменные методом покординатного спуска.
Решается задача квадратичного программирования
min { Q(x) = (Gx, x) + (h, x) | a ≤ x ≤ b } ,
где G - симметричная матрица размерности n * n , x, h, a, b - векторы длины n, причем ai > - ∞, bi < +∞, i = 1, ..., n.
Матрица G задается в компактной форме, т.е. представляется в виде вектоpа длины n (n + 1)/2, который состоит из элементов нижнего треугольника матрицы, выписанных последовательно по строкам.
Для решения задачи используется метод покоординатного спуска. Для одномерной минимизации функции Q (x) вдоль направления спуска используется метод квадратичной аппроксимации.
Некоторая вычисленная точка xk, a ≤ xk ≤ b, считается точкой минимума функции Q (x), если выполнено хотя бы одно из следующих условий:
1. | | xik - xik - 1 | ≤ XE для всех i = 1, ..., n, где xk = (x1k, ..., xnk) - точка, полученная на k - ой итерации метода, а XE - заданная точность решения задачи по аргументу; |
2. | | Q (xk) - Q (xk - 1) | ≤ FE, xk - точка, вычисленная на k - ой итерации метода, а FE - заданная точность решения задачи по функционалу. |
Пшеничный Б.Н., Метод минимизации функции без вычисления производных, Кибернетика, N 4, 1973.
SUBROUTINE MN11R (N, X, XE, A, B, G, H, FSTEP, IPAR, MAXK, F, FE, KOUNT, I0, RM, IERR)
Параметры
N - | размерность пространства переменных (тип: целый); |
X - | вещественный вектоp длины N: при обращении к подпрограмме содержит заданную начальную точку поиска, на выходе содержит точку минимума функции Q (x); |
XE - | заданная точность решения задачи по аргументу (тип: вещественный); |
A - | вещественный вектоp длины N, задающий ограничения снизу на переменные; |
B - | вещественный вектоp длины N, задающий ограничения свеpху на переменные; |
G - | вещественный вектоp длины N (N + 1)/2, содержащий компактную запись матрицы G; |
H - | вещественный вектоp длины N, содержащий компоненты вектоpа h; |
FSTEP - | начальная длина шага (тип: вещественный); |
IPAR - | параметр, управляющий вариантом покоординатного спуска (тип: целый): |
IPAR=1 - | используется вариант с ускоpенным дроблением шага; |
MAXK - | целая переменная, при обращении к подпрограмме содержащая заданное максимально допустимое число вычислений функции, на выходе - фактически выполненное число вычислений функции; |
F - | вещественная переменная, содержащая вычисленное минимальное значение Q (x); |
FE - | заданная точность решения задачи по функционалу (тип: вещественный); |
KOUNT - | целая переменная, содержащая число фактически выполненных итераций метода; |
I0 - | целочисленный вектоp длины N, используемый как рабочий; |
RM - | вещественный вектоp длины 4 * N + 11, используемый как рабочий; |
IERR - | целая переменная, указывающая причину окончания процесса: |
IERR= 0 - | найден минимум с заданной точностью по аргументу или по функционалу; |
IERR= 4 - | выполнено заданное максимальное число вычислений функции, но точность не была достигнута. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
Используются служебные подпрограммы: MNP11, MNP13, MN214, MN215, MNP16. |
Найти min { Q(x) = (Gx, x) + (h, x) | a ≤ x ≤ b } , где G - трехдиагональная матрица, у которой верхняя и нижняя диагонали равны ( 0.5, 0.5, 0.5, 0., 0.5, 0.5, 0., 0.5, 0. ) , а главная диагональ равна ( 100., 100., 100., 100., 20., 20., 20., 3., 3., 1. ) . h = ( - 202; - 202; - 202; - 200; - 42; - 42; - 40; - 8; - 6; - 2 ) ; ai = - 2 , i = 1 , ..., 10 ; bi = 2 , i = 1 , ..., 10 . Начальная точка xi0 = - 1 , i = 1, ..., 10 . Q(x0) = 1419 . Точка минимума x* ≈ (1.0050; 1.0000; 1.0000; 0.9950; 1.0250; 1.0000; 0.9750; 1.2000; 0.8000; 1.0000) Q(x*) ≈ - 473.2300 INTEGER I, N, IPAR, MAXK, KOUNT, I0, IERR REAL A, B, G, H, F, FE, FSTEP, RM, X, XE DIMENSION A(10), B(10), H(10), I0(10), X(10), XE(10), G(35), * RM(51) DATA N, FE, XE /10, 5.E - 10, 10*5.E - 10/ DATA FSTEP, IPAR, MAXK /1., 1, 1000/ DATA G /100., 0.5, 100., 0., 0.5, 100., 0., 0., 0.5, 100., 4*0., 20., * 4*0., 0.5, 20., 5*0., 0.5, 20., 7*0., 3., 7*0., 0.5, 3., * 9*0., 1./ DATA H /- 202., - 202., - 202., - 200., - 42., - 42., - 40., - 8., * - 6., - 2./ DATA A, B, X /10* - 2., 10*2., 10* - 1./ CALL MN11R (N, X, XE, A, B, G, H, FSTEP, IPAR, MAXK, F, FE, * KOUNT, I0, RM, IERR) Результаты: IERR = 0 KOUNT = 193 MAXK = 306 X(I) = (1.0053, 0.999574, 1.000782, 0.995092, 1.025024, 1.001971, 0.975006, 1.199397, 0.800848, 0.998825) F = - 473.2299