
- •3. Симплекс-алгоритм решения задач линейного программирования.
- •4. Метод отыскания опорного решения задачи линейного программирования.
- •13. Расчет кратчайшего пути календарного плана.
- •5. Прямая и двойственная задача линейного программирования.
- •6. Метод ветвей и границ в целочисленном программировании.
- •7. Приведение к стандартной форме транспортной задачи линейного программирования.
- •8. Определение опорного решения в транспортной задаче.
- •9. Оптимизация решения транспортной задачи. При построении таблицы решения транспортной задачи используются:
- •13. Расчет кратчайшего пути календарного плана.
- •10. Определение кратчайшего пути на сетевой модели.
- •12. Определение пропускной способности сети
13. Расчет кратчайшего пути календарного плана.
Сетевое планирование и управление (СПУ) программами включает три основных этапа: структурное планирование, календарное планирование и оперативное управление.
Конечной целью этапа календарного планирования является построение календарного графика, определяющего моменты начала и окончания каждой операции, а также ее взаимосвязи с другими операциями программы. Кроме того, календарный график должен давать возможность выявлять критические операции (с точки зрения времени), которым необходимо уделять особое внимание, чтобы закончить программу в директивный срок. Что касается некритических операций, то календарный план должен позволять определять их резервы времени, которые можно выгодно использовать при задержке выполнения таких операций или с позиций эффективного использования ресурсов.
Календарное
планирование использует граф, в котором
стрелками отражен порядок выполнения
работ (кружочков). На каждой стрелке
написано время выполнения работы.
Критический путь – с максимальным
временем выполнения работ (время, за
которое все работы по любому будут
выполнены). Нахождение критического
пути в 3 этапа:
1 этап: прямой проход от начальной работы до завершающей. Рисуем домики. В первом домике в комнате сразу 0. Далее смотрим смежный кружок 2 c одной входящей стрелкой. В него входит только 1 стрелка, значит в комнату записываем длину этой стрелки – 3. В кружок 3 входит две стрелки – выбираем max{длина входящей стрелки+комната домика кружочка, из которого она выходит} = max{2+0; 3+6}=9. Домик 4 заполняем, проверяя три стрелки: max{3+3; 5; 9+4}=13 – это время раннего начала
2 этап: идем назад, ищем время позднего окончания. Заполняем крыши домиков – смотрим по выходящим стрелкам. Крыша конца (4) = комнате =13. Другая крыша = min{комната на конце выходящей стрелки – длина стрелки}. Крыша 2 = min{13-3; 9-6}=3. Крыша 3 = {13-4}=9 (только одна выходящая стрелка). Крыша 1 = min{3-3; 13-5; 9-2}=0.
3 этап: ищем критический путь. “Подозрительные” домики – если крыша равна комнатке, проверяем стрелки между такими домиками: если комнаты отличаются на длину стрелки, то такая стрелка принадлежит искомому критическому пути. Критические на примере: домик 2 – домик 1 = 3, домик 3 – домик 2 = 6, домик 4 – домик 3 = 4. Значит критический путь: 1-2-3-4. Его длина равна сумме всех стрелок, входящих в него = 3+6+4=13 = комнате домика 4.
5. Прямая и двойственная задача линейного программирования.
Двойственная задача – это вспомогательная задача ЛП, формулируемая с помощью определенных правил непосредственно из условий исходной, или прямой, задачи.
Формулировка двойственной задачи ЛП применима к любой форме представления прямой задачи. В основу такой формулировки положен тот факт, что использование симплекс-метода требует приведения любой задачи ЛП к стандартной форме. Так как все методы вычислений, основанные на соотношениях двойственности, предполагают непосредственное использование симплекс-таблиц, формулировка двойственной задачи в соответствии со стандартной формой прямой задачи представляется достаточно логичной. Как, будет показано ниже, при такой формулировке двойственной задачи автоматически учитываются знаки двойственных переменных, что в других случаях нередко вызывает недоразумения. Обобщенная формулировка двойственной задачи применима ко всем формам прямой задачи.
Прямая задача ЛП в стандартной форме записывается следующим образом:
максимизировать или | z=cjxj |
минимизировать | аij xj=b, i=1,2....m |
при ограничениях | xj>=0, j=1,2....n |
Замечу, что в состав n переменных xj включаются также избыточные и остаточные переменные. Чтобы сформулировать условия двойственной задачи, расположим коэффициенты, фигурирующие в условиях прямой задачи, так, как схематически показано в ТАБЛИЦЕ.
Переменные прямой задачи: х1 х2 ... хj ... xn
C1
|
C2 ... Cj |
... Cn
|
|
a11
|
a12 ... a1j |
... a1n |
b1
|
... |
... ... |
... ... |
... |
am1
|
am2 ... amj |
... amm |
bm
|
j-oe ограничение коэффициенты двойственной задачи целевой функции двойственной задачи.
Коэффициенты при некоторой переменной, фигурирующие в ограничениях прямой задачи, становятся коэффициентами левой части соответствующего ограничения двойственной задачи, а коэффициент, фигурирующий при той же переменной в выражении для целевой функции прямой задачи, становится постоянной правой части этого же ограничения двойственной задачи.
Из указанных правил построения двойственной задачи следует, что она имеет m переменных (y1, y2, ., уm) и n ограничений (соответствующих n переменным прямой задачи xl, x2, ., xn).
Рассмотрим теперь, как формируются остальные условия двойственной задачи: направление оптимизации, ограничения и знаки двойственных переменных. В стандартной формулировке прямой задачи все ограничения записываются в виде равенств (с неотрицательной правой частью), а все переменные неотрицательные. Поэтому существенным различием прямых задач, записанных в стандартной форме, является только направление оптимизации.
Двойственная задача – вспомогательная, которая формируется по определенным правилам из прямой задачи. Если размерность задачи получается меньше, чем обратной, то решение прямой может быть более просто найдено через двойственную задачу.
Кроме того, в то время как в прямой задаче Х≥0, для двойственной задачи отсутствует ограничение на знак переменных.
Двойственная задача получается транспонированием матрицы прямой задачи.
При этом столбец bi прямой задачи станет строкой коэффициентов целевой функции обратной задачи.
Общие правила:
Каждому ограничению прямой задачи соответствует переменная двойственной задачи.
Каждой переменной прямой задачи соответствует ограничение двойственной задачи.
Коэффициенты при переменных в ограничениях прямой задачи становятся коэффициентами левых частей двойственной задачи. А коэффициенты при тех же переменных из целевой функции прямой задачи становятся константами правой части ограничений двойственной задачи.
В двойственной задаче меняется направление экстремума и снимается ограничение на знак переменных.
Удобнее преобразовывать в двойственную задачу, приведенную к стандартному виду (к форме равенств). Тогда: знаки при условиях ограничений двойственной задачи: для min нужно расширять ОДР, поэтому ставим ≥, для max – знак ≤.
Но можно и преобразовывать исходную задачу (с неравенствами). Тогда при транспонировании знаки сменяются на противоположные (≥ на ≤).
max Z = f (x) => min ω = f1 (y)
AX=B => A1Y = B1
X≥0
Затем получившаяся задача решается обычным симплекс-методом.
Решение одной из задач (прямой или обратной) дает одновременно и решение второй. Существуют формулы, связывающие прямую и двойственную задачу.
Для этого:
Обе таблицы приводятся к одинаковой размерности переменных (введением дополнительных переменных в ту из задач, где переменных меньше, и решением задачи на w ‑> min), а затем определяется РАНГ.
РАНГ – количество базисных (не равны 0 коэффициенты целевой функции) переменных: R – для прямой задачи; К – для обратной.
Формулы соответствия решений прямой и обратной задачи:
yi = ZR+i
xi = - ωK+i