Pesquisa Operacional - PEOP

AULA 3: PERT/CPM

Profa. Luciane Alcoforado

Academia da Força Aérea

Objetivos

Verifique ao final desta aula se você é capaz de:

1- elaborar a rede de um projeto (Ap); 2- realizar a programação do projeto (Ap); 3- elaborar o cronograma do projeto (Ap);

Roteiro da Aula

  • Gabarito dos exercícios
  • Elaboração da rede do projeto (continuação)
  • Programação/cronograma do projeto
  • Discussões
  • Exercícios Propostos

Gabarito para conferência

Exercício 1

flowchart LR
    1(("1
    ")) -->|A,2| 2(("2
    "))
    2 -->|"B ,4"| 3(("3
    "))
    3 -->|"C ,10"| 4(("4
    "))
    4 -->|"D ,6"| 5(("5
    "))
    4 -->|"E ,4"| 6(("6
    "))
    
    5 -->|"G ,7"| 7(("7
    "))
    6 -.->|"0"| 7
    7 -->|"H ,9"| 8(("8
    "))
    6 -->|"F ,5"| 8
    4 -->|"I ,7"| 8
    

Exercício 2

flowchart LR
1 -->|"C ,2"| 4(("4
    "))
     4 -->|"H,3"| 5(("5
    "))
     1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"D ,4"| 3(("3
    "))
    2 -->|"E ,2"| 4(("4
    "))
    2 -->|"F ,7"| 5(("5
    "))  
    1 -->|"B ,6"| 3(("3
    "))
    3 -->|"G,4"| 5(("5
    "))
   

Exercício 3

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"B ,2"| 3(("3
    "))
 2 -->|"C ,3"| 4(("4
    "))
    4 -.->|"0"| 3(("3
    "))
     4 -->|"E,3"| 5(("5
    "))
     4 -->|"H,2"| 6(("6
    "))
     3 -->|"F,5"| 6(("6
    "))
     3 -->|"D,7"| 5(("5
    "))
    
     5 -->|"G,6"| 6(("6
    "))

Atividades Fantasmas na rede PERT/CPM

  • São elementos cruciais na representação da rede, mantendo a condição de unicidade de atividades entre eventos consecutivos. São representadas por setas tracejadas e não consomem tempo e nem recursos.

graph LR
  1((1)) -->|A| 2((2))
  2 -.->|Atividade Fantasma| 3((3))
  1 -->|B| 3

Note que A e B iniciam no evento 1 e finalizam no evento 3, entre os eventos 2 e 3 há uma atividade fantasma, que na prática não existe mas garante a unicidade dos eventos para as atividades paralelas.

  • Não envolvem trabalho real, mas são inseridas na rede para representar dependências lógicas entre atividades.

Exemplo prático

Considere um projeto com 4 atividades, A e B iniciam juntas. C é precedida por A e B e D é precedida por C.

graph LR
  1((1)) -->|A| 2((2))
  2 -.->|Atividade Fantasma| 3((3))
  1 -->|B|3
  3 -->|C| 4((4))
  4 -->|D| 5((5))

Note que A e B iniciam no evento 1 e terminam no evento 3, a unicidade de eventos é garantida com a inclusão da atividade fantasma.

A é representada pelos eventos 1-2 e B pelos eventos 1-3, o evento 3 marca o término conjunto das duas atividades.

Erros na Construção da Rede

Observar que:

1- NÃO pode haver ciclos na rede pois uma atividade não pode ser precedente de si mesma. Exemplo de erro:

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"B ,2"| 3(("3
    "))
 3 -->|"C ,3"| 1(("1
    "))

2- NÃO pode haver duas atividades distintas entre dois eventos consecutivos.

Exemplo de erro:

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"B ,2"| 2(("2
    "))
 2 -->|"C ,3"| 3(("3
    "))

O correto:

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"B ,2"| 3(("3
    "))
 2 -.-> 3
 3 --> |"C ,3"| 4(("4
    "))

Erros na Construção da Rede

3- NÃO pode haver omissão de uma atividade existente. Exemplo de erro, falta atividade C. Exemplo de erro:

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"B ,2"| 3(("2
    "))
 2 -->|"D ,3"| 3(("3
    "))

4- NÃO pode ter interdependência inexistente. Exemplo: B inicia junto com A e C mas a rede apresenta B iniciando depois que A termina.

Exemplo de erro: duração de 5 dias

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"B ,2"| 3(("3
    "))
 1 -->|"C ,3"| 3(("3
    "))

O correto: duração de 3 dias

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"C ,3"| 3(("4
    "))
 2 -.-> 3
 1 --> |"B ,2"| 4(("3
    "))
  4 -.-> 3

Erros na Construção da Rede

5- Falhar ao NÃO demonstrar relação de dependência entre atividades. Exemplo: B é precedido por A, no entanto esse dependência não está na rede.

Exemplo de erro: duração de 6 dias

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"B ,4"| 3(("3
    "))
 2 -->|"C ,3"| 3(("3
    "))

O correto: duração de 7 dias

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"C ,3"| 3(("4
    "))
 
 2 --> |"B ,4"| 4(("3
    "))
  4 -.-> 3

6- Falhar ao NÃO demonstrar relação de interdependência entre atividades. Exemplo: A e B iniciam juntas, C é precedida por A, D é precedida por B e E é precedida por A e B.

Exemplo de erro: duração de 10 dias

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"B ,2"| 3(("3
    "))
 2 -->|"C ,3"| 3
3 -->|"D ,3"| 4(("4
    "))
4 -->|"E ,1"| 5(("5
    "))

O correto: duração de 6 dias

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    1 -->|"B ,2"| 3(("3
    "))
 2 -->|"C ,3"| 5

4(("4
    ")) -->|"E ,1"| 5(("5
    "))
  3 -->|"D ,3"| 5
  2 -.-> 4
  3 -.-> 4

Erros na Construção da Rede

7- Inclusão desnecessária de atividades fictícias. Exemplo: C é precedida por A, no entanto há uma atividade fantasma desnecessária forçando uma precedência de B inexistente.

Exemplo de erro: duração de 11 dias

flowchart LR
    1 --->|"B ,8"| 3(("3
    "))
 3 -.->|"0"| 2(("2
    "))
     1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"C ,3"| 4(("4
    "))

O correto: duração de 8 dias

flowchart LR
    1 --->|"B ,8"| 3(("3
    "))
    1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"C ,3"| 3

Erros na Construção da Rede

8- Erros na enumeração dos eventos, evento final indefinido.

Exemplo de erro: duração indefinida

flowchart LR
    1 --->|"B ,8"| 3(("3
    "))
    1(("1
    ")) -->|A,3| 6(("6
    "))
    6 -->|"C ,3"| 5(("5
    "))
    6 -->|"D ,6"| 8(("8
    "))

O correto: duração de 9 dias

flowchart LR
    1 --->|"B ,8"| 3(("3
    "))
    1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"C ,3"| 3
    2 -->|"D ,6"| 4(("4
    "))
    4-.->3

Todo projeto deve ter um único evento de início e de fim!

Atividades Fantasmas

Atividades fantasmas ou fictícias são artifícios utilizados para facilitar a representação gráfica do projeto mantendo a condição de unicidade de atividades entre eventos consecutivos.

Podem ser de 4 tipos:

  • De interdependência;
  • De codificação;
  • De Comunicação;
  • De integração

Atividade Fantasma de Interdependência

Este tipo de atividade fantasma surge da necessidade de representar, graficamente, uma interdependência que altera a lógica do projeto. Neste caso, uma atividade é dependente de duas ou mais atividades que lhes são predecessoras.

Exemplo: Considere 4 atividades em que A e B iniciam no evento 1, C é precedida por A e D é precedida por A e B (interdependência).

Maneira Incorreta:

flowchart LR
    1 --->|"B"| 2(("3
    "))
    1(("1
    ")) -->|A| 3(("2
    "))
    3 -->|"C"| 2(("3
    "))
    2 -->|"D"| 4(("4
    "))

Maneira correta:

flowchart LR
    1 --->|"B"| 2(("3
    "))
    1(("1
    ")) -->|A| 3(("2
    "))
    3 -.->|"0"| 2(("3
    "))
    3 -->|"C"| 4(("4
    "))
    2 -->|"D"| 4
    

Atividade Fantasma de Codificação

A atividade fantasma de codificação serve para garantir a unicidade de atividades paralelas ou seja, atividades com parte ou o total do seu tempo de execução realizado simultaneamente com outra atividade e, cujos eventos de início e de fim sejam os mesmos.

Exemplo: Considere A e B atividades com mesmo evento de início e de fim.

Maneira Incorreta:

flowchart LR
    1 --->|"B"| 2(("2
    "))
    1(("1
    ")) -->|A| 2(("2
    "))

Maneiras corretas:

flowchart LR
    1 --->|"A"| 2(("2
    "))
    1(("1
    ")) -->|B| 3(("3
    "))
    3 -.->|"0"| 2(("2
    "))
    

flowchart LR
    1(("1
    ")) --->|"A"| 2(("2
    "))
    3(("3
    ")) -->|B| 2(("2
    "))
    1 -.->|"0"| 3(("3
    "))
    

Atividade Fantasma de comunicação

A atividade fantasma de comunicação não expressa relação de interdependência entre atividades. Ela é utilizada com objetivo eminentemente gerencial e visa facilitar o processo de comunicação e garantir que duas ou mais atividades estejam concluídas em um mesmo evento predeterminado. Servem, pois, para apurar o processo de controle, correlacionando datas desejadas.

Ex: Considere dois blocos de atividades A1,A2 e A3 sendo atividades do bloco 1 e B1, B2 atividades do bloco 2. Suponha que o gerente do projeto deseje garantir/verificar que as atividades A2 e B1 estejam finalizadas para dar prosseguimento a B2, sem que haja uma dependência direta de B2 com A2.

Maneira correta:

flowchart LR
    1(("1
    "))--->|"A1"| 2(("2
    "))
    2(("2
    ")) -->|A2| 3(("3
    "))
    3 -->|"A3"| 4(("4
    "))
    5(("5
    ")) --->|"B1"| 6(("6
    "))
    1 --> |B0|5
    6(("6
    ")) -->|B2| 7(("7
    "))
    3 -.->|"Comunicação, 0"| 6(("6
    "))
    4 -->|A4| 7
    

Atividade Fantasma de integração

A atividade fantasma de integração tem por objetivo correlacionar redes elaboradas independentemente em uma rede única fazendo com que a rede unificada disponha de mesmos eventos de inicio e fim.

flowchart LR
0(("Inicio")) -.->1
0(("Inicio")) -.->5
    1(("1
    "))-->|"A1"| 2(("2
    "))
    2(("2
    ")) -->|A2| 3(("3
    "))
    3 -->|"A3"| 4(("4
    "))
    5(("5
    ")) --->|"B1"| 6(("6
    "))
    6(("6
    ")) -->|B2| 7(("7
    "))
    7 -.->8(("FIM"))
4 -.->8(("FIM"))
    

Programação de um projeto

Objetiva principalmente a construção de um cronograma que apresente as datas de início e término de cada atividade.

Deve destacar as atividades críticas (do ponto de vista do tempo de execução), as quais requerem atenção especial para que o projeto não atrase.

Deve mostrar a folga disponível para as atividades não-críticas do projeto, pois elas podem ter sua execução retardada ou adiantada, variando de acordo com as disponibilidades de recursos.

Cedo e Tarde de cada evento

flowchart LR
    A(("i 
    (Ci,Ti)"))-->|"(Atividade, duração)"| B(("j 
    (Cj,Tj)"))

\(C_i\): é o cedo do evento i. Corresponde à data mais cedo, contada a partir do início do projeto, para dar início à execução das atividades que emanam deste evento considerando-se que todas as atividades que nele chegam não sofram atrasos na execução.

\(T_i\): é o tarde do evento i. Corresponde à data mais tarde possível para atingir o evento sem que o projeto sofra atrasos.

\(d_{ij}\) é a duração da atividade (ij)

\(td_{ij}\): é o tempo disponível da atividade (ij). \(td_{ij}=T_j-C_i\)

Algoritmo para obter \(Ci\) e \(Ti\)

  1. Inicialize \(C_1=0\)

  2. Para \(i=2,...,n\) e observando os eventos predecessores ao evento \(i\) faça

    2.1. \(C_i=\underset{k\in Pred_{(i)}}{max}\{C_k+d_{ki}\}\)

  3. Inicialize (\(T_n=C_n\))

  4. Para \(i=n-1,...,1\) (em ordem inversa) e observando os eventos sucessores ao evento \(i\) faça:

    4.1. \(T_i=\underset{k\in Sucessora_{(i)}}{min}\{T_k-d_{ik}\}\)

  5. Calcule folga total (FT) de todas as atividades: \(FT_{ij}=T_j-C_i-d_{ij}\)

  6. Identifique o caminho crítico, que consiste em atividades com \(FT\) igual a zero.

Exemplo

flowchart LR
    1(("1
    (0,)")) -->|A,2| 2(("2
    (2,)"))
    2 -->|"B ,4"| 3(("3
    (6,)"))
    3 -->|"C ,10"| 4(("4
    (16,)"))
    4 -->|"D ,6"| 5(("5
    (22,)"))
    4 -->|"E ,4"| 6(("6
    (20,)"))
    6 -->|"F ,5"| 7(("7
    ()"))
    5 -->|"G ,7"| 8(("8
    "))
    6 -.->|"0"| 8(("8
    "))
    8 -->|"H ,9"| 9(("9
    "))
    4 -->|"I ,7"| 7(("7
    "))
    7 -->|"J ,8"| 11(("10
    "))
    9 -->|"M ,2"| 14(("13
    "))
    11 -->|"K ,4"| 12(("11
    "))
    11 -->|"L ,5"| 13(("12
    "))
    12 -.->|"0"| 13(("12
    "))
    13 -->|"N ,6"| 14(("13
    "))

\(C_1=0 \rightarrow C_2=0+2=2 \rightarrow C_3=2+4=6 \rightarrow C_4=6+10=16\)

\(\rightarrow C_5=16+6=22\)

\(\rightarrow C_6=16+4=20\)

Exemplo cont. 1

flowchart LR
    1(("1
    (0,)")) -->|A,2| 2(("2
    (2,)"))
    2 -->|"B ,4"| 3(("3
    (6,)"))
    3 -->|"C ,10"| 4(("4
    (16,)"))
    4 -->|"D ,6"| 5(("5
    (22,)"))
    4 -->|"E ,4"| 6(("6
    (20,)"))
    6 -->|"F ,5"| 7(("7
    (25,)"))
    5 -->|"G ,7"| 8(("8
    (29,)"))
    6 -.->|"0"| 8
    8 -->|"H ,9"| 9(("9
    (38,)"))
    4 -->|"I ,7"| 7
    7 -->|"J ,8"| 11(("10
    (33,)"))
    9 -->|"M ,2"| 14(("13
    "))
    11 -->|"K ,4"| 12(("11
    (37,)"))
    11 -->|"L ,5"| 13(("12
    "))
    12 -.->|"0"| 13(("12
    (38,)"))
    13 -->|"N ,6"| 14(("13
    (44,44)"))

\(C_8=max\{22+7,20+0\}=29\rightarrow C_{9}=29+9=38\)

\(C_7=max\{20+5,23+0\}=25\rightarrow C_{10}=25+8=33\)

\(\rightarrow C_{11}=33+4=37\) \(\rightarrow C_{12}=max\{33+5,37+0\}=38\)

\(C_{13}=max\{38+2,38+6\}=44\);

\(\rightarrow T_{13}=44\)

Exemplo cont. 2

flowchart LR
    1(("1
    (0,0)")) -->|A,2| 2(("2
    (2,2)"))
    2 -->|"B ,4"| 3(("3
    (6,6)"))
    3 -->|"C ,10"| 4(("4
    (16,16)"))
    4 -->|"D ,6"| 5(("5
    (22,25)"))
    4 -->|"E ,4"| 6(("6
    (20,20)"))
    6 -->|"F ,5"| 7(("7
    (25,25)"))
    5 -->|"G ,7"| 8(("8
    (29,33)"))
    6 -.->|"0"| 8
    8 -->|"H ,9"| 9(("9
    (38,42)"))
    4 -->|"I ,7"| 7
    7 -->|"J ,8"| 11(("10
    (33,33)"))
    9 -->|"M ,2"| 14(("13
    "))
    11 -->|"K ,4"| 12(("11
    (37,38)"))
    11 -->|"L ,5"| 13(("12
    "))
    12 -.->|"0"| 13(("12
    (38,38)"))
    13 -->|"N ,6"| 14(("13
    (44,44)"))

\(T_{13}=44 \rightarrow T_{12}=44-6=38 \rightarrow T_{11}=38-0=38\)

\(T_{9}=44-2=42 \rightarrow T_{8}=42-9=33\rightarrow T_{5}=33-7=26\)

\(T_{10}=min\{38-5,38-4\}=33\) \(\rightarrow T_{7}=33-8=25\)

\(\rightarrow T_{6}=min\{33-0,25-5\}=20\)

\(\rightarrow T_{4}=min\{26-6,20-4, 25-7\}=16\)

\(\rightarrow T_{3}=16-10=6 \rightarrow T_{2}=6-4=2\rightarrow T_{1}=2-2=0\)

Identificando o caminho crítico

Obtenha a folga total (\(FT_{ij}=T_j-C_i-d_{ij}\)) das atividades.

\(FT_A=2-0-2=0\); \(FT_B=6-2-4=0\); \(FT_C=16-6-10=0\); \(FT_D=26-16-6=4\); \(FT_E=20-16-4=0\); \(FT_F=25-20-5=0\); \(FT_G=33-22-7=4\); \(FT_H=42-29-9=4\); \(FT_I=25-16-7=2\); \(FT_J=33-25-8=0\); \(FT_K=38-33-4=1\); \(FT_L=38-33-4=0\); \(FT_M=44-38-2=4\); \(FT_N=44-38-6=0\)

flowchart LR
    1(("1
    (0,0)")) -->|A,2| 2(("2
    (2,2)"))
    2 -->|"B ,4"| 3(("3
    (6,6)"))
    3 -->|"C ,10"| 4(("4
    (16,16)"))
    4 -->|"D ,6"| 5(("5
    (22,25)"))
    4 -->|"E ,4"| 6(("6
    (20,20)"))
    6 -->|"F ,5"| 7(("7
    (25,25)"))
    5 -->|"G ,7"| 8(("8
    (29,33)"))
    6 -.->|"0"| 8
    8 -->|"H ,9"| 9(("9
    (38,42)"))
    4 -->|"I ,7"| 7
    7 -->|"J ,8"| 11(("10
    (33,33)"))
    9 -->|"M ,2"| 14(("13
    "))
    11 -->|"K ,4"| 12(("11
    (37,38)"))
    11 -->|"L ,5"| 13(("12
    "))
    12 -.->|"0"| 13(("12
    (38,38)"))
    13 -->|"N ,6"| 14(("13
    (44,44)"))
    linkStyle 0 stroke:red
    linkStyle 1 stroke:red
    linkStyle 2 stroke:red
    linkStyle 4 stroke:red
    linkStyle 5 stroke:red
    linkStyle 10 stroke:red
    linkStyle 13 stroke:red
    linkStyle 15 stroke:red

Atividades críticas: A,B,C,E,F,J,L,N; Caminho crítico (ÚNICO): A-B-C-E-F-J-L-N

Duração do projeto: 44 semanas (soma da duração das atividades do caminho crítico)

Discussões

Compartilhe suas dúvidas ou insights.

Prepare-se para a próxima aula: Revisar o conteúdo das aulas anteriores e realizar os exercícios propostos

Você já está apto a desenhar a rede do trabalho em grupo!

Exercícios Propostos

Exercite sua capacidade de desenhar a rede, identificar as atividades críticas, o(s) caminho(s) crítico(s) e a duração do projeto.

1

Desenhe a rede do projeto com base na tabela. Obtenha os cedos e tardes de cada evento, a duração do projeto e identifique quais são as atividades críticas, destacando o caminho crítico na rede.

Atividades Precedente Duração (Semanas)
A - 3
B - 6
C - 2
D A 4
E A 2
F A 7
G B,D 4
H C,E 3

Rede do exercício 1

A resposta completa encontra-se no início da próxima aula.

flowchart LR
1 -->|"C ,2"| 4(("4
    "))
     4 -->|"H,3"| 5(("5
    "))
     1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"D ,4"| 3(("3
    "))
    2 -->|"E ,2"| 4(("4
    "))
    2 -->|"F ,7"| 5(("5
    "))  
    1 -->|"B ,6"| 3(("3
    "))
    3 -->|"G,4"| 5(("5
    "))

2

Idem ao exercício anterior

Atividades Precedente Duração (Semanas)
A - 3
B A 2
C A 3
D B,C 7
E C 3
F B,C 5
G D,E 6
H C 2

Rede do exercício 2

A resposta completa encontra-se no início da próxima aula.

flowchart LR
 1(("1
    ")) -->|A,3| 2(("2
    "))
    2 -->|"B ,2"| 3(("3
    "))
 2 -->|"C ,3"| 4(("4
    "))
    4 -.->|"0"| 3(("3
    "))
     4 -->|"E,3"| 5(("5
    "))
     4 -->|"H,2"| 6(("6
    "))
     3 -->|"F,5"| 6(("6
    "))
     3 -->|"D,7"| 5(("5
    "))
    
     5 -->|"G,6"| 6(("6
    "))