Целочисленное программирование

Задачи целочисленного программирования. Рекомендации по формулировке и решению. Метод Гомори: решение задачи линейного программирования без учета условий целочисленности. Метод ветвей и границ. Циклический алгоритм целочисленного программирования.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 27.03.2012
Размер файла 38,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

1. Целочисленное программирование. Основные понятия

При рассмотрении целого ряда задач финансового менеджмента и бизнеса необходимо учитывать требование целочисленности используемых переменных. Такие задачи называются задачами целочисленного программирования.

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

Рекомендации по формулировке и решению ЦП

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

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

3. Если нет острой необходимости в нахождении точного оптимального целочисленного решения, отличающегося от непрерывного решения, например, 3%. Тогда реализацию метода ветвей и границ для задачи максимизации можно заканчивать, если отношение разницы между верхней и нижней границ к верхней границы меньше 0,03.

Метод ветвей и границ можно применять для решения задач нелинейного программирования.

2. Метод Гомори

Задача целочисленного программирования может быть сформулирована следующим образом: найти максимум или минимум функции при условиях Xj > 0, j = 1, 2,…, n, а также при дополнительном условии хj - целые числа.

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

Для решения задач целочисленного программирования разработаны специальные методы. К ним относятся метод отсечений (метод Гомори) и метод ветвей и границ.

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

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

На шаге 2 решения задачи без ограничения целочисленности получаем оптимальный нецелочисленный план

X = (0, 0, 29/7, 13/7).

Поскольку обе базисные координаты X нецелочисленны, выбираем любую - первую или вторую - строку таблицы на шаге 2, а именно вторую, и строим добавочное ограничение

-5/7x1-6/7x2-1/7x5+x6=-6/7.

Вводя ограничение добавочной строкой на шаге 2, находим направляющий элемент в этой строке:

Осуществляя преобразование табл. 7.2 с направляющим элементом (-5/7), получаем на шаге 3 оптимальный план новой задачи, снова нецелочисленный. На шаге 3 добавляем очередное условие, получаем четыре строки ограничений. Поскольку на шаге 3 достигается

в столбце А6, то х6 становится базисной переменной на шаге 4. В соответствии с правилом сокращения таблицы на шаге 4 вычеркиваем строку и столбец, соответствующие х6, добавляем новую строку, а на шаге 5 получаем псевдоплан X = (4, 0, 3, -1). Методом последовательного уточнения оценок на шаге 6 получаем план, но нецелочисленный. Оптимальный целочисленный план получаем лишь на шаге 7: X* = (О, 1, 4, 2), max Z(X)=-6.

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

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

f(X) -> max,

Х€D

где D - конечное множество.

Сначала найдем оценку Ј(D) (границу) функции f(X), X е D: f(X) = Ј(D) для V X е D. Если для некоторого плана Х° задачи (7.9) - (7.10) справедливо равенствоf(X0) = Ј(D), то Х° = X* является решением задачи. Если указанное условие не выполняется, то возможно разбиение (ветвление) множества D на конечное число непересекающихся подмножеств D1i: ?D1i. = D, ?D1i = ?, и вычисление оценки Ј(D1i) (границ), 1?i?m.

Если для некоторого плана X1i е Di1, 1 ? / ? m выполняется условие f(Xkl)= Ј(D1k)= Ј(D1i), 1?i?m то Xk1=X* является оптимальным планом (решением) задачи (7.9) - (7.10).

Если такого плана нет, то выбирается подмножество Dkl с наибольшей оценкой Ј(D1i): и разбивается на конечное число непересекающихся подмножеств D2kj: UD2kj=D1k, ?D2kj=?. Для каждого подмножества находится оценка Ј(D2kj), 1?j?n.

Если при этом найдется план X2j е D2kJ, 1 ?j ?n, такой, что f(X2r)= Ј(D2kr)= Ј(D2kj), 1?j?n, то X2r= X* является решением задачи (7.9) - (7.10). Если такого плана нет, то процедуру ветвления осуществляют для множества D2kj с наибольшей оценкой Ј(D2kj), 1?j?n. Способ ветвления определяется спецификой конкретной задачи.

Рассмотрим задачу, которую можно свести к задаче целочисленного линейного программирования.

Алгоритм метода ветвей и границ

1. Находим решение задачи линейного программирования без учета целочисленности.

2. Составляет дополнительные ограничения на дробную компоненту плана.

3. Находим решение двух задач с ограничениями на компоненту.

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

4. Циклический алгоритм целочисленного программирования

целочисленный гомори линейный программирование

Рассмотрим следующую задачу линейного программирования:

Максимизировать

X0=a00-a01x1-a02x2-……..-a0nxn,

при условии

xn+1=an+1,0-an+1,1x1-an+1,2x2-…….-an+1,nxn,

xn+m=an+m,0 - an+m,1x1-an+m,2x2-…….-an+m,nxn,

xj?0 (j=1,……., n+1,……., n+m).

Заметим, что xn+1., хn+m - слабые переменные, a x1…., хn - исходные переменные задачи (1). Если наряду с ограничениями (1) потребовать, чтобы все хj, (j'=1,…, т) были целыми, то задача будет называться задачей целочисленного программирования. Существует большое количество задач, особенно комбинаторных, которые можно сформулировать как задачи целочисленного программирования.

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

Как только это будет сделано, можно решать модифицированную задачу линейного программирования любым обычным методом, и полученное базисное оптимальное решение автоматически будет целочисленным. Представленный ниже целочисленный алгоритм обладает следующими свойствами: 1) все дополнительные ограничения сохраняют допустимые точки исходной целочисленной задачи; 2) за конечное число шагов создается достаточное количество дополнительных ограничений для того, чтобы оптимальное решение модифицированной задачи было целочисленным; 3) дополнительные ограничения (гиперплоскости) проходят по крайней мере через одну целочисленную точку, хотя и не обязательно находящуюся внутри выпуклой оболочки; 4) каждое новое ограничение сокращает область допустимых решений исходной задачи целочисленного программирования. Следует подчеркнуть, что оптимальное решение исходной задачи может быть получено прежде, чем допустимая область сократится до размеров выпуклой оболочки. К тому же, поскольку оптимальное целочисленное решение определяется пересечением п гиперплоскостей, таких гиперплоскостей существует не более, чем это необходимо; некоторые из них могут быть ограничениями исходной задачи.

Обычно в ограничения задачи (1) включаются в тривиальные соотношения xj= - (-Xj) (j'=1,…, n), а задача в матричной форме принимает вид

х = А (-хn), (2)

где х - вектор-столбец с компонентами Х0, x1,…, xn, xn+1,…, xn+m А - соответствующая матрица размера (п + т + 1) * (n + 1) и (-хn) - вектор с компонентами (1, - x1, - x2,…, - xn), представляющими собой небазисные переменные исходной таблицы. Задачу целочисленного программирования также можно записать в виде таблицы.

Причины представления переменных в виде (-x1), (-x2,……, (-xn)) - чисто исторические, но это стало обычной практикой в целочисленном программировании. Будем использовать бj(j = 0, 1,…, п) для обозначения j-го столбца текущей таблицы и aij (i = 0, 1,…, п + т; j = 0, 1,…, n) для обозначения элемента 1-й строки и 7-го столбца таблицы. Предполагается, что все a, ij в исходной таблице целые. Следовательно, все слабые переменные xn+1,…, Хn+m должны быть также неотрицательными целыми числами.

При изложении алгоритма для решения целочисленных задач будем следовать работе Гомори. Вначале задача целочисленного программирования рассматривается как линейная программа и алгоритм решает ее с помощью прямого или двойственного симплекс-метода. В конце работы алгоритма аij?0 (i = 1,……, п + т) и a0j? 0 (j' = 1,…, n). (Для получения исходного двойственного допустимого решения введем дополнительное ограничение xn+m+1 == М - X1 - x2 - … - xn? 0, где M - достаточно большая константа, и проделаем одну итерацию с этой строкой и лексикографически минимальным столбцом в качестве ведущего.) Если аi0? 0 и целые для всех i, то получено оптимальное решение целочисленной задачи. В этом случае решение получается сразу, без использования ограничений целочисленности. Если аi0? 0, но не все целые, добавим к ограничениям (1) еще одно. Новое ограничение записывается внизу таблицы так, чтобы она перестала быть прямо допустимой, т.е. аi0<О для i == п + т + 1. Затем используется двойственный симплекс-метод с целью сделать все аi0? 0. Если аi0 получаются нецелыми, в таблицу добавляются новые ограничения до тех пор, пока аi0 (i = 1,…, n,…, n + m) не станут все целыми и неотрицательными.

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

Каждый раз после проведения итерации симплекс-метода происходит изменение множества небазисных переменных. Таблица также меняется. Будем использовать t для обозначения t-й. таблицы. Матричное уравнение (2) запишется как

Хt = Аt (-хtn),

где х° - вектор-столбец с n + т + 1 компонентами, А° - матрица размера (п + т + 1)*(n + 1) и (-х0n) - вектор с компонентами (1, - x1,…, - xn), представляющими собой текущие небазисные переменные, взятые со знаком минус. Если в матрице А а0i?0 (j = 1,…, n), а00 ? 0 (mod 1) 1} и аi0 ? 0 (i=1,…, п+т) - целые неотрицательные числа, то получено оптимальное решение целочисленной задачи. Если аi0 не все целые, введем дополнительное ограничение. Рассмотрим такое уравнение из (3), в котором аi0m нецелое. Опуская индексы строки, имеем

(4) x=a0+?aj(-xj)

где xj в правой части - текущие небазисные переменные и a0 - нецелое. Поскольку требуется, чтобы х было целым, или х ?0 (mod1), правая часть уравнения (4) также должна удовлетворять условию

0?a0+?aj(-xj) (mod1).

Это условие должно выполняться при допустимом целочисленном решении. Поскольку требуется, чтобы xj, были целыми, можно алгебраически складывать с отношения 0?f0+?jfi(-xi) (mod1) (0<f0<1, 0?fj<1).

Размещено на Allbest.ru


Подобные документы

  • Реализация алгоритма Гомори на языке программирования Object Pascal при использовании среды разработки Borland Delphi 7. Рассмотрение основных способов компьютерного осуществления решения задач целочисленного программирования симплексным методом.

    курсовая работа [1,8 M], добавлен 28.03.2013

  • Основные способы решения задач целочисленного программирования: округление решений до целого, метод полного перебора, применение оптимизационных алгоритмов. Алгоритм метода ветвей и границ. Пример с оптимизацией побочного производства лесничества.

    презентация [323,6 K], добавлен 30.10.2013

  • Оптимальный план прямой задачи графическим, симплекс-методом. План двойственной задачи по первой теореме двойственности. Определение целочисленного решения графическим, методом Гомори. Сравнение значений функций целочисленного и нецелочисленного решений.

    задача [128,9 K], добавлен 29.12.2013

  • Особенности метода ветвей и границ как одного из распространенных методов решения целочисленных задач. Декомпозиция задачи линейного программирования в алгоритме метода ветвей и границ. Графический, симплекс-метод решения задач линейного программирования.

    курсовая работа [4,0 M], добавлен 05.03.2012

  • Математическое программирование. Линейное программирование. Задачи линейного программирования. Графический метод решения задачи линейного программирования. Экономическая постановка задачи линейного программирования. Построение математической модели.

    курсовая работа [581,5 K], добавлен 13.10.2008

  • Алгоритм решения задач линейного программирования симплекс-методом. Построение математической модели задачи линейного программирования. Решение задачи линейного программирования в Excel. Нахождение прибыли и оптимального плана выпуска продукции.

    курсовая работа [1,1 M], добавлен 21.03.2012

  • Общее понятие и характеристика задачи линейного программирования. Решение транспортной задачи с помощью программы MS Excel. Рекомендации по решению задач оптимизации с помощью надстройки "Поиск решения". Двойственная задача линейного программирования.

    дипломная работа [2,4 M], добавлен 20.11.2010

  • Постановка линейной целочисленной задачи. Метод отсекающих плоскостей. Дробный алгоритм решения полностью целочисленных задач. Эффективность отсечения Гомори. Сравнение вычислительных возможностей метода отсекающих плоскостей и метода ветвей и границ.

    курсовая работа [178,2 K], добавлен 25.11.2011

  • Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.

    курсовая работа [132,0 K], добавлен 09.12.2008

  • Решение задачи линейного программирования графическим методом, его проверка в MS Excel. Анализ внутренней структуры решения задачи в программе. Оптимизация плана производства. Решение задачи симплекс-методом. Многоканальная система массового обслуживания.

    контрольная работа [2,0 M], добавлен 02.05.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.