|
Текст подпрограммы и версий ( Фортран ) mlc3r.zip |
Тексты тестовых примеров ( Фортран ) tmlc3r.zip |
|
Текст подпрограммы и версий ( Си ) mlc3r_c.zip |
Тексты тестовых примеров ( Си ) tmlc3r_c.zip |
|
Текст подпрограммы и версий ( Паскаль ) mlc3r_p.zip |
Тексты тестовых примеров ( Паскаль ) tmlc3r_p.zip |
Решение задачи линейного целочисленного программирования модифицированным методом Гомори (полностью целочисленный алгоритм с компактным хранением исходной информации).
Для решения задачи
n
max ( z0 + ∑ cj (-xj) ) , A x ≤ b , xj ≥ 0 ,
j=1
где c и x - целочисленные векторы из En, A - целочисленная матрица порядка m на n, b - целочисленный вектоp из Em, z0 - заданное число, используется полностью целочисленный алгоритм Гомори. Исходная информация задается в компактной форме.
Ненулевые элементы матрицы условий A задаются в виде одномерного массива IA, каждый элемент которого содержит очередной (по стpокам) ненулевой элемент ai j матрицы A и номер столбца j в виде условного числа ai j * 103 + j.
Количество ненулевых элементов в i - ой стpоке матрицы задается в i - ой компоненте вектоpа KV длины m.
Руднева Т.Л., Яранов М.Г. Программная реализация полностью целочисленного алгоритма Гомори. В сб. "Математические вопросы задач оптимизации и управления", M., МГУ, 1981.
SUBROUTINE MLC3R (LIA, M, N, IA, KV, X, C, Z, MAX, B, MR, EPS,
IERR)
Параметры
| LIA - | число ненулевых элементов в матрице A (тип: целый); |
| M - | число стpок в матрице A (тип: целый); |
| N - | число столбцов в матрице A (тип: целый); |
| IA - | заданный целый вектоp длины LIA, содержащий ненулевые элементы исходной матрицы A по стpокам в виде условных чисел; |
| KV - | заданный целый вектоp длины M, содержащий количество ненулевых элементов матрицы A по стpокам; |
| X - | целый вектоp длины N + M (см. замечания по использованию); |
| C - | заданный целый вектоp длины N, содержащий коэффициенты линейной формы; |
| Z - | целая переменная; на входе содержит заданное значение z0, на выходе - оптимальное значение целевой функции; |
| MAX - | заданная оценка свеpху на сумму компонент вектоpа x (тип: целый); |
| B - | целая матрица N на N, используемая в подпрограмме как рабочая; |
| MR - | целый вектоp длины 4 + 5N + 2 max (N, M), используемый в подпрограмме как рабочий; |
| EPS - | заданная абсолютная точность округления вещественного числа до целого (тип: вещественный); |
| IERR - | целая переменная, указывающая причину окончания процесса вычислений: |
| IERR= 0 - | если найдено оптимальное решение; |
| IERR=65 - | если решения не существует. |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию
| 1. |
Используются служебные подпрограммы: MLC32, MLC33, MLC34, MLC35, MLC36, MLC37, MLC38, MLC39, MLC3A, MLC3B, MLC3L, MLC3M, MLC3V. | |
| 2. |
Задаваемое значение параметра MAX должно быть оценкой свеpху для суммы компонент вектоpа x, т.е. n
∑ xj ≤ MAX
j=1
| |
| 3. |
Hа входе первые N компонент вектоpа X полагаются равными нулю, а следующие M компонент должны содержать коэффициенты вектоpа ограничений b. Hа выходе первые N компонент вектоpа X содержат оптимальное решение задачи, а M последующих - значения дополнительных переменных, т. е. X (N + I) = [b - Ax] I, I = 1,..., M. | |
| 4. | B процессе вычислений производится округление некоторых вещественных чисел с использованием параметра EPS, 0 < EPS < 0.5. B частности, вещественное число Y заменяется целым K, если ABS (Y - K) ≤ EPS. Выбор конкретного значения параметра EPS во многом определяется коэффициентами условий задачи, однако, обычно EPS берется из интервала (10 - 7, 10 - 4). |
Максимизировать 4 x1 + 5 x2 + x3
при условиях
3 x1 + 2 x2 ≤ 10
x1 + 4 x2 ≤ 11
3 x1 + 3 x2 + x3 ≤ 13 ,
x1, x2, x3 ≥ 0 , целые
INTEGER IA(7), KV(3), X(6), C(3), B(3, 3), MR(25), Z
REAL EPS
DATA IA /3001, 2002, 1001, 4002, 3001, 3002, 1003/
DATA KV /2, 2, 3/, X /0, 0, 0, 10, 11, 13/, Z /0/, EPS /0.0001/,
* C /-4, -5, -1/, LIA /7/, M /3/, N /3/, MAX /19/
CALL MLC3R (LIA, M, N, IA, KV, X, C, Z, MAX, B, MR, EPS, IERR)
Результаты:
IERR = 0
Z = 19
X = (2, 2, 1)