|
Текст подпрограммы и версий ( Фортран ) ml04r.zip |
Тексты тестовых примеров ( Фортран ) tml04r.zip |
|
Текст подпрограммы и версий ( Си ) ml04r_c.zip |
Тексты тестовых примеров ( Си ) tml04r_c.zip |
|
Текст подпрограммы и версий ( Паскаль ) ml04r_p.zip |
Тексты тестовых примеров ( Паскаль ) tml04r_p.zip |
Решение задачи линейного программирования с двухсторонними ограничениями на переменные модифицированным симплекс - методом.
Решается задача линейного программирования
min (c,x) ( или max (c,x) ) ,
A x = b ,
0 ≤ x ≤ α ,
где A - матрица размерности m на n, x, c и α - векторы длины n, b - вектоp длины m.
Используется модифицированный симплекс - метод. Исходная информация задается в виде расширенной матрицы
| a11 a12 ... a1n |
| . . . . . . . . . . . . . . . . . . . |
A1 = | am1 am2 ... amn |
| c1 c2 ... cn |
| am+2,1 am+2,2 ... am+2,n |
где am + 2, j = - (a1 j +... + am j) для J = 1,..., N. Вектоp b дополняется двумя компонентами bm + 1 = 0, bm + 2 = - (b1 +...... + bm).
Компоненты вектоpа верхних ограничений на переменные α задаются в компактной форме в одномерном массиве ALFA. Каждый элемент массива ALFA содержит отличную от + ∞ компоненту вектоpа α, а в массиве NALFA находится номер соответствующей компоненты. Точность вычислений характеризуется величиной невязки
r = bm+2 - ∑ am+2, j xj .
j
Дж.Данциг, Линейное программирование. Его применения и обобщения. Изд - во "Прогресс", M., 1966.
SUBROUTINE ML04R (A, M, U, N, X, P, EPS, AMS, XK, ALFA, KV,
NALFA, NX)
Параметры
| A - | вещественный двумерный массив размерности m + 2 на n, содержащий элементы расширенной матрицы A1; |
| M - | число стpок матрицы A1 (тип: целый); |
| U - | рабочий массив размерности M на M (тип: вещественный); |
| N - | число столбцов матрицы A1 (тип: целый); |
| X - | вещественный вектоp длины M, при этом на входе X (I) = bI, I = 1,..., M; на выходе: |
| X (I) - | не равные граничным значениям компоненты решения в компактной форме при I = 1,..., M - 2, |
| X (M - 1) - | минимальное (или максимальное) значение линейной формы, |
| X (M) - | величина невязки r; |
| P - | целая переменная, при обращении к подпрограмме задается равной 1, если требуется найти максимум линейной формы, и не равной 1 в противном случае; на выходе: |
| P= 1 - | если найдено решение, |
| P= 2 - | если задача несовместна, |
| P= 3 - | если значение линейной формы неограничено; |
| ESP - | заданная абсолютная погрешность вычислений (тип: вещественный); |
| AMS - | целый рабочий вектор длины [(N + 15)/16] |
| XK - | вещественный рабочий вектоp длины M; |
| ALFA - | вещественный массив размерности KV, содержащий в компактной форме отличные от + ∞ компоненты вектоpа верхних ограничений α; |
| KV - | размерность массива ALFA, равная числу отличных от + ∞ компонент вектоpа α (тип: целый); |
| NALFA - | двубайтовый целый массив размерности KV, на входе содержит номера компонент вектора α, соответствующие элементам ALFA; |
| NX - | двубайтовый целый массив длины M; на выходе содержит номера компонент решения, не равных граничным значениям. |
Версии: нет
Вызываемые подпрограммы
| UTMN11 - | подпрограмма занесения единицы в шкалу; |
| UTMN12 - | подпрограмма занесения нуля в шкалу; |
| UTMN13 - | подпрограмма проверки значения в заданной позиции шкалы. |
Замечания по использованию
|
Ограничение: M ≤ 255. Задача должна быть приведена к виду, в котоpом компоненты вектоpа b неотрицательны. На выходе из подпрограммы номер компоненты решения J (I) элемента X (I) массива X (I = 1,..., M - 2), для которой 0 < xJ (I) = X (I) < αJ (I), находится в ячейке NX (I). Если при выходе из подпрограммы элемент NALFA (J) массива NALFA содержит число ( K + 1600 ), то в оптимальном плане xK = αK. Остальные компоненты решения равны нулю. Вектоp α не должен содержать нулевых компонент и хотя бы одна его компонента должна быть отлична от + ∞. Компоненты вектоpа ALFA должны быть упорядочены по возрастанию номеров; Используются служебные подпрограммы: MLU01, MLU02, MLU04, MLU07, MLU08, MLU18, MLU26, MLU27, MLU31, MLU32, MLU33, MLU35. Подпрограмма рекомендуется для использования, когда матрица условий A содержит много ненулевых элементов. |
REAL A(5, 4), U(5, 5), X(5), XK(5)
INTEGER*2 NX(5), NALFA(2)
REAL ALFA(2)
INTEGER P, AMS(1)
DATA A /1., 2., 1., 1., -4., 2., 1., 2., 2., -5., 3., 5., 1., 3., -9.,
* 0., 0., 1., -1., -1./
DATA X /15., 20., 10., 0., -45./
DATA ALFA /2., 3./, KV /2/, P /1/, M /5/, N /4/, EPS /0.01/
DATA NALFA /1, 3/
CALL ML04R (A, M, U, N, X, P, EPS, AMS, XK, ALFA, KV,
* NALFA, NX)
Результаты:
X = ( 2.43, 2.71, 0.43, 14.57, -0.00 )
NX = ( 2, 3, 4 )
NALFA = ( 16001, 3 )
Таким образом,
x = ( 1, 2.43, 2.71, 0.43 )
(c, x) = 14.57
r = 0.00