TProcura
Biblioteca em C++ para testes paramΓ©tricos de algoritmos, e coleΓ§Γ£o de algoritmos de procura e otimizaΓ§Γ£o
Loading...
Searching...
No Matches
πŸ’» Teste Particao

ExecuΓ§Γ£o de exemplo com base no problema da PartiΓ§Γ£o. Pode acompanhar o teste executando as aΓ§Γ΅es localmente.

No Visual Studio, selecione o projeto TProcuraConstrutiva, e execute. No Linux na pasta .../TProcura/Construtiva/Teste$ execute make seguido de ./bin/Release/TProcuraConstrutiva

Nota: ao executar no terminal, os parΓ’metros, indicadores e outros elementos, aparecem com realce de cor para facilitar a leitura.

SumΓ‘rio

β”Œβ”€ Teste TProcuraConstrutiva ──┐
β”‚ 1 - Aspirador                β”‚
β”‚ 2 - Puzzle 8                 β”‚
β”‚ 3 - 8 Damas                  β”‚
β”‚ 4 - PartiΓ§Γ£o                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
OpΓ§Γ£o: 4

PartiΓ§Γ£o - separe os nΓΊmeros em duas partes iguais

Vamos escolher o problema da partiΓ§Γ£o. Introduza: 4.

PartiΓ§Γ£o
β”Œβ”€ βš™ ParΓ’metros ──────────────────────────────────────────────────────
β”‚ P1(ALGORITMO): Largura Primeiro | P2(NIVEL_DEBUG): NADA | P3(SEMENTE): 1
β”‚ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 0 | P6(VER_ACOES): 4 | P7(LIMITE): 0
β”‚ P8(ESTADOS_REPETIDOS): ignorar | P11(BARALHAR_SUCESSORES): 0
└──────────────────────────────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦1192 β†’ ◀️0 = ▢️0 ─
β”Œβ”€ ☰ Menu ─────────┬────────────────┬─────────────────────┬──────────────┐
β”‚ 1 πŸ“„   InstΓ’ncia  β”‚ 2 πŸ”  Explorar β”‚ 3 βš™   ParΓ’metros    β”‚ 4 βœ”  SoluΓ§Γ£o β”‚
β”‚ 5 βš–   Indicadores β”‚ 6 β–Ί   Executar β”‚ 7 πŸ› οΈ  ConfiguraΓ§Γ΅es β”‚ 8 πŸ§ͺ  Teste  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
OpΓ§Γ£o: 

Este problema consiste em dividir os nΓΊmeros em duas partes que somem exatamente o mesmo valor. EstΓ‘ no modo compato, vamos colocar no modo extendido para ver o conteΓΊdo da instΓ’ncia. Introduza: 3; 2; 4; ENTER.

...
PartiΓ§Γ£o
β”Œβ”€ βš™ ParΓ’metros ──────────────────────────────────────────────────────
β”‚ P1(ALGORITMO): Largura Primeiro | P2(NIVEL_DEBUG): COMPLETO | P3(SEMENTE): 1
β”‚ P4(LIMITE_TEMPO): 10 | P5(LIMITE_ITERACOES): 0 | P6(VER_ACOES): 4 | P7(LIMITE): 0
β”‚ P8(ESTADOS_REPETIDOS): ignorar | P11(BARALHAR_SUCESSORES): 0
└──────────────────────────────────────────────────────────────────────
 β”‚  β”Œβ”€ πŸ“¦1192 β†’ ◀️0 = ▢️0 ──────────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─ 106 107 109 111 114 124 124 124 132 141
 β”‚  β”œβ”€ ◀️ ─
 β”‚  β”œβ”€ ▢️ ─
 β”‚  └──────────────────────────────────────────────────────────────────────
...
OpΓ§Γ£o: 

Podemos agora ver os nΓΊmeros a colocar. Somam no total 1192, e tem que se colocar cada nΓΊmero numa das linhas. A soma em cada linha tem de ser igual.

AΓ§Γ£o 1 - Ver instΓ’ncias

Vamos ver as instΓ’ncias que temos. Introduza: 1; 10.

OpΓ§Γ£o: 1
β”Œβ”€ πŸ“„ InstΓ’ncia ───────────────────────────────────────────────────────
β”‚ ID atual: 10  Intervalo: [2–1000]  
β”‚ Prefixo atual: 'instancia_' 
└──────────────────────────────────────────────────────────────────────
Novo ID (ENTER mantΓ©m) ou novo prefixo (texto): 10

Existem instΓ’ncias de 2 a 1000, correspondendo o ID Γ  quantidade de nΓΊmeros. As instΓ’ncias sΓ£o geradas aleatoriamente, podendo existir instΓ’ncias impossΓ­veis.

Deixemos a instΓ’ncia 10 para resoluΓ§Γ£o manual.

AΓ§Γ£o 2 - Resolver manualmente

Vamos procurar resolver manualmente a intΓ’ncia. Introduza: 2; esq dir esq dir; dir esq dir esq; esq; dir; esq.

OpΓ§Γ£o: 2
═╀═ πŸ’° g:0 βš–  1|2|3 ═══
 β”‚  β”Œβ”€ πŸ“¦1192 β†’ ◀️0 = ▢️0 ──────────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─ 106 107 109 111 114 124 124 124 132 141
 β”‚  β”œβ”€ ◀️ ─
 β”‚  β”œβ”€ ▢️ ─
 β”‚  └──────────────────────────────────────────────────────────────────────
 β”‚ └─ ⚑  ──── esq dir { πŸ”– 1 πŸ”– 2 } 
πŸ” Sucessor [1-2, aΓ§Γ£o(Γ΅es), exe]: esq dir esq dir
β”Œβ”€ βœ”  ────────────────
β”‚ Executadas 4 aΓ§Γ΅es. 
└─────────────────────
═╀═ πŸ’° g:0 βš–  6|12|6 ═══
 β”‚  β”Œβ”€ πŸ“¦671 β†’ ◀️265 = ▢️256 ───────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─ 106 107 109 111 114 124
 β”‚  β”œβ”€ ◀️ ─ 141 124
 β”‚  β”œβ”€ ▢️ ─ 132 124
 β”‚  └──────────────────────────────────────────────────────────────────────
 β”‚ └─ ⚑  ──── esq dir { πŸ”– 11 πŸ”– 12 } 
πŸ” Sucessor [1-2, aΓ§Γ£o(Γ΅es), exe]: dir esq dir esq
β”Œβ”€ βœ”  ────────────────
β”‚ Executadas 4 aΓ§Γ΅es. 
└─────────────────────
═╀═ πŸ’° g:0 βš–  11|22|9 ═══
 β”‚  β”Œβ”€ πŸ“¦213 β†’ ◀️488 = ▢️491 ───────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─ 106 107
 β”‚  β”œβ”€ ◀️ ─ 141 124 114 109
 β”‚  β”œβ”€ ▢️ ─ 132 124 124 111
 β”‚  └──────────────────────────────────────────────────────────────────────
 β”‚ └─ ⚑  ──── esq dir { πŸ”– 21 πŸ”– 22 } 
πŸ” Sucessor [1-2, aΓ§Γ£o(Γ΅es), exe]: esq
β”Œβ”€ βœ”  ────────────────
β”‚ Executadas 1 aΓ§Γ΅es. 
└─────────────────────
═╀═ πŸ’° g:0 βš–  13|26|12 ═══
 β”‚  β”Œβ”€ πŸ“¦106 β†’ ◀️595 = ▢️491 ───────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─ 106
 β”‚  β”œβ”€ ◀️ ─ 141 124 114 109 107
 β”‚  β”œβ”€ ▢️ ─ 132 124 124 111
 β”‚  └──────────────────────────────────────────────────────────────────────
 β”‚ └─ ⚑  ──── esq dir { πŸ”– 25 πŸ”– 26 } 
πŸ” Sucessor [1-2, aΓ§Γ£o(Γ΅es), exe]: dir
β”Œβ”€ βœ”  ────────────────
β”‚ Executadas 1 aΓ§Γ΅es. 
└─────────────────────
═╀═ πŸ’° g:0 βš–  15|28|13 ═══
 β”‚  β”Œβ”€ πŸ“¦0 β†’ ◀️595 = ▢️597 ─────────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─
 β”‚  β”œβ”€ ◀️ ─ 141 124 114 109 107
 β”‚  β”œβ”€ ▢️ ─ 132 124 124 111 106
 β”‚  └──────────────────────────────────────────────────────────────────────
 β”‚ └─ ⚑  ────
β”Œβ”€ β›”  ───────────────
β”‚ Sem sucessores.    
└────────────────────
PartiΓ§Γ£o
...
 β”‚  β”Œβ”€ πŸ“¦0 β†’ ◀️595 = ▢️597 ─────────────────────────────────────────────────
 β”‚  β”œβ”€ πŸ“¦ ─
 β”‚  β”œβ”€ ◀️ ─ 141 124 114 109 107
 β”‚  β”œβ”€ ▢️ ─ 132 124 124 111 106
 β”‚  └──────────────────────────────────────────────────────────────────────
...
OpΓ§Γ£o: 

Foi uma boa tentativa, mas no final um lado soma 595 do outro 597.

Tal como as 8 damas, o nΓΊmero de aΓ§Γ΅es de uma soluΓ§Γ£o completa Γ© fixo. Γ‰ igual Γ  quantidade de nΓΊmero a colocar. Sabemos que nΓ£o faz sentido a procura em largura nestes problemas. TambΓ©m pelos mesmos motivos que nas 8 damas, nΓ£o se consegue uma heurΓ­stica pelo que nΓ£o faz sentido as procuras informadas.

Naturalmente que se poderia efetuar mais cortes dos que estΓ£o a ser feitos nesta implementaΓ§Γ£o. Vamos apenas comparar a remoΓ§Γ£o de repetidos gerados, relativamente a ignorar repetidos, e tambΓ©m os sucessores aleatΓ³rios, tal como no problema das 8 damas.

No caso da partiΓ§Γ£o, apΓ³s um nΓΊmero estar num lado, apenas a soma interessa. Como se coloca os nΓΊmeros por ordem, um estado fica igual a todos os que tΓͺm o montante igual das peΓ§as colocadas. Esquerda e direita Γ© naturalmente irrelevante.

Como o estado codificado fica pequeno, a expectativa para ganho por repetidos aumenta, face Γ s 8 damas em que se tinham de considerar 3 simetrias, levando a um tempo computacional superior.

AΓ§Γ£o 3 - Testes EmpΓ­ricos

Vamos fazer testes empΓ­ricos na linha de comandos.

Vamos obter primeiramente a lista de todos os parΓ’metros.

/TProcura/Construtiva/Teste$ ./bin/Release/TProcuraConstrutiva -h

β”Œβ”€ Teste TProcuraConstrutiva ──┐
β”‚ 1 - Aspirador                β”‚
β”‚ 2 - Puzzle 8                 β”‚
β”‚ 3 - 8 Damas                  β”‚
β”‚ 4 - PartiΓ§Γ£o                 β”‚
β”‚ 5 - Artificial               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
OpΓ§Γ£o: 4
Uso: ./bin/Release/TProcuraConstrutiva  [opΓ§Γ΅es]
      Conjunto de IDs: A | A,B,C | A:B[:C]
OpΓ§Γ΅es:
  -R    Nome do CSV de resultados (omissΓ£o: resultados.csv)
  -F     Prefixo dos ficheiros de instΓ’ncia (omissΓ£o: instancia_)
  -M        Modo MPI: 0 = divisΓ£o estΓ‘tica, 1 = gestor-trabalhador
  -I         Lista de indicadores (e.g. 2,1,3)
  -h              Esta ajuda
  -P        ParΓ’metros (e.g. P1=1:3 x P2=0:2) - ΓΊltimo campo
Exemplo: ./bin/Release/TProcuraConstrutiva 1:5 -R out -F fich_ -I 3,1,4,2 -P P1=1:5 x P6=1,2
   Executar sem argumentos entra em modo interativo, para explorar todos os parΓ’metros e indicadores

β”Œβ”€ βš™ ParΓ’metros ──────────────────────────────────────────────────────
β”‚ P1(ALGORITMO):             Largura Primeiro (1 a 7)
β”‚ P2(NIVEL_DEBUG):           NADA       (0 a 4)
β”‚ P3(SEMENTE):               1          (1 a 1000000)
β”‚ P4(LIMITE_TEMPO):          10         (1 a 3600)
β”‚ P5(LIMITE_ITERACOES):      0          (0 a 1000000000)
β”‚ P6(VER_ACOES):             4          (1 a 100)
β”‚ P7(LIMITE):                0          (-1 a 1000000)
β”‚ P8(ESTADOS_REPETIDOS):     ignorar    (1 a 3)
β”‚ P11(BARALHAR_SUCESSORES):  0          (0 a 1)
└──────────────────────────────────────────────────────────────────────
β”Œβ”€ βš– Indicadores ─────────────────────────────────────────────────────
β”‚ I1(IND_CUSTO): βœ“ 1ΒΊ lugar
β”‚ o resultado Γ© o custo da soluΓ§Γ£o atual
β”‚ I2(Tempo(ms)): βœ“ 2ΒΊ lugar
β”‚ Tempo em milissegundos da execuΓ§Γ£o (medida de esforΓ§o computacional).
β”‚ I3(IteraΓ§Γ΅es): βœ“ 3ΒΊ lugar
β”‚ IteraΓ§Γ΅es do algoritmo, interpretadas conforme o algoritmo (medida de esforΓ§o independente do hardware).
β”‚ I4(IND_EXPANSOES): βœ“ 4ΒΊ lugar
β”‚ nΓΊmero de expansΓ΅es efetuadas
β”‚ I5(IND_GERACOES): βœ“ 5ΒΊ lugar
β”‚ nΓΊmero de estados gerados
β”‚ I6(IND_LOWER_BOUND): βœ“ 6ΒΊ lugar
β”‚ valor mΓ­nimo para a melhor soluΓ§Γ£o, se igual ao custo da soluΓ§Γ£o obtida, entΓ£o esta Γ© Γ³tima
└──────────────────────────────────────────────────────────────────────

Teste: particao_1

O primeiro ponto a testar Γ© a geraΓ§Γ£o de repetidos. Temos muitas instΓ’ncias de diferentes tamanhos. Como as instΓ’ncias sobem de tamanho com o ID, utilizamos apenas atΓ© Γ  instΓ’ncia 200, de 20 em 20, e de cada tamanho aumentamos o esforΓ§o com diferentes nΓΊmeros de instΓ’ncias.

  • Tipo de Teste / Objetivo: ParamΓ©trico (P8=1,3)
  • DefiniΓ§Γ£o: InstΓ’ncias: 2:200:20; ConfiguraΓ§Γ΅es: P1=3 P7=-1 P8=1,3
  • EsforΓ§o: P3=1; P3=1:10; P3=1:100
  • ExecuΓ§Γ£o: TProcura 2:200:20 -R Resultados/particao_1 -P P1=3 P2=4 P7=-1 P3=1 x P8=1,3

Como temos 20 tarefas, utilizamos o debug completo.

OpΓ§Γ£o: 4


═╀═ InstΓ’ncias ═══ { πŸ“„ 2 πŸ“„ 22 πŸ“„ 42 πŸ“„ 62 πŸ“„ 82 πŸ“„ 102 πŸ“„ 122 πŸ“„ 142 πŸ“„ 162 πŸ“„ 182 }
 β”œβ”€ πŸ› οΈ  ─ P1=3 P2=4 P3=1 P4=10 P5=0 P6=4 P7=-1 P11=0 (parΓ’metros comuns)
═β•ͺ═ ConfiguraΓ§Γ΅es ═══
 β”œβ”€ βš™  [1] ─ P8=1
 β”œβ”€ βš™  [2] ─ P8=3
═╧═══════════════════
═╀═ πŸ§ͺ  InΓ­cio do Teste (πŸ–₯️ 0) ═══
 β”œβ”€ πŸ“‹ Tarefas:20   πŸ“„ InstΓ’ncias: 10   πŸ› οΈ ConfiguraΓ§Γ΅es: 2   πŸ–₯️ Processos: 1.
 β”œβ”€ ⏱                 πŸ“‹ 1     πŸ“„ 2     πŸ› οΈ 1     πŸ–₯️ 1    🎯 β›” βš–  -1 0 0 3 2 0
 β”œβ”€ ⏱                 πŸ“‹ 2     πŸ“„ 22    πŸ› οΈ 1     πŸ–₯️ 1    🎯 22   βš–  22 36 0 77893 77904 0
 β”œβ”€ ⏱ 37ms            πŸ“‹ 3     πŸ“„ 42    πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 24036915 24036934 0
 β”œβ”€ ⏱ 10" 37ms        πŸ“‹ 4     πŸ“„ 62    πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 22859567 22859598 0
 β”œβ”€ ⏱ 20" 37ms        πŸ“‹ 5     πŸ“„ 82    πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 20615188 20615228 0
 β”œβ”€ ⏱ 30" 37ms        πŸ“‹ 6     πŸ“„ 102   πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 20034739 20034788 0
 β”œβ”€ ⏱ 40" 37ms        πŸ“‹ 7     πŸ“„ 122   πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 19117816 19117876 0
 β”œβ”€ ⏱ 50" 37ms        πŸ“‹ 8     πŸ“„ 142   πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 19118189 19118260 0
 β”œβ”€ ⏱ 1' 37ms         πŸ“‹ 9     πŸ“„ 162   πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 18281362 18281440 0
 β”œβ”€ ⏱ 1' 10" 37ms     πŸ“‹ 10    πŸ“„ 182   πŸ› οΈ 1     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10000 0 17633077 17633166 0
 β”œβ”€ ⏱ 1' 20" 38ms     πŸ“‹ 11    πŸ“„ 2     πŸ› οΈ 2     πŸ–₯️ 1    🎯 β›” βš–  -1 60 0 2 1 0
 β”œβ”€ ⏱ 1' 20" 97ms     πŸ“‹ 12    πŸ“„ 22    πŸ› οΈ 2     πŸ–₯️ 1    🎯 22   βš–  22 14 0 4189 4199 0
 β”œβ”€ ⏱ 1' 20" 111ms    πŸ“‹ 13    πŸ“„ 42    πŸ› οΈ 2     πŸ–₯️ 1    🎯 42   βš–  42 56 0 51162 51182 0
 β”œβ”€ ⏱ 1' 20" 167ms    πŸ“‹ 14    πŸ“„ 62    πŸ› οΈ 2     πŸ–₯️ 1    🎯 62   βš–  62 191 0 230596 230626 0
 β”œβ”€ ⏱ 1' 20" 358ms    πŸ“‹ 15    πŸ“„ 82    πŸ› οΈ 2     πŸ–₯️ 1    🎯 82   βš–  82 670 0 732439 732479 0
 β”œβ”€ ⏱ 1' 21" 28ms     πŸ“‹ 16    πŸ“„ 102   πŸ› οΈ 2     πŸ–₯️ 1    🎯 102  βš–  102 3652 0 4053100 4053150 0
 β”œβ”€ ⏱ 1' 24" 680ms    πŸ“‹ 17    πŸ“„ 122   πŸ› οΈ 2     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10005 0 10992167 10992215 0
 β”œβ”€ ⏱ 1' 34" 685ms    πŸ“‹ 18    πŸ“„ 142   πŸ› οΈ 2     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10004 0 10864256 10864314 0
 β”œβ”€ ⏱ 1' 44" 690ms    πŸ“‹ 19    πŸ“„ 162   πŸ› οΈ 2     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10004 0 10825532 10825603 0
 β”œβ”€ ⏱ 1' 54" 694ms    πŸ“‹ 20    πŸ“„ 182   πŸ› οΈ 2     πŸ–₯️ 1    🚫 ⏱ βš–  -2 10004 0 10665339 10665421 0
 β”œβ”€ πŸ“‘  Ficheiro Resultados/particao_1.csv gravado.
 β”‚  ⏱  Tempo real: 2' 4" 698ms
 β”‚  ⏱  CPU total: 2' 4" 698ms
 β”‚  πŸ“Š  UtilizaΓ§Γ£o: 100.0%
═╧═ 🏁  Fim do Teste (πŸ–₯️ 0  ⏱ 2' 4" 698ms ) ═══

Como podemos ver dos logs, a configuraΓ§Γ£o 2 resolve mais instΓ’ncias, mas nΓ£o resolveu a partir da instΓ’ncia 122.

  • hardware: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz, RAM 16.0 GB (4267 MT/s)
  • Ficheiro de AnΓ‘lise: particao.xlsx

Vamos ver os resultados:

  • Colunas: P8
  • Linhas: InstΓ’ncia
  • Valores: I2(tempo(ms))

Podemos ver a tabela resultante:

RΓ³tulos de Linha 1:ignorar 3:gerados
2 0 60
22 36 14
42 10000 56
62 10000 191
82 10000 670
102 10000 3652
122 10000 10005
142 10000 10004
162 10000 10004
182 10000 10004
Total Geral 80036 44660

Confirma-se que os estados gerados, Γ© neste caso bastante compensador. Naturalmente que hΓ‘ apenas uma execuΓ§Γ£o para cada dimensΓ£o, mas a execuΓ§Γ£o de maior esforΓ§o neste teste, e utilizaΓ§Γ£o de intervalos de confianΓ§a, permitirΓ‘ concluir com suporte estatΓ­stico que de facto Γ© preferivel utilizar-se a eliminaΓ§Γ£o de estados gerados. Num caso instΓ’ncias sΓ£o resolvidas atΓ© 20, mas nΓ£o com 40 elementos, enquanto que com eliminaΓ§Γ£o de estados gerados resolvem-se instΓ’ncias atΓ© 102.

Teste: particao_2

Prosseguimos agora para o teste da ordem aleatΓ³ria de sucessores. Como sabemos que as instΓ’ncias sΓ£o resolvida atΓ© 100, vamos desta vez utilizar as instΓ’ncias de 2 a 100, para melhor observar se hΓ‘ ou nΓ£o vantagem em ter os sucessores aleatΓ³rios. Como temos ordens aleatΓ³rias, vamos manter um P3 mΓ­nimo com 4 aleatΓ³rios gerados.

  • Tipo de Teste / Objetivo: ParamΓ©trico (P11=0,1)
  • DefiniΓ§Γ£o: InstΓ’ncias: 2:100:10; ConfiguraΓ§Γ΅es: P1=3 P7=-1 P8=3 P11=0,1
  • EsforΓ§o: P3=1:4; P3=1:40; P3=1:400
  • ExecuΓ§Γ£o: TProcura 2:100:10 -R Resultados/particao_2 -P P1=3 P2=3 P7=-1 P8=3 P3=1:4 x P11=0,1

SΓ£o mais tarefas, pelo que utilizamos o debug 3.

OpΓ§Γ£o: 4


═╀═ InstΓ’ncias ═══ { πŸ“„ 2 πŸ“„ 12 πŸ“„ 22 πŸ“„ 32 πŸ“„ 42 πŸ“„ 52 πŸ“„ 62 πŸ“„ 72 πŸ“„ 82 πŸ“„ 92 }
 β”œβ”€ πŸ› οΈ  ─ P1=3 P2=3 P4=10 P5=0 P6=4 P7=-1 P8=3  (parΓ’metros comuns)
═β•ͺ═ ConfiguraΓ§Γ΅es ═══
 β”œβ”€ βš™  [1] ─ P3=1 P11=0
 β”œβ”€ βš™  [2] ─ P3=2 P11=0
 β”œβ”€ βš™  [3] ─ P3=3 P11=0
 β”œβ”€ βš™  [4] ─ P3=4 P11=0
 β”œβ”€ βš™  [5] ─ P3=1 P11=1
 β”œβ”€ βš™  [6] ─ P3=2 P11=1
 β”œβ”€ βš™  [7] ─ P3=3 P11=1
 β”œβ”€ βš™  [8] ─ P3=4 P11=1
═╧═══════════════════
═╀═ πŸ§ͺ  InΓ­cio do Teste (πŸ–₯️ 0) ═══
 β”œβ”€ πŸ“‹ Tarefas:80   πŸ“„ InstΓ’ncias: 10   πŸ› οΈ ConfiguraΓ§Γ΅es: 8   πŸ–₯️ Processos: 1.
 β”œβ”€ ⏱ 10" 339ms       πŸ“‹ 41    πŸ“„ 2     πŸ› οΈ 5     πŸ–₯️ 1
 β”œβ”€ πŸ“‘  Ficheiro Resultados/particao_2.csv gravado.
 β”‚  ⏱  Tempo real: 11" 272ms
 β”‚  ⏱  CPU total: 11" 272ms
 β”‚  πŸ“Š  UtilizaΓ§Γ£o: 100.0%
═╧═ 🏁  Fim do Teste (πŸ–₯️ 0  ⏱ 11" 272ms ) ═══

Vamos ver os resultados:

  • Colunas: P11
  • Linhas: InstΓ’ncia
  • Valores: I2(tempo(ms))

Podemos ver a tabela resultante:

RΓ³tulos de Linha 0 1
2 16,75 7
12 7,5 7
22 9,75 7,5
32 18,75 8,25
42 50,25 25,25
52 104 26,5
62 187,5 16,25
72 363 54,75
82 640 34,5
92 1186,75 46,75
Total Geral 258,425 23,375

Toda as instΓ’ncias foram resolvidas, e surpresa ou nΓ£o, a ordem aleatΓ³ria Γ© superior em mΓ©dia Γ  ordem fixa, sendo a mΓ©dia de tempo na instΓ’ncia 92 apenas 46 milissegundos, contra mais de 1 segundo na ordem fixa.

Teste: particao_3

Pretendemos agora fazer um teste de performance para a melhor configuraΓ§Γ£o, de modo a saber atΓ© que instΓ’ncia consegue resolver e com que tempo. Vamos colocar no esforΓ§o nΓ£o apenas o nΓΊmero de 4 execuΓ§Γ΅es para cada dimensΓ£o inicial, mas mudando para 40 nos esforΓ§os B e C de modo a ganhar precisΓ£o estatΓ­stica, e tambΓ©m o nΓΊmero de instΓ’ncias.

  • Tipo de Teste / Objetivo: Performance (tempo vs dimensΓ£o)
  • DefiniΓ§Γ£o: InstΓ’ncias: 2:1000:100; ConfiguraΓ§Γ΅es: P1=3 P7=-1 P8=3 P11=1
  • EsforΓ§o: 2:1000:100 P3=1:4; 2:1000:10 P3=1:40; 2:1000 P3=1:40
  • ExecuΓ§Γ£o: TProcura 2:1000:100 -R Resultados/particao_3 -P P1=3 P2=3 P7=-1 P8=3 P11=1 P3=1:4

 OpΓ§Γ£o: 4


═╀═ InstΓ’ncias ═══ { πŸ“„ 2 πŸ“„ 102 πŸ“„ 202 πŸ“„ 302 πŸ“„ 402 πŸ“„ 502 πŸ“„ 602 πŸ“„ 702 πŸ“„ 802 πŸ“„ 902 }
 β”œβ”€ πŸ› οΈ  ─ P1=3 P2=3 P4=10 P5=0 P6=4 P7=-1 P8=3 P11=1 (parΓ’metros comuns)
═β•ͺ═ ConfiguraΓ§Γ΅es ═══
 β”œβ”€ βš™  [1] ─ P3=1
 β”œβ”€ βš™  [2] ─ P3=2
 β”œβ”€ βš™  [3] ─ P3=3
 β”œβ”€ βš™  [4] ─ P3=4
═╧═══════════════════
═╀═ πŸ§ͺ  InΓ­cio do Teste (πŸ–₯️ 0) ═══
 β”œβ”€ πŸ“‹ Tarefas:40   πŸ“„ InstΓ’ncias: 10   πŸ› οΈ ConfiguraΓ§Γ΅es: 4   πŸ–₯️ Processos: 1.
 β”œβ”€ ⏱ 10" 141ms       πŸ“‹ 5     πŸ“„ 402   πŸ› οΈ 1     πŸ–₯️ 1
 β”œβ”€ ⏱ 20" 193ms       πŸ“‹ 7     πŸ“„ 602   πŸ› οΈ 1     πŸ–₯️ 1
 β”œβ”€ ⏱ 30" 201ms       πŸ“‹ 8     πŸ“„ 702   πŸ› οΈ 1     πŸ–₯️ 1
 β”œβ”€ ⏱ 40" 206ms       πŸ“‹ 9     πŸ“„ 802   πŸ› οΈ 1     πŸ–₯️ 1
 β”œβ”€ ⏱ 50" 211ms       πŸ“‹ 10    πŸ“„ 902   πŸ› οΈ 1     πŸ–₯️ 1
 β”œβ”€ ⏱ 1' 217ms        πŸ“‹ 11    πŸ“„ 2     πŸ› οΈ 2     πŸ–₯️ 1
 β”œβ”€ ⏱ 1' 11" 354ms    πŸ“‹ 15    πŸ“„ 402   πŸ› οΈ 2     πŸ–₯️ 1
 β”œβ”€ ⏱ 1' 21" 359ms    πŸ“‹ 16    πŸ“„ 502   πŸ› οΈ 2     πŸ–₯️ 1
 β”œβ”€ ⏱ 1' 31" 627ms    πŸ“‹ 19    πŸ“„ 802   πŸ› οΈ 2     πŸ–₯️ 1
 β”œβ”€ ⏱ 1' 41" 633ms    πŸ“‹ 20    πŸ“„ 902   πŸ› οΈ 2     πŸ–₯️ 1
 β”œβ”€ ⏱ 1' 51" 639ms    πŸ“‹ 21    πŸ“„ 2     πŸ› οΈ 3     πŸ–₯️ 1
 β”œβ”€ ⏱ 2' 1" 805ms     πŸ“‹ 24    πŸ“„ 302   πŸ› οΈ 3     πŸ–₯️ 1
 β”œβ”€ ⏱ 2' 12" 309ms    πŸ“‹ 27    πŸ“„ 602   πŸ› οΈ 3     πŸ–₯️ 1
 β”œβ”€ ⏱ 2' 22" 314ms    πŸ“‹ 28    πŸ“„ 702   πŸ› οΈ 3     πŸ–₯️ 1
 β”œβ”€ ⏱ 2' 32" 320ms    πŸ“‹ 29    πŸ“„ 802   πŸ› οΈ 3     πŸ–₯️ 1
 β”œβ”€ ⏱ 2' 42" 325ms    πŸ“‹ 30    πŸ“„ 902   πŸ› οΈ 3     πŸ–₯️ 1
 β”œβ”€ ⏱ 2' 52" 331ms    πŸ“‹ 31    πŸ“„ 2     πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ ⏱ 3' 2" 675ms     πŸ“‹ 35    πŸ“„ 402   πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ ⏱ 3' 12" 680ms    πŸ“‹ 36    πŸ“„ 502   πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ ⏱ 3' 22" 685ms    πŸ“‹ 37    πŸ“„ 602   πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ ⏱ 3' 32" 690ms    πŸ“‹ 38    πŸ“„ 702   πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ ⏱ 3' 42" 696ms    πŸ“‹ 39    πŸ“„ 802   πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ ⏱ 3' 52" 702ms    πŸ“‹ 40    πŸ“„ 902   πŸ› οΈ 4     πŸ–₯️ 1
 β”œβ”€ πŸ“‘  Ficheiro Resultados/particao_3.csv gravado.
 β”‚  ⏱  Tempo real: 4' 2" 708ms
 β”‚  ⏱  CPU total: 4' 2" 708ms
 β”‚  πŸ“Š  UtilizaΓ§Γ£o: 100.0%
═╧═ 🏁  Fim do Teste (πŸ–₯️ 0  ⏱ 4' 2" 708ms ) ═══

Vamos ver os resultados:

  • Colunas: valores
  • Linhas: InstΓ’ncia
  • Valores: Resolvido, mΓ­n I2, mΓ©dia I2, mΓ‘ximo I2
RΓ³tulos de Linha MΓ©dia de Resolvido MΓ­nimo de I2(Tempo(ms)) MΓ©dia de I2(Tempo(ms)) MΓ‘ximo de I2(Tempo(ms))
2 1 7 21 62
102 1 35 130,75 277
202 0,75 14 2790,75 10004
302 0,25 166 7546 10008
402 0,5 47 5097,5 10005
502 0,25 9 7506 10005
602 0,25 253 7567,75 10008
702 0 10005 10005 10005
802 0 10005 10005,25 10006
902 0 10005 10005,5 10006

Podemos ver que apenas as instΓ’ncias atΓ© 100 Γ© que sΓ£o todas resolvidas, e instΓ’ncias de 700 ou mais nΓ£o sΓ£o resolvidas, dentro do limite de 10 segundos. Naturalmente que para maior precisΓ£o na percentagem, Γ© necessΓ‘rio um maior esforΓ§o no teste.

Podemos considerar portanto que as instΓ’ncias geradas de 700 a 1000 sΓ£o desafiantes para esta implementaΓ§Γ£o.

Note-se no entanto que o gerador de instΓ’ncias nΓ£o Γ© um conjunto de nΓΊmeros aleatΓ³rios puro. Essas instΓ’ncias sΓ£o normalmente simples. O gerador foi construΓ­do para procurar instΓ’ncias complexas para um dado tamanho, pelo que esta tabela nΓ£o representa uma instΓ’ncia arbitrΓ‘ria da partiΓ§Γ£o, nem os resultados sΓ£o generalizΓ‘veis a qualquer instΓ’ncia.

Uma instΓ’ncia completamente aleatΓ³ria Γ© muito simples de resolver. Na investigaΓ§Γ£o as instΓ’ncias complexas deste problema tΓͺm de ter inteiros muito grandes, tendo de serem utilizadas representaΓ§Γ΅es de inteiros maiores que 64 bits para guardar e somar nΓΊmeros desses tamanhos.

β—€ Passo anterior PrΓ³ximo passo β–Ά