- •Курсовой проект
- •Задание на курсовой проект
- •Глава 1. Сетевое планирование 7
- •Глава 1. Сетевое планирование
- •1.1 Понятие сетевого планирования
- •1.2 Основные понятия сетевого планирования
- •1.3 Правила построения сетевых моделей
- •1.4 Направления применения сетевого планирования
- •Глава 2. Методы сетевого планирования
- •2.1. Методы сетевого планирования
- •2.2. Диаграмма Ганта и циклограмма
- •2.2 Метод критического пути (мкп)
- •2.3 Метод имитационного моделирования (метод Монте-Карло)
- •2.4 Метод оценки и пересмотра планов (перт, pert)
- •2.5 Метод графической оценки и анализа (gert)
- •2.6 Дополнительные методы расчета сетевого графика
- •Глава 3. Практическая часть
- •3.1 Постановка задачи
- •3.2 Построение математической модели
- •3.3 Алгоритм решения задачи
- •Модуль Alg.Tpu
- •3.4 Описание пользовательского интерфейса
- •3.5 Анализ данных
- •Заключение
- •Составить обоснованный план выполнения комплекса работ, более эффективно по заданному критерию использовать ресурсы;
- •Проводить многовариантный анализ разных решений с целью улучшения плана; список использованной литературы
- •Приложение а
- •Приложение б
3.2 Построение математической модели
Построение математической модели – это этап формализации проблемы, выражение ее в виде конкретных математических зависимостей и отношений (формулы, функции, уравнения, неравенства и т.д.). На этом этапе сначала определяется основная конструкция математической модели, затем уточняются детали этой конструкции.
Пусть вершины пронумерованы так, что дуга (xi, хj) всегда ориентирована от вершины xt к вершине хj, имеющей больший номер. Для ациклического графа такая нумерация всегда возможна и производится очень легко. При этом начальная вершина получает номер 1, а конечная — номер n.
Присвоим вершине xj пометку l(xj),— равную длине самого длинного пути от 1 до xj, используя для этого соотношения
l(xj) = max [l(xi) + cij]; (*)
Затем присвоим пометку вершине (xj+ 1), применив снова формулу (8.7), и так далее до тех пор, пока последняя вершина п не получит пометку l(п). В соотношении (*) l(1) полагается равным нулю. Если вершина хj помечена, то пометки I(xt) известны для всех вершин xt Г-1 (xj), так как в соответствии со способом нумерации это означает, что xi < xj и, следовательно, вершины xi уже помечены в процессе применения алгоритма.
Пометка l(n) равна длине самого длинного пути от 1 до n. Сами дуги, образующие путь, могут быть найдены обычным способом последовательного возвращения. А именно дуга (xi, xj) принадлежит пути тогда и только тогда, когда l(xj) = I (xi) + cij. Начиная с вершины xj равной n, полагаем на каждом шаге xj равной такой вершине xt (скажем, хi*), для которой выполняется это последнее равенство, и так продолжаем до тех пор, пока не будет достигнута начальная вершина (т. е. пока не будет хi* = 1).
Совершенно очевидно, что пометка l (xj) вершины xj дает длиннейший путь от 1 до хj, т. е. самое раннее возможное начало выполнения этапа, изображаемого вершиной xj. Таким образом, если (хi, xj) — дуга в графе, то I(xi ) — I(xj) — cij (неотрицательная величина, как это видно из (*)) дает самое большое возможное время задержки начала этапа i, не оказывающее влияния на время начала этапа j. Из вышесказанного видно, что если i и j — два последовательные этапа в самом длинном пути, то I (хi) - I (xj) - cij = 0.
3.3 Алгоритм решения задачи
Программа написана на языке Turbo Pascal версии 7.0 Отладка производилась в операционной системе MS Windows ХР на компьютере совместимом с IBM PC с процессором Pentium.
Программа состоит из следующих программных файлов:
kurs.exe – главный файл проекта;
alg.tpu – вычислительный модуль;
graf.txt – текстовый файл, содержащий входные данные (количество вершин графа и матрицу смежности).
Модуль Alg.Tpu
Модуль состоит из шести процедур, четыре из которых доступны пользователю: Smejnost, Svyaznost, Siln_Komponent, BAZ_AND_ABAZ;
Константы:
n0 = 30 – максимальное число вершин обрабатываемого графа.
Типы:
TM – одномерный целочисленный массив максимальной размерностью N0 с элементами от 1 до n0.
TTM – двумерный целочисленный массив максимальной размерностью n0*n0.
Переменные:
n – количество вершин в заданном графе;
A – матрица смежности заданного графа;
R - матрица достижимости;
Q - матрица контрдостижимости;
S – матрица сильной связности;
SK – матрица сильносвязных компонент;
KG – конденсация графа;
BAZ – базы графа;
ABAZ – антибазы графа;
ws – вспомогательная переменная, двумерный массив TTM;
str – вспомогательная переменная, одномерный массив TM:
k – количество сильных компонент;
i, j, l, g – счетчики.
Процедуры:
Procedure Smejnost – Заполнение матрицы смежности из указанного пользователем файла.
Procedure Svyaznost – Построение матрицы достижимости по матрице смежности, а также контрдостижимости и связности графа.
Procedure Siln_Komponent – Поиск сильных компонент.
Procedure BAZ_AND_ABAZ – Построение конденсации графа, поиск баз и антибаз заданного графа.
Procedure Poisk(var m: TTM) – Выполняет посик следующего элемента базы или интибазы. Вызывается процедурой BAZ_AND_ABAZ.
Procedure Vivod(x:integer) – Процедура рекурсия. Завершает поиск следующего элемента базы или антибазы. Вызывается процедурой Poisk.