![]() |
|
|
Дипломная работа: Разработка математической модели и ПО для задач составления расписанияИтак, выберем критерий качества составления расписания занятий в виде максимизации взвешенного числа свободных от аудиторной работы дней для всех преподавателей, что при условии фиксированной длины рабочей недели эквивалентно максимальному совокупному уплотнению аудиторной нагрузки. Рассмотрим выражение для величины аудиторной нагрузки в день t преподавателя p:
![]() Вводятся ограничения вида:
где M – произвольное положительное достаточно большое число; Из (10) вытекает, что если С учетом указанного выше содержательного смысла критерия
оптимизации в дополнительных ограничениях (10), а также вводя весовые
коэффициенты статуса преподавателя
Введенная целевая функция не является единственно возможной. Введение других целевых функций не меняет ограничений математической модели и методов решения задачи, но может существенно повлиять на результаты вычислений. 2.2. МЕТОДЫ РЕШЕНИЯ ПОСТАВЛЕННОЙ ЗАДАЧИПоставленная в предыдущем пункте задача максимизации линейной целевой функции при заданной системе ограничений является задачей линейного целочисленного булева программирования, поскольку все коэффициенты ограничений целочисленны в силу дискретности исходных данных задачи; кроме этого искомые переменные математической модели могут принимать только два значения. На данный момент времени существует несколько возможных методов решения такого рода задач. В [3] – [8] описаны методы упорядоченной индексации и модифицированных пометок, основанные на лагранжевой декомпозиции исходной модели на ряд однострочных задач, решаемых соответственно методами упорядочивающей индексации или модифицированных пометок. К сожалению количество операций каждого из методов не допускает полиномиальной оценки; кроме того, размерность таблицы наборов (промежуточных значений) методов резко возрастает при увеличении размерности решаемой задачи, что недопустимо в нашем случае. Возможно, изменение алгоритма декомпозиции под конкретную математическую модель позволит уменьшить размерность таблиц, но пока такого алгоритма не существует. В связи с этим в качестве методов решения были выбраны описанные в [2] модификации симплекс-метода для случая задачи целочисленного линейного программирования. В общем случае количество операций симплекс-метода не допускает полиномиальной оценки (был даже показан класс задач, для которых количество операций составляет O(en)), но для случая нашей задачи среднее число операций допускает полиномиальную оценку: O(n3m1/(n-1)) (n – количество переменных; m – количество ограничений). 2.2.1. ПОЛНОСТЬЮ ЦЕЛОЧИСЛЕННЫЙ АЛГОРИТМЭтот алгоритм назван полностью целочисленным, потому что если исходная таблица состоит из целочисленных элементов, то все таблицы, получающиеся в процессе работы алгоритма, содержат только целочисленные элементы. Подобно двойственному симплекс-методу, алгоритм начинает работать с двойственно допустимой таблицы. Если ai0 (i = 1 ,…, n+m; ai0 – коэффициенты целевой функции) – неотрицательные целые, то задача решена. Если для какой-нибудь строки ai0 Пусть задана задача целочисленного линейного программирования: максимизировать при условиях
![]() Условия (12) могут быть записаны как
Предположим, что для t=0 (т.е. для исходной
таблицы) все aij – целые и столбцы Прежде чем изложить способ получения дополнительного
ограничения из производящей строки, введем новое представление чисел. Пусть [x] обозначает
наибольшее целое число, не превосходящее x. Для любого числа y
(положительного или отрицательного) и положительного
![]() где Вводимое дополнительное неравенство должно выполняться при любом целом решении задачи (12). Рассмотрим некоторое уравнение в t – таблице (опуская индекс строки) с a0
где x – соответствующая компонента вектора
![]()
![]() Подставив выражения (16) и (17) в (15) и переставив члены, получим:
![]() Поскольку
![]() Целочисленная слабая переменная s является
неотрицательной. Действительно, если бы s было отрицательным, т.е.
принимало бы значения -1, -2, …, то
умножение на Рассмотрим два случая
Полученное уравнение
есть не что иное как отсечение Гомори. Для
![]() Уравнение (21) должно выполняться для любого целочисленного
решения задачи (12). Заметим, что если a0 Шаг 0. Начать с двойственно допустимой матрицы A0 в уравнении (13), элементы которой – целые числа (матрица A0 может содержать и нецелые элементы, об этом см. [2], стр. 306). Шаг 1. Среди строк с ai0i0 Шаг 2. Выбрать Эта строка выбирается в качестве ведущей. Шаг 3. Провести шаг двойственного симплекс-метода, вычеркнуть дополнительную строку и вернуться к шагу 1. Доказательство конечности алгоритма см. [2], стр. 303-304. Правило выбора Шаг 0. Пусть строка с номером v является производящей. Шаг 1. Пусть Шаг 2. Для каждого avj Шаг 3. Пусть Шаг 4. Положить Правило выбора Подробнее об алгоритме можно прочитать в [2], стр. 300. 2.2.2 Прямой алгоритм целочисленного программированияТермин “прямой”, примененный к алгоритму целочисленного программирования, обозначает метод, который приводит к оптимальному решению посредством получения последовательно “улучшаемых” решений. Каждой из этих решений допустимо в том смысле, что оно удовлетворяет как линейным ограничениям, так и условию целочисленности. Одним из вероятных достоинств алгоритма является возможность прервать вычисления, до того как получено оптимальное решение, и использовать наилучшее из полученных решений как приближенное. Кроме того, можно использовать прямой алгоритм в соединении с двойственными алгоритмами, чтобы получать различные составные алгоритмы, которые могут переходить от фазы, дающей двойственно допустимые решения, к фазе, дающей прямо допустимые решения. Естественным прецедентом для прямого алгоритма является полностью целочисленный алгоритм Гомори, поскольку в процессе этого алгоритма получается последовательность двойственно допустимых целочисленных решений. Следует напомнить, что полностью целочисленный алгоритм Гомори представляет собой модификацию двойственного симплекс-метода. Основное отличие этого алгоритма состоит в том, что в качестве ведущей строки используется отсечение Гомори с ведущим элементом, равным –1. Это отсечение получается из производящей строки, которая определяется как одна из возможных ведущих строк в двойственном симплекс-методе. Использование такого отсечения в качестве ведущей строки сохранит после итерации двойственную допустимость и целочисленность таблицы. Оказывается, можно аналогично модифицировать симплекс-метод таким образом, чтобы получить алгоритм, который сохраняет прямую допустимость и целочисленность таблиц. Для описания вычислительной процедуры рассмотрим следующую задачу целочисленного программирования: максимизировать
![]() при условиях где a0j, aij и ai0 – целые числа и ai0
![]() ![]() где J – множество индексов небазисных переменных в (22), sk –
новая (базисная) слабая переменная и Заметим, что если положить |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |