Сетевой анализ проектов. Метод PERT

Автор работы: Пользователь скрыл имя, 10 Декабря 2013 в 21:20, курсовая работа

Описание работы

60 лет назад, задача о максимальном потоке решалась simplex методом линейного программирования, что было крайне не эффективно. Форд и Фалкресон предложили рассматривать для решения этой задачи ориентированную сеть и искать решение с помощью итерационного алгоритма. В течение 20 лет, все передовые достижения в исследовании данной задачи базировались на их методе. В 1970г. наш соотечественник, Диниц, предложил решать задачу с использованием вспомогательных бесконтурных сетей и псевдомаксимальных потоков, что намного увеличило быстродействие разрабатываемых алгоритмов. А в 1974 Карзанов улучшил метод Диница, введя такое понятие как предпоток.

Содержание работы

Введение
Задание
постановка задачи
формирование математической модели
Метод решения
Анализ и исследование результата
Выводы
Использованная литература
Текст программы с комментариями

Файлы: 1 файл

курсовой ММОСАПР.docx

— 38.97 Кб (Скачать файл)

Xt1 = CSng(Text1(25).Text) 'работа X

Yt1 = CSng(Text1(24).Text) 'работа Y

St1 = CSng(Text1(23).Text) 'работа S

Nt1 = CSng(Text1(22).Text) 'работа N

Ct1 = CSng(Text1(21).Text) 'работа C

Dt1 = CSng(Text1(20).Text) 'работа D

Rt1 = CSng(Text1(19).Text) 'работа R

Qt1 = CSng(Text1(18).Text) 'работа Q

Kt1 = CSng(Text1(17).Text) 'работа K

Lt1 = CSng(Text1(16).Text) 'работа L

At1 = CSng(Text1(15).Text) 'работа A

Bt1 = CSng(Text3.Text) 'работа B

'вычисляем значение tожидания для каждой работы

TOV = (3 * At0 + 2 * At1) / 5 'работа V

TOW = (3 * Bt0 + 2 * Bt1) / 5 'работа W

TOZ = (3 * Ct0 + 2 * Ct1) / 5 'работа Z

TOU = (3 * Dt0 + 2 * Dt1) / 5 'работа U

TOX = (3 * Et0 + 2 * Et1) / 5 'работа X

TOY = (3 * Ft0 + 2 * Ft1) / 5 'работа Y

TOS = (3 * Gt0 + 2 * Gt1) / 5 'работа S

TON = (3 * Ht0 + 2 * Ht1) / 5 'работа N

TOC = (3 * It0 + 2 * It1) / 5 'работа C

TOD = (3 * Jt0 + 2 * Jt1) / 5 'работа D

TOR = (3 * Pt0 + 2 * Pt1) / 5 'работа R

TOQ = (3 * Qt0 + 2 * Qt1) / 5 'работа Q

TOK = (3 * Kt0 + 2 * Kt1) / 5 'работа K

TOL = (3 * Lt0 + 2 * Lt1) / 5 'работа L

TOA = (3 * Mt0 + 2 * Mt1) / 5 'работа A

TOB = (3 * Bt0 + 2 * Bt1) / 5 'работа B

'вывод на экран значения tожидания для каждой из работ

Text1(14).Text = TOV 'работа V

Text1(11).Text = TOW 'работа W

Text1(10).Text = TOZ 'работа Z

Text1(9).Text = TOU 'работа U

Text1(8).Text = TOX 'работа X

Text1(7).Text = TOY 'работа Y

Text1(6).Text = TOS 'работа S

Text1(5).Text = TON 'работа N

Text1(4).Text = TOC 'работа C

Text1(3).Text = TOD 'работа D

Text1(55).Text = TOR 'работа R

Text1(54).Text = TOQ 'работа Q

Text1(53).Text = TOK 'работа K

Text1(52).Text = TOL 'работа L

Text1(51).Text = TOA 'работа A

Text4.Text = TOB 'работа B

'блок ранжирования

'обозначаем узлы графа через  переменные и присваиваем им  значение 0

H0 = 0

HA = 0

HB = 0

HC = 0

HD = 0

HE = 0

HF = 0

HG = 0

HH = 0

HI = 0

HK = 0

'цикл ранжирования

Y0 = 1 'значение дуги графа

For i = 1 To 100 'номер шага в алгоритме

'вычисляем ранг каждой из  вершин.

HA = H0 + Y0

HB = HA + Y0

HC = Max(HB + Y0, HD + Y0)

HD = Max(HA + Y0, HE + Y0)

HE = H0 + Y0

HF = Max(HC + Y0, HE + Y0, HI + Y0)

HG = H0 + Y0

HH = Max(HE + Y0, HG + Y0)

HI = Max(HH + Y0, HK + Y0)

HK = HG + Y0

Next i

'заносим в массив w значения рангов каждой вершины графа

w(0) = H0

w(1) = HA

w(2) = HB

w(3) = HC

w(4) = HD

w(5) = HE

w(6) = HF

w(7) = HG

w(8) = HH

w(9) = HI

w(10) = HK

'алгоритм, позволяющий выстроить  все вершины в порядке возростания в зависимости от его ранга

k = 1 'начальный ранг = 1

i = 1

For k = 1 To 10 'цикл, который будет менять значение k(искомый ранг) на 1

For i = 1 To 10

If w(i) = k Then 'если i-ый элемент массива равен рангу, то

z = z + 1 'переменную Z увеличиваем на 1

v(i) = z 'заносим в массив V переменную Z. она выступает в роли порядкового номера вершины

End If

Next i

'как только все элементы проверены(все элементы с рангом K), ранг увеличивается на единицу (строчка ниже)

Next k

'в результате выполнения данного  цикла получаем массив V в котором находятся порядковые номера всех вершин

'каждая вершина графа принимает  правильный порядковый номер

Label1 = v(1) 'вершина A

Label2 = v(2) 'вершина B

Label48 = v(3) 'вершина C

Label35 = v(4) 'вершина D

Label42 = v(5) 'вершина E

Label47 = v(6) 'вершина F

Label43 = v(7) 'вершина G

Label44 = v(8) 'вершина H

Label46 = v(9) 'вершина I

Label45 = v(10) 'вершина K

'конец блока ранжирования

'блок поиска значения критического  пути

'обнуляем значение всех вершин  графа

H0 = 0

HA = 0

HB = 0

HC = 0

HD = 0

HE = 0

HF = 0

HG = 0

HH = 0

HI = 0

HK = 0

 

k = 1 'ранг

'цикл предназначен для того, что бы посчитать пути до  вершин в правильном порядке  (от меньшего ранга к большему)

For k = 1 To 10 'в этом цикле будет менятся ранг вершины

If w(1) = k Then 'если первый элемент массива (в котором находятся значения ранга) равна рангу k

HA = H0 + TOV 'то находим путь до  вершины A

End If

'аналогично для всех остальных  вершин

If w(2) = k Then

HB = HA + TOW

End If

If w(3) = k Then

HC = Max(HB + TOZ, HD + TOY)

End If

If w(4) = k Then

HD = Max(HA + TOX, HE + TON)

End If

If w(5) = k Then

HE = H0 + TOS

End If

If w(6) = k Then

HF = Max(HC + TOU, HE + TOD, HI + TOK)

End If

If w(7) = k Then

HG = H0 + TOC

End If

If w(8) = k Then

HH = Max(HG + TOA, HE + TOR)

End If

If w(9) = k Then

HI = Max(HH + TOQ, HK + TOB)

End If

If w(10) = k Then

HK = HG + TOL

End If

Next k

TK = Max(HA, HB, HC, HD, HE, HF, HG, HH, HI, HK) 'находим максимальный путь до какой-либо вершины графа. это и будет значение критического пути

'конец блока поиска значения критического пути

'расчет дисперсии^2 для каждой  работы по формуле ((t1-t0))^2

DV = ((Vt1 - Vt0) / 5) ^ 2

DW = ((Wt1 - Wt0) / 5) ^ 2

DZ = ((Zt1 - Zt0) / 5) ^ 2

DU = ((Ut1 - Ut0) / 5) ^ 2

DX = ((Xt1 - Xt0) / 5) ^ 2

DY = ((Yt1 - Yt0) / 5) ^ 2

DS = ((St1 - St0) / 5) ^ 2

DN = ((Nt1 - Nt0) / 5) ^ 2

DC = ((Ct1 - Ct0) / 5) ^ 2

DD = ((Dt1 - Dt0) / 5) ^ 2

DR = ((Rt1 - Rt0) / 5) ^ 2

DQ = ((Qt1 - Qt0) / 5) ^ 2

DK = ((Kt1 - Kt0) / 5) ^ 2

DL = ((Lt1 - Lt0) / 5) ^ 2

DA = ((At1 - At0) / 5) ^ 2

DB = ((Bt1 - Bt0) / 5) ^ 2

'сравниваем значения времени  каждого пути со значением  времни полученного критического пути ТК

'если значения совпадают,то

 

'1) сравниваем значение дисперсии  пути со значением дисперсии  для критического пути, полученного  ранее

'2) выбирается минимальное значение  дисперсии

 

D1 = 100000000 'задаем очень большое  значение дисперсии, которые практически  не недостижимо

 

'для пути (0-A-B-C-F)

TK1 = TOV + TOW + TOZ + TOU

If TK1 = TK Then

D = (DV + DW + DZ + DU) ^ (1 / 2)

 

If D < D1 Then

D1 = D

End If

End If

 

'для пути (0-A-D-C-F)

TK1 = TOV + TOX + TOY + TOU

If TK1 = TK Then

 

D = (DV + DX + DY + DU) ^ (1 / 2)

If D < D1 Then

D1 = D

End If

End If

 

'для пути (0-E-D-C-F)

TK1 = TOS + TON + TOY + TOU

If TK1 = TK Then

D = (DS + DN + DY + DU) ^ (1 / 2)

 

If D < D1 Then

D1 = D

End If

End If

 

'для пути (0-E-F)

TK1 = TOS + TOD

If TK1 = TK Then

D = (DS + DD) ^ (1 / 2)

 

If D < D1 Then

D1 = D

End If

End If

 

'для пути (0-E-H-I-F)

TK1 = TOS + TOR + TOQ + TOK

If TK1 = TK Then

 

D = (DS + DR + DQ + DK) ^ (1 / 2)

If D < D1 Then

D1 = D

End If

End If

 

'для пути (0-G-H-I-F)

TK1 = TOC + TOA + TOQ + TOK

If TK1 = TK Then

 

D = (DC + DA + DQ + DK) ^ (1 / 2)

If D < D1 Then

D1 = D

End If

End If

 

'для пути (0-G-K-I-F)

TK1 = TOC + TOL + TOB + TOK

If TK1 = TK Then

 

D = (DC + DL + DB + DK) ^ (1 / 2)

If D < D1 Then

D1 = D

End If

End If

Label37 = TK 'вывод значения критического  пути

Label39 = D1 ' вывод значение дисперсии

Tv = 1.18 * D1 + TK 'расчет значения времени выполнения проекта при вероятности 0,88

Label41 = Tv 'вывод значение времени выполнения проекта при вероятности, равной 0,88

 

End Sub

 


Информация о работе Сетевой анализ проектов. Метод PERT