Документ взят из кэша поисковой машины. Адрес
оригинального документа
: http://num-anal.srcc.msu.su/lib_na/cat/mn/mnp1r.htm
Дата изменения: Fri Sep 26 16:29:28 2014 Дата индексирования: Sun Apr 10 00:48:22 2016 Кодировка: Windows-1251 |
Текст подпрограммы и версий ( Фортран ) mnp1r.zip |
Тексты тестовых примеров ( Фортран ) tmnp1r.zip |
Текст подпрограммы и версий ( Си ) mnp1r_c.zip |
Тексты тестовых примеров ( Си ) tmnp1r_c.zip |
Текст подпрограммы и версий ( Паскаль ) mnp1r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmnp1r_p.zip |
Решение задачи квадратичного программирования при наличии линейных ограничений на переменные методом покоординатного спуска.
Решается задача квадратичного программирования
min { (p, x) + (Cx, x) | Ax ≤ b } ,
где p и x - векторы длины n, C - симметричная положительно определенная матрица размерности n * n, A - матрица размерности m * n, b - вектоp длины m.
Матрица C задается в компактной форме, т.е. представляется в виде вектоpа длины n (n + 1)/2, который состоит из элементов нижнего треугольника матрицы, выписанных последовательно по строкам.
Для получения решения исходной задачи строится двойственная ей задача: найти
min { φ(u) = (h, u) + (Gu, u) | u ≥ 0 } ,
где h = (1/2)AC - 1 p + b, G = (1/4)AC - 1 A*.
Для решения двойственной задачи используется метод покоординатного спуска. Для одномерной минимизации функции φ (u) вдоль направления спуска используется метод квадратичной аппроксимации.
Некоторая вычисленная точка uk ≥ 0 считается точкой минимума функции φ (u), если выполнено хотя бы одно из следующих условий:
1. | | uik - uik - 1 | ≤ XE для всех i =1, ..., m, где uk = (u1k, ..., umk) - точка, полученная на k - ой итерации метода, а XE - заданная точность решения задачи по аргументу; |
2. | | φ (uk) - φ (uk - 1) | ≤ FE, где uk - точка, вычисленная на k - ой итерации метода, а FE - заданная точность решения задачи по функционалу. |
Решение исходной задачи вычисляется по формуле
x(u) = - (1/2) C -1 (A*u + p) .
Кюнци Г.П., Крелле B., Нелинейное программирование, Изд - во "Советское радио", M., 1965.
SUBROUTINE MNP1R (M, N, A, B, U, P, FSTEP, IPAR, MAXK, XE, FE, KOUNT, CO, G, I0, IERR)
Параметры
M - | число стpок матрицы A (тип: целый); |
N - | число столбцов матрицы A (тип: целый); |
A - | вещественный двумерный массив размерности M * N; |
B - | вещественный вектоp длины M; |
U - | вещественный вектоp длины max {6M + N + 11; N (N + 1)/2 }; на входе первые N (N + 1)/2 компонент вектоpа содержат компактную запись матрицы C; |
P - | вещественный вектоp длины N; на входе содержит компоненты вектоpа p, а на выходе содержит компоненты решения исходной задачи; |
FSTEP - | начальная длина шага (тип: вещественный); |
IPAR - | параметр, управляющий вариантом покоординатного спуска: если IPAR = 1, то используется вариант с ускоренным дроблением шага (тип: целый); |
MAXK - | целая переменная, на входе равная максимально допустимому числу вычислений функции, а на выходе - числу фактически выполненных вычислений функций; |
XE - | заданная точность решения задачи по аргументу (тип: вещественный); |
FE - | заданная точность решения задачи по функционалу (тип: вещественный); |
KOUNT - | целая переменная, содержащая число фактически выполненных итераций метода; |
CO - | вещественный вектоp длины N (N + 1)/2, используемый как рабочий; |
G - | вещественный вектоp длины M (M + 1)/2, используемый как рабочий; |
I0 - | целочисленный вектоp длины M, используемый как рабочий; |
IERR - | целая переменная, указывающая причину окончания процесса: |
IERR= 0 - | если найден минимум функции с заданной точностью по аргументу или по функционалу; |
IERR= 4 - | если выполнено заданное максимальное число вычислений функции, но точность не была достигнута; |
IERR=65 - | если матрица C не является положительно определенной. |
Версии: нет
Вызываемые подпрограммы
AIH1R - | подпрограмма обращения положительно определенной симметричной матрицы с компактной формой представления методом квадратного корня. |
Замечания по использованию
Матрица C должна быть положительно определенной. Используются служебные подпрограммы: MNP11, MNP12, MNP13, MNP14, MNP15, MNP16. |
Найти min [ Q(x) = 0.5x12 + 0.5x22 - x1 - 2x2 ] при ограничениях 2x1 + 3x2 ≤ 6 , x1 + 4x2 ≤ 5 , x1 ≥ 0 , x2 ≥ 0 . Точка минимума x* = (13/17, 18/17) . INTEGER KOUNT, M, MAXK, N, I0, IERR, IPAR REAL A, B, CO, FE, FSTEP, G, P, U, XE DIMENSION A(4, 2), B(4), I0(4), P(2), U(37), CO(3), G(10) DATA XE, FE, M, N /1.E - 8, 1.E - 9, 4, 2/ DATA FSTEP, IPAR, MAXK / 1., 1, 250/ DATA A /2., 1., - 1., 0., 3., 4., 0., - 1./ DATA B /6., 5., 0., 0./ DATA P / -1., - 2./ DATA U /0.5, 0., 0.5, 34*0./ CALL MNP1R (M, N, A, B, U, P, FSTEP, IPAR, MAXK, XE, FE, * KOUNT, CO, G, I0, IERR) Результаты: IERR = 0 KOUNT = 95 MAXK = 117 P(1) = 7.646729 - 01 P(2) = 1.058691 + 00