|
TProcura
Biblioteca em C++ para testes paramΓ©tricos de algoritmos, e coleΓ§Γ£o de algoritmos de procura e otimizaΓ§Γ£o
|
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.
ββ Teste TProcuraConstrutiva βββ
β 1 - Aspirador β
β 2 - Puzzle 8 β
β 3 - 8 Damas β
β 4 - PartiΓ§Γ£o β
ββββββββββββββββββββββββββββββββ
OpΓ§Γ£o: 4
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.
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.
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.
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 βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
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.
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.
Vamos ver os resultados:
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.
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.
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:
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.
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.
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:
| 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.