Текст подпрограммы и версий ( Фортран ) mlogr.zip |
Тексты тестовых примеров ( Фортран ) tmlogr.zip |
Текст подпрограммы и версий ( Си ) mlogr_c.zip |
Тексты тестовых примеров ( Си ) tmlogr_c.zip |
Текст подпрограммы и версий ( Паскаль ) mlogr_p.zip |
Тексты тестовых примеров ( Паскаль ) tmlogr_p.zip |
Решение задачи линейного программирования с двусторонними ограничениями на переменные модифицированным симплекс - методом с мультипликативным представлением обратной матрицы и с пересчетами.
Решается задача линейного программирования
min (c,x) ( или max (c,x) ) A x = b , 0 ≤ x ≤ α ≤ +∞ ,
где A - матрица размерности m * n, x, c, α - векторы длины n, b - вектоp длины m.
Используется модифицированный симплекс - метод с мультипликативным представлением обратной матрицы и с пересчетами мультипликаторов. Процедура пересчета элементарных матриц - мультипликаторов предназначена для эффективного использования оперативной памяти ЭВМ и осуществляется при выполнении заданного числа итераций, либо при заполнении участка оперативной памяти, отведенной для хранения мультипликаторов.
Информация о задаче задается в следующем виде:
Матрица условий A задается в трех массивах:
- в одномерном массиве A последовательно помещаются
ненулевые элементы матрицы по столбцам;
- в одномерном массиве NSA записываются номера строк
соответствующих ненулевых элементов;
- в массиве NTAB указывается количество ненулевых элементов
в каждом столбце матрицы.
Вектор C содержит коэффициенты линейной формы.
Вектор ограничений b задается в массиве B.
Выходными параметрами подпрограммы являются:
вещественная переменная F - оптимальное значение
линейной формы;
вещественный вектор RM после окончания
счета, содержащий в первых N ячейках компоненты решения;
и целая переменная IERR, указывающая причину окончания счета.
Вводится в рассмотрение расширенный вектор ограничений b длины M = m + 2, у которого b = bi для i = 1, ..., m, bM - 1 = 0, bM = - (b1 + ... + bm).
Точность вычислений характеризуется величиной невязки
n
r = bM - ∑ Sj x j , где Sj = - ( ai j + ... + am j ) .
j =1
С.Гасс, Линейное программирование, Физматгиз, M., 1961.
Г.Зойтендейк, Методы возможных направлений. Изд - во ИЛ, M., 1963.
SUBROUTINE MLOGR (M, N, PRP, A, NSA, NTAB, ALFA, NALFA, KV, B, C, LB, EPS, MNMX, F, IM, RM, IERR)
Параметры
M - | число строк расширенной матрицы (тип: целый); |
N - | число столбцов в матрице условий (тип: целый); |
PRP - | целая переменная, задающая число итераций метода, через которое делается пересчет мультипликаторов (см. замечания по использованию); |
A - | вещественный вектор, задающий ненулевые элементы матрицы по столбцам; |
NSA - | массив индексов строк для соответствующих ненулевых элементов (тип: INTEGER * 2); |
NTAB - | вектор длины N - таблица ненулевых элементов матрицы по столбцам (тип: INTEGER * 2); |
ALFA - | вещественный вектоp длины KV, содержащий отличные от + ∞, компоненты вектора верхних ограничений α; |
NALFA - | массив номеров отличных от + ∞, компонент вектора верхних ограничений α (тип: INTEGER * 2); |
KV - | количество отличных от + ∞ верхних ограничений на переменные (тип: целый); |
B - | вещественный вектор длины M содержащий ограничения; |
C - | вещественный вектоp длины N, содержащий коэффициенты линейной формы; |
LB - | целая переменная, задающая объем свободной оперативной памяти (см. замечания по использованию); |
EPS - | вещественная переменная, задающая точность вычисления оптимального плана; |
MNMX - | целая переменная, задающая признак оптимизации: |
MNMX=0, | если задача поставлена на минимум; |
MNMX=1, | если - на максимум, |
F - | вещественная переменная, содержащая оптимальное значение линейной формы; |
IM - | рабочий массив длины (1 + 6M + 2N + LB) (тип: INTEGER * 2); |
RM - | вещественный рабочий массив длины (1 + 4M + N + LB), после окончания счета в первых N ячейках стоит решение; |
IERR - | целая переменная служащая для сообщения о причине окончания счета: |
IERR= 0 - | получено оптимальное решение; |
IERR=65 - | задача несовместна; |
IERR=66 - | линейная форма неограничена. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
Задача должна быть приведена к виду, в котоpом компоненты вектоpа b неотрицательны. Вектор верхних ограничений на переменные α не должен содержать нулевых компонент и хотя бы одна его компонента должна быть отлична от + ∞. Процедура пересчета элементарных матриц предназначена
для эффективного использования оперативной памяти.
Обычно для хранения элементарных матриц используется
вся свободная память (LB). Число PRP рекомендуется
выбрать равным 3M/2, где M - число ограничений задачи.
Выбор момента пересчета элементарных матриц осуществляется
программой. Пересчет производится при выполнении хотя бы
одного из условий: При определении LB следует иметь ввиду, что программа использует (2 + 8 * M + 4,5 * N + 1,5 * Z) ячеек памяти без учета массива элементарных матриц, где Z - количество ненулевых элементов в матрице условий. Длина входных векторов A и NSA должна быть не меньше Z. После работы подпрограммы изменяются: |
max [(c, x) = x1 + 2x2 + 3x3 - x4 ] , x1 + 2x2 + 3x3 = 15 , 2x1 + x2 + 5x3 = 20 , x1 + 2x2 + x3 + x4 = 10 , 0 ≤ x1 ≤ 2 , 0 ≤ x2 , 0 ≤ x3 ≤ 3 , 0 ≤ x4 . REAL A(10) /1, 2., 1., 2., 1., 2., 3., 5., 1., 1./, * B(5) /15., 20., 10., 0., 0./, ALFA(2) /2., 3./, * EPS /0.01/, C(4) /1., 2., 3., - 1./, RM /55/ INTEGER*2 NSA(10) /1, 2, 3, 1, 2, 3, 1, 2, 3, 3/, NTAB(4) /3*3, 1/, * NALFA(2) /1, 3/, IM(69) INTEGER M /5/, N /4/, PRP /6/, KV /2/, MNMX /1/, LB /30/ CALL MLOGR (M, N, PRP, A, NSA, NTAB, ALFA, NALFA, KV, B, * C, LB, EPS, MNMX, F, IM, RM, IERR) Результаты: IERR = 0 Значение линейной формы F = 14.571 Решение 2.0000 2.42857 2.71428 0.42857