logo
ГОСы - ответы [2012]

3. Записать алгоритм решения системы линейных уравнений методом итераций

1.

f0(X) →min (2.2)

при условиях

fi(X)≥0, i=1, …, p,

fi(X)=0, i=p+1, …, m.

В зависимости от вида функций f0(Х) и fi(X) выделяют частные случаи задачи (2.2). Если f0(X) и fi(X) - линейные функции, то имеет место задача линейного программирования. Если хотя бы одна из функций f0(X) или fi(X) нелинейна, то задача f0(X) →min

при условиях:

fi(X)≥0, i=1, …, p,

fi(X)=0, i=p+1, …, m.

есть задача нелинейного программирования. В том случае, если допустимое множество Хd конечно или счетно и не имеет предельных точек, то имеет место задача дискретного программирования. Частным случаем последней является задача целочисленного программирования, когда все допустимые точки имеют целочисленные координаты.

Возможны три случая (это отсебятина):

Первый когда поиск решение производится на заданном в условиях относительно небольшом интервале. Тогда в некоторых случаях проще подставить целые числа из этого интервала вместо х и проверять правильность равенства, чем решать уравнение аналитически.

Во втором случае, на целочисленное решение может накладывать некое ограничение – интервал, в который оно должно входить. Это может быть применено, например, когда имеются несколько решений.

В-третьих, может быть получен ряд решений, как целочисленных, так и дробных. В таком случае, они отсеиваются через целочисленную сетку, или округляются до целочисленных, если того требую условия задачи.

Под задачей целочисленного программирования (ЦП) понимается задача, в которой все или некоторые переменные должны принимать целые значения. В том случае, когда ограничения и целевая функция задачи представляют собой линейные зависимости, задачу называют целочисленной задачей линейного программирования. В противном случае, когда хотя бы одна зависимость будет нелинейной, это будет целочисленной задачей нелинейного программирования.

Особый интерес к задачам ЦП вызван тем, что во многих практических задачах необходимо находить целочисленное решение ввиду дискретности ряда значений искомых переменных. В сфере лесного комплекса к их числу относятся следующие задачи:

Как уже отмечалось, часто задачу ЦП решают без учета условий целочисленности переменных, а затем округляют полученное решение с избытком или недостатком. Это не гарантирует получение оптимального целочисленного решения задачи. Поэтому для нахождения оптимального решения целочисленных задач применяют специальные методы, в которых учитывается, что число возможных решений любой целочисленной задачи является конечным. Следовательно, можно рассмотреть все возможные сочетания целочисленных переменных и проверить, удовлетворяют ли они ограничениям, и из числа удовлетворяющих ограничениям, выбрать наилучшее с точки зрения целевой функции. Такой метод называют методом полного перебора. Его трудоемкость с ростом числа переменных и расширением области граничных условий значительно возрастает. Поэтому для реальных задач он неприменим.

На практике для решения реальных задач следует использовать методы, в котором все возможные альтернативы не рассматриваются. Наиболее распространенным является метод ветвей и границ.

Целочисленное линейное программирование - метод отсечений Гомори

Целочисленное линейное программирование (сокращенно ЦЛП) занимается задачами линейного программирования с целочис­ленными переменными, общая задача формулируется следующим образом: найти тах{сх|Ах ≤ b; х - целочисленный}. ЦЛП мож­ет рассматриваться так же, как поиск точки решетки, принад­лежащей многограннику или как решение системы линейных уравнений с целыми неотрицательными переменными. Иными словами, в ЦЛП рассматриваются совместные ограничения -неотрицательность и целочисленность. 

Отсечения

С помощью отсечений выделяют целочисленные части полиэдров. Метод отсечений был разработан в конце 1950-х годов Гомори для решения целочисленных линейных программ с помощью симплекс-метода. Метод отсечений оказался полезным и с теоретической точки зрения он дает возможность описать целочисленную оболочку полиэдра.

Далее описывается метод отсечений Гомори, дающий алгоритм решения задач целочисленного линейного программирования.  Данный метод, который также носит название метода отсекающих плоскостей, предназначен для решения ЦЗЛП (целочисленной задачи линейного программирования) в канонической форме. Описываемая ниже версия алгоритма предназначена для решения полностью целочисленных задач, т.е. таких, у которых все параметры aij, cj, bi – целые.

 

Описание алгоритма.

Приведем обобщенную схе­му алгоритма Гомори. Структурно он делится на так называе­мые большие итерации. Каждая большая итерация содержит этапы:

1.            Сначала задача решается методами линейного программирования (малые итерации), обычно симплекс-методом, и анализируется результат, если результатом являются целые числа, то на этом решение заканчивается, а если дробные, то производят следующие операции:

2.            В оптимальном плане (симплекс-таблице) выбирают строку, в которой целая часть дробного(!) свободного члена (P0) принимает наибольшее значение.

3.            Построение для найденной компоненты условия отсечения.      Исходя из уравнения по данной строке xr=P0r - ar,1*x1 - …  - ar,n*xn  в систему ограничений добавляем неравенство, в котором коэффициенты будут дробными частями коэффициентов данного уравнения:     {P0r} –{ ar,1}*x1 - …  -{ ar,n}*xn ≤ 0.    Переводим к каноническому виду добавляя новую переменную xn+1, получим: {P0r} –{ ar,1}*x1 - …  - {ar,n}*xn+xn+1 = 0       И соответственно добавляем в симплекс-таблицу новый базисный вектор по новой переменной xn+1.

4.            Переход на начало следующей большой итерации.

Замечание:

При добавлении в симплекс-таблицу нового базисного вектора по новой переменной xn+1 мы получаем недопустимое (отрицательное) решение. Для того, чтобы избавиться от недопустимого решения выбираем столбец замещения так, чтобы строкой замещения стала новая добавленная строка по переменной xn+1. Продолжаем пересчет симплекс-таблицы. Если снова получаем дробное решение, то еще вводим дополнительный базисный вектор, и так до получения целочисленного решения. Но следует заметить, что если область допустимых решений очень мала, то она может и не содержать целых значений, это необходимо проверить графически. Если область допустимых решений не содержит целочисленного решения, то в применении метода Гомори нет необходимости, целого решения не будет!

Метод ветвей и границ

Впервые метод ветвей и границ был предложен Лендом и Дойгом [1] в 1960 для решения общей задачи целочисленного линейного программирования. Интерес к этому методу и фактически его “второе рождение” связано с работой Литтла, Мурти, Суини и Кэрела [2], посвященной задаче комивояжера [3]. Начиная с этого момента, появилось большое число работ, посвященных методу ветвей и границ и различным его модификациям. Столь большой успех объясняется тем, что авторы первыми обратили внимание на широту возможностей метода, отметили важность использования специфики задачи и сами воспользовались спецификой задачи коммивояжера.

В основе метода ветвей и границ лежит идея последовательного разбиения множества допустимых решений на подмножества (стратегия “разделяй и властвуй”). На каждом шаге метода элементы разбиения подвергаются проверке для выяснения, содержит данное подмножество оптимальное решение или нет. Проверка осуществляется посредством вычисления оценки снизу для целевой функции на данном подмножестве. Если оценка снизу не меньше рекорда — наилучшего из найденных решений, то подмножество может быть отброшено. Проверяемое подмножество может быть отброшено еще и в том случае, когда в нем удается найти наилучшее решение. Если значение целевой функции на найденном решении меньше рекорда, то происходит смена рекорда. По окончанию работы алгоритма рекорд является результатом его работы.

Если удается отбросить все элементы разбиения, то рекорд — оптимальное решение задачи. В противном случае, из неотброшенных подмножеств выбирается наиболее перспективное (например, с наименьшим значением нижней оценки), и оно подвергается разбиению. Новые подмножества вновь подвергаются проверке и т.д.

Вычисление нижней границы является важнейшим элементом данной схемы. Для простейшей задачи размещения один из способов ее построения состоит в следующем.

Запишем исходную задачу в терминах целочисленного линейного программирования [4].

Введем следующие переменные:

 

 

 

 

 

 

С использованием введенных обозначений простейшая задача размещения записывается следующим образом

yi xij i I,  j J,

xij, yi , yi {0, 1},    iI,  jJ.

Двойственная задача линейного программирования имеет вид:

vj gij + wij,  iI, jJ,

wij 0, iI,  jJ.

Приближенное решение двойственной задачи используется в качестве нижней оценки.

Для сокращения размерности задачи применяется так называемый блок предварительной отбраковки. Он основан на применении условий дополняющей нежесткости для задач линейного программирования

 

Если для оптимального решения двойственной задачи выражение в скобках положительно для некоторого iI , то “скорее всего” в исходной целочисленной задаче yi = 0, и размерность можно уменьшить. Понятно, что данный эвристический прием не всегда приводит к правильному решению. Поэтому в качестве порога лучше брать не 0, а некоторую величину d 0, выбор которой зависит от исходных данных. Эту величину называют порогом отбраковки. Очевидно, что при d max ci, размерность задачи не сокращается.

Другой способ уменьшения трудоемкости алгоритма состоит в искусственном завышении нижней оценки. Предположим, что нас интересует не только оптимальное решение, но и приближенные решения с относительной погрешностью не более e . Тогда завышение нижней оценки в (1 + e ) раз приводит к желаемому результату.