• Nenhum resultado encontrado

ser visto nas figuras 3.6(a) e 3.6(b).

Para encontrar as faces de sombra e luz do problema original, basta focarmos apenas nas faces que s˜ao limitadas e desconsiderarmos os segmentos desse retˆangulo envolvente, assim como fazemos com os do bordo do pol´ıgono na hora de decidir se uma cadeia poligonal ´e de sombra ou luz. Dessa forma, como todas faces s˜ao limitadas, as cadeias poligonais que as definem come¸cam e terminam nos mesmos pontos, possibilitando que verifiquemos facilmente se s˜ao de sombra ou luz atrav´es de um algoritmo de varredura.

Em nossa adapta¸c˜ao daquele algoritmo, em cada ponto de evento, atrav´es dos seg- mentos que se interceptaram para form´a-lo, atualizam-se as cadeias poligonais em rela¸c˜ao aos dois lados de ambos os segmentos e verifica-se se a face cuja varredura foi completada ´e luz externa ou sombra interna, salvando as informa¸c˜oes necess´arias da face caso o seja. As Figuras 3.6 e 3.7 exemplificam o algoritmo, utilizando a nota¸c˜ao “L” para uma cadeia que ´e de luz at´e o momento, “S” para sombra, “S&L” para uma cadeia que possui tanto segmentos de luz como sombra (a face ser´a de penumbra) e “SkL” para uma cadeia que, at´e o momento, pode definir uma face de luz ou sombra (possui apenas segmentos do bordo do pol´ıgono ou do retˆangulo envolvente).

O algoritmo possui a mesma complexidade de tempo do algoritmo de Bentley-Ottmann, uma vez que a cada evento apenas verifica e atualiza as informa¸c˜ao dos segmentos que o originaram. Quanto ao espa¸co, em rela¸c˜ao ao algoritmo original, al´em de guardar uma informa¸c˜ao extra em cada um dos n segmento, que v˜ao sendo atualizadas ao longo do algoritmo, guardamos as informa¸c˜oes das faces de sombra e luz encontradas. Logo, temos uma complexidade de tempo O((n + k) log n) e espa¸co O(n + m), onde k ´e quantidade de intersec¸c˜oes e m ´e quantidade de faces de sombra internas e luz externas.

3.4

Avalia¸ao Experimental

Para classificar as faces entre sombra e luz, al´em do conjunto de instˆancias utilizado na se¸c˜ao 2.4, que consistia de 150 instˆancias com n´umero de v´ertices no intervalo [20, 100], em incrementos de 20, mais instˆancias foram geradas. O novo conjunto consiste de instˆancias com n´umero de v´ertices no intervalo [200, 1000], em incrementos de 100. Para cada tamanho, 30 pol´ıgonos simples foram gerados, totalizando 270 novas instˆancias, que foram adicionadas ao conjunto anterior. Mais detalhes sobre a gera¸c˜ao de pol´ıgonos simples podem ser encontrados no Apˆendice A.

Como nos testes anteriores, os programas utilizados foram codificados em C++ e com- pilados com GNU g++ 4.7, utilizando a biblioteca CGAL 4.2 (Computational Geometry

Algorithms Library). Os modelos foram resolvidos utilizando-se o IBM ILOG CPLEX 12.2.

Quanto ao hardware, um desktop com AMD Phenom II X6 1055T @ 2.80GHz e 12GB RAM foi utilizado.

3.4. Avalia¸c˜ao Experimental 24

(a) Subdivis˜ao planar. (b) Retˆangulo envolvente e pontos de evento.

S|L S|L

(c) Evento 1: cria¸c˜ao de cadeias que podem ser sombra ou luz a direita do ponto de evento.

L S|L

S

(d) Evento 2: extens˜ao da cadeia vinda da es- querda, que passa a ser luz.

S L S|L (e) Evento 3. S|L (f) Evento 4.

Figura 3.6: Exemplo das primeiras itera¸c˜oes da varredura para encontrar faces de sombra e luz.

3.4. Avalia¸c˜ao Experimental 25 L L S&L S&L f

(a) Evento 5: varredura da face f conclu´ıda, ambas as cadeias eram de sombra, portanto f ´e face de sombra. L S S|L (b) Evento 6. L S|L S|L L (c) Evento 7. S|L S&L L h

(d) Evento 8: varredura da face h conclu´ıda, ambas as cadeias eram de luz, portanto h ´e face de luz.

(e) Evento 23: fim do algoritmo. (f) Subdivis˜ao planar com as faces de sombra inter- nas e luz externas ao pol´ıgono.

3.4. Avalia¸c˜ao Experimental 26

A quantidade m´edia de faces de sombra e luz pode ser vista na Tabela 3.1 e Figura 3.8. Em m´edia, 11% ± 3% das faces internas s˜ao de sombra e 9% ± 1% das faces externas s˜ao de luz. Apesar do percentual menor, como 72% ± 3% das faces s˜ao externas, o n´umero de faces de luz externas ´e 218% ± 27% maior que o n´umero de faces de sombra internas. Como o novo modelo possui uma restri¸c˜ao (3.1) para cada par de faces de sombra interna e luz externa, a redu¸c˜ao do n´umero de faces a serem consideradas diminuiu a quantidade de restri¸c˜oes para 1, 1% ± 0, 5% do n´umero total de restri¸c˜oes do modelo compacto, descrito na Se¸c˜ao 2.3. Se considerarmos apenas as instˆancias de tamanho superior a 100 v´ertices, o novo modelo possui 0, 77% ± 0, 08% do total de restri¸c˜oes do modelo compacto.

Total de Faces Internas Faces Externas V´ertices Faces Total Sombra (%) Total Luz (%)

20 210 39 8 20,51 171 22 12,87 40 820 206 39 18,93 614 69 11,24 60 1830 518 59 11,39 1312 143 10,90 80 3240 903 119 13,18 2337 236 10,10 100 5050 1576 191 12,12 3474 312 8,98 200 20100 5541 604 10,90 14559 1267 8,70 300 45150 12565 1277 10,16 32585 2762 8,48 400 80200 22549 2191 9,72 57651 4828 8,37 500 125250 35124 3335 9,49 90126 7386 8,20 600 180300 51967 4814 9,26 128333 10477 8,16 700 245350 68784 6311 9,18 176566 14279 8,09 800 320400 89881 7953 8,85 230519 18557 8,05 900 405450 125472 10415 8,30 279978 23175 8,28 1000 500500 154998 12491 8,06 345502 28631 8,29 Tabela 3.1: N´umero m´edio de faces de sombra e luz em pol´ıgonos simples.

Para computar as faces de sombra e luz, dois algoritmos foram implementados. O primeiro consiste em utilizar as fun¸c˜oes de arranjo do CGAL para encontrar todas as faces da subdivis˜ao planar e ent˜ao verificar o bordo de cada uma para determinar se s˜ao de sombra interna ou luz externa. O segundo algoritmo ´e o de varredura descrito na se¸c˜ao anterior. Em m´edia, o algoritmo de varredura foi 27% ± 8% mais r´apido do que o que utiliza o arranjo. Os resultados podem ser vistos na Figura 3.9. As instˆancias inferiores a 100 v´ertices n˜ao foram adicionadas ao gr´afico por levarem menos de 1s em ambos algoritmos. Nenhuma das instˆancias levou mais de dois minutos para ser computada por qualquer dos algoritmos.

3.4. Avalia¸c˜ao Experimental 27 0 50 100 150 200 250 300 350 400 20 40 60 80 100 200 300 400 500 600 700 800 900 1000 Faces M ilh ar es Vértices

Internas Sombra Internas Externas Luz Externas

Figura 3.8: N´umero m´edio de faces de sombra e luz em pol´ıgonos simples.

limite de 20 minutos, o novo modelo, ao reduzir o n´umero de restri¸c˜oes para 1, 1% ± 0, 5% conseguiu resolver todas as instˆancias do conjunto inicial, de at´e 100 v´ertices. Por´em, para todas as instˆancias de 200 v´ertices ou mais, o tempo limite de 20 minutos foi atingido. Apesar da redu¸c˜ao significativa do n´umero de restri¸c˜oes, instˆancias de 200 v´ertices, por exemplo, possuem em m´edia mais de 700.000 restri¸c˜oes, que ´e um n´umero consideravel- mente elevado para o resolvedor.

A partir do modelo reduzido, nas pr´oximas se¸c˜oes descreveremos os experimentos realizados que permitiram resolver instˆancias de centenas de v´ertices.

3.4. Avalia¸c˜ao Experimental 28 0 20 40 60 80 100 120 140 100 200 300 400 500 600 700 800 900 1000 Temp o (s) Vértices Arranjo Varredura

Figura 3.9: Tempo para computar as faces de sombra e luz atrav´es do arranjo e pelo algoritmo de varredura.

Cap´ıtulo 4

Resolu¸ao Iterativa do Modelo 2

Neste cap´ıtulo, aprimoraremos ainda mais o modelo de programa¸c˜ao linear inteira pro- posto no Cap´ıtulo 2 e refinado atrav´es do uso de faces de sombra e luz apresentado no cap´ıtulo anterior. Al´em disso, apresentaremos uma forma mais efetiva de resolver o modelo a fim de obtermos um algoritmo mais eficiente, capaz de resolver instˆancias de tamanho consideravelmente maior.

4.1

Algoritmo Iterativo

No modelo proposto, para cada face f de sombra interna e h de luz externa, a solu¸c˜ao precisa conter pelo menos um guarda que separa f de h, ou seja, que cobre f mas n˜ao

h. Pela geometria do problema, tal guarda provavelmente ´e capaz de separar h de outras faces de sombra internas. Como o principal limitante para resolver instˆancias grandes ´e a quantidade de restri¸c˜oes no modelo, mostraremos uma forma iterativa de resolvˆe-lo que tenta aproveitar esse aspecto geom´etrico.

Pelo Lema 2, apresentado na Se¸c˜ao 1.3.2, para toda aresta e de um pol´ıgono P , qualquer solu¸c˜ao vi´avel para P inclui um guarda cujo cone de transmiss˜ao cont´em a aresta

e em sua borda. A partir desse lema, podemos adicionar um novo conjunto de restri¸c˜oes no modelo, como pode ser visto a seguir. Para descrever esta formula¸c˜ao, denota-se por

E o conjunto de arestas do pol´ıgono e por Ge o conjunto de guardas que possui a aresta

4.1. Algoritmo Iterativo 30 min X g∈G xg, X g∈Nf h xg ≥ 1, ∀f ∈ S, ∀h ∈ L, (4.1) X g∈Ge xg ≥ 1, ∀e ∈ E, (4.2) xg ∈ {0, 1}, ∀g ∈ G.

Vamos olhar para o crescimento do n´umero de restri¸c˜oes no modelo acima comparado ao tamanho da instˆancia, ou seja, `a quantidade de arestas no pol´ıgono. Quanto `as res- tri¸c˜oes rec´em adicionadas, para um pol´ıgono de n arestas, temos apenas n restri¸c˜oes (4.2), uma para cada aresta. No entanto, como h´a uma restri¸c˜ao (4.1) para cada par de faces de sombra interna e luz externa, e pode haver O(n2) dessas faces, temos O(n4) dessas

restri¸c˜oes.

Experimentalmente, observamos que se as restri¸c˜oes (4.2) s˜ao satisfeitas, automatica- mente a maioria das restri¸c˜oes (4.1) tamb´em o s˜ao. Atrav´es desta observa¸c˜ao, idealizamos o seguinte algoritmo iterativo para resolver o modelo:

1. Carregue o modelo sem as restri¸c˜oes (4.1). 2. Resolva o modelo.

3. Se a solu¸c˜ao for vi´avel para o problema original: pare o algoritmo, retornando a solu¸c˜ao ´otima corrente.

4. Adicione as restri¸c˜oes (4.1) violadas na solu¸c˜ao corrente. 5. V´a para o passo 2.

Lema 6. O algoritmo iterativo para e sua solu¸c˜ao ´e ´otima.

Demonstra¸c˜ao. A cada itera¸c˜ao, se o algoritmo n˜ao parou, alguma restri¸c˜ao do modelo original foi violada e adicionada ao modelo. Como o n´umero de restri¸c˜oes ´e finito, no pior caso, quando todas as restri¸c˜oes forem adicionadas, a solu¸c˜ao ser´a vi´avel e o algoritmo terminar´a.

No Passo 3, se uma solu¸c˜ao ´e vi´avel, ou seja, n˜ao viola nenhuma das restri¸c˜oes do modelo original, ela ´e ´otima, uma vez que adicionar as restri¸c˜oes (4.1) que faltam ao modelo n˜ao pode diminuir a quantidade de guardas utilizados.

4.2. Avalia¸c˜ao Experimental 31 0,08s 0,24s 0,52s 0,79s 0,91s 3,72s 7,81s 14,0s 40,9s 89,0s 157s 267s 382s 568s 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 20 40 60 80 100 200 300 400 500 600 700 800 900 1000 Temp o Vértices

Algoritmo de Varredura Solução Iterativa do Modelo

Figura 4.1: Tempo m´edio do algoritmo de varredura em compara¸c˜ao `a resolu¸c˜ao iterativa do modelo.

4.2

Avalia¸ao Experimental

Testamos o algoritmo iterativo para todas as 420 instˆancias geradas, que consistem de 150 instˆancias no intervalo [20, 100], em incrementos de 20, e 270 instˆancias no intervalo [200, 1000], em incrementos de 100.

Como nosso algoritmo possui duas fases, a computa¸c˜ao das faces de luz e sombra, realizada atrav´es do algoritmo de varredura, e a solu¸c˜ao iterativa do modelo, mostramos no gr´afico da Figura 4.1 o tempo m´edio percentual gasto em cada fase. Al´em disso, o tempo m´edio total, considerando ambas as fases, pode ser visto acima de cada barra.

´

E not´avel que as solu¸c˜oes para todas as instˆancias foram encontradas em menos de dez minutos. Al´em disso, encontrar as faces de sombra e luz levou, em m´edia, 53% ± 25% do tempo total. Se considerarmos apenas as instˆancias com 600 v´ertices ou mais, esse percentual ´e, em m´edia, 19% ± 5% do tempo total.

A Tabela 4.1 resume os resultados obtidos para o algoritmo iterativo. Se compararmos a quantidade de restri¸c˜oes no modelo completo, utilizando apenas as faces de sombra interna e luz externa, com a quantidade de restri¸c˜oes na ´ultima itera¸c˜ao, o algoritmo

4.2. Avalia¸c˜ao Experimental 32

iterativo reduz em 98, 1% ± 5, 8% as restri¸c˜oes do modelo. Se considerarmos apenas as instˆancias com 500 v´ertices ou mais, essa redu¸c˜ao ´e, em m´edia, de 99, 991% ± 0, 005%. O n´umero de restri¸c˜oes remanescentes ´e surpreendentemente baixo, principalmente se considerarmos que, por usar somente as faces de sombra e luz, como vimos na Se¸c˜ao 3.4, este modelo j´a ´e 99, 23% ± 0, 08% menor do que o modelo que considera todas as faces.

Valor Restri¸c˜oes Tempo

do Algoritmo (s) V´ertices Otimo´ Itera¸c˜oes Total Ultima Itera¸c˜´ ao Varredura Iterativo

20 10,9 2,7 196 43,2 0,06 0,03 40 21,7 3,5 2.731 114,8 0,20 0,04 60 32,3 3,4 8.497 185,8 0,41 0,11 80 43,0 3,8 28.164 268,1 0,71 0,09 100 53,5 4,0 59.692 372,8 0,64 0,27 200 105,7 4,8 765.468 1.017,7 2,82 0,90 300 156,8 5,0 3.527.374 1.889,8 5,67 2,14 400 208,6 5,6 10.578.548 3.032,6 8,90 5,13 500 259,8 5,7 24.632.810 4.370,4 15,30 25,60 600 310,9 6,5 50.436.878 6.103,5 22,50 66,51 700 362,7 6,8 90.115.469 7.805,1 38,00 119,96 800 412,6 7,6 147.584.621 9.598,8 47,73 219,79 900 463,3 6,6 241.368.525 12.269,6 63,40 319,31 1000 514,1 7,4 357.630.821 14.690,6 71,60 497,34

Tabela 4.1: Valor ´otimo, n´umero de itera¸c˜oes, tamanho do modelo e tempo m´edio para pol´ıgonos simples.

Estes resultados mostram que nossa abordagem ´e muito eficiente para encontrar solu¸c˜oes ´

otimas para o NWLP para pol´ıgonos com algumas centenas de v´ertices, uma vez que elas podem ser obtidas em poucos minutos. O fato do algoritmo de varredura requerer cerca de metade do tempo total pode parecer surpreendente a primeira vista, uma vez que sua complexidade ´e polinomial, e executado uma ´unica vez, enquanto que o modelo PLI corresponde a um set covering, e, portanto, um problema NP-dif´ıcil, o qual ´e resolvido em m´ultiplas itera¸c˜oes. Por´em, a cada itera¸c˜ao resolve-se um modelo muito menor do que o modelo original, e, como observado anteriormente em experimentos envolvendo o problema cl´assico da galeria de arte (veja [11]), os atuais resolvedores de PLI permitem encontrar solu¸c˜oes ´otimas de muitos problemas dif´ıceis.

Como o tempo do algoritmo iterativo est´a diretamente relacionado `a quantidade de itera¸c˜oes, um ponto importante a ser analisado ´e o incremento do n´umero de itera¸c˜oes conforme o tamanho das instˆancias aumenta. Essa an´alise pode ser feita atrav´es dos dados

4.2. Avalia¸c˜ao Experimental 33 0 2 4 6 8 10 12 14 20 40 60 80 100 200 300 400 500 600 700 800 900 1000 It er õe s Vértices

Figura 4.2: Quantidade de itera¸c˜oes necess´arias para resolver o modelo.

da Figura 4.2. Em m´edia, 5, 2 ± 1, 5 itera¸c˜oes foram suficientes para alcan¸car o ´otimo. Al´em do mais, nenhuma instˆancia precisou de mais do que 12 itera¸c˜oes.

Um resultado interessante ´e a quantidade de guardas numa solu¸c˜ao ´otima em rela¸c˜ao ao n´umero de v´ertices do pol´ıgono de entrada. Pelo Teorema 1, para pol´ıgonos sem arestas colineares, temos que dn/2e ´e um limitante inferior para o n´umero de guardas numa solu¸c˜ao ´otima. A Figura 4.3 mostra que, para os pol´ıgonos simples em nosso benchmark, o n´umero de guardas requeridos em solu¸c˜oes ´otimas se aproxima de dn/2e conforme n aumenta.

No Cap´ıtulo 5 apresentaremos uma ´ultima modifica¸c˜ao no nosso algoritmo, que o torna ainda mais eficiente.

4.2. Avalia¸c˜ao Experimental 34 0,510 0,515 0,520 0,525 0,530 0,535 0,540 0,545 0,550 20 40 60 80 100 200 300 400 500 600 700 800 900 1000 Gua rdas/V értices Vértices

Figura 4.3: Raz˜ao entre n´umero de guardas em pol´ıgonos simples e a quantidade de v´ertices.

Cap´ıtulo 5

Resolu¸ao Iterativa Eficiente

Nesta cap´ıtulo, apresentaremos a vers˜ao final de nosso algoritmo. Discutiremos alguns resultados sobre a resolu¸c˜ao iterativa do modelo descrita no cap´ıtulo anterior, e, a partir da´ı, mostraremos uma forma mais eficiente de implementar o algoritmo, alterando o conjunto de restri¸c˜oes presentes na primeira itera¸c˜ao.

Al´em disso, estenderemos a avalia¸c˜ao experimental para uma nova classe de instˆancias, incluindo em nossa an´alise pol´ıgonos com buracos.

Documentos relacionados