• Nenhum resultado encontrado

Um algoritmo pseudo-polinomial para o problema de geração de padrões de cortes guilhotinados em placas

N/A
N/A
Protected

Academic year: 2021

Share "Um algoritmo pseudo-polinomial para o problema de geração de padrões de cortes guilhotinados em placas"

Copied!
61
0
0

Texto

(1)

Instituto de Computa¸

ao

Departamento de Ciˆ

encia da Computa¸

ao

Leonardo da Rocha Perazzini

UM ALGORITMO PSEUDO-POLINOMIAL PARA

O PROBLEMA DE GERA ¸

C ˜

AO DE PADR ˜

OES DE

CORTES GUILHOTINADOS EM PLACAS

Niter´

oi-RJ

2017

(2)

LEONARDO DA ROCHA PERAZZINI

UM ALGORITMO PSEUDO-POLINOMIAL PARA O PROBLEMA DE GERA ¸C ˜AO

DE PADR ˜OES DE CORTES GUILHOTINADOS EM PLACAS

Trabalho submetido ao Curso de Bachare-lado em Ciˆencia da Computa¸c˜ao da Universi-dade Federal Fluminense como requisito par-cial para a obten¸c˜ao do t´ıtulo de Bacharel em Ciˆencia da Computa¸c˜ao.

Orientador: Prof. U´everton dos Santos Souza

Niter´oi-RJ 2017

(3)
(4)
(5)

Dedico este trabalho a todos os amigos e fa-miliares que estiveram ao meu lado durante essa jornada.

(6)

Agradecimentos

Aos meus pais Mauricio Perazzini e Angela Aparecida da Rocha e meu irm˜ao Vin´ıcius que fizeram de tudo e n˜ao mediram esfor¸cos para que eu chegasse at´e aqui.

A minha namorada Dayene Sant’Ana por me apoiar e incentivar durante os per´ıo-dos que escrevi e produzi este trabalho e em todas as situa¸c˜oes em que eu precisei.

Ao meus grandes amigos Erick Vinicius, Daniel Derlando , Luiz Renato e Ralf Schroeder que sempre me apoiaram durante essa trajet´oria na UFF.

Ao professor orientador U´everton dos Santos Souza, pela paciˆencia, dedica¸c˜ao, orienta¸c˜ao e motiva¸c˜ao durante todas as etapas, que tornaram poss´ıvel a conclus˜ao deste projeto e monografia.

A todos que de alguma forma contribu´ıram para o meu desenvolvimento, serei eternamente grato.

(7)

Resumo

Em um processo de produ¸c˜ao de pe¸cas a partir de uma placa retangular P , o problema de gera¸c˜ao de padr˜oes de cortes guilhotinados consiste em determinar uma sequˆencia de cortes a serem feitos por uma guilhotina em P (padr˜ao de corte) de modo a: gerar um subconjunto de pe¸cas; minimizando o desperd´ıcio de material; e consequen-temente maximizando o lucro da produ¸c˜ao. Motivado pela relevˆancia deste problema na ind´ustria, este trabalho tem como objetivo combinar os conceitos de grafos And-Or e programa¸c˜ao dinˆamica para desenvolver um algoritmo capaz de resolver tal problema em tempo pseudo-polinomial. A utiliza¸c˜ao de percursos em grafos And-OR para produ¸c˜ao de um algoritmo pseudo-polinomial, al´em de ser uma abordagem que ainda n˜ao havia sido utilizada na literatura, produz um algoritmo cuja complexidadade de pior caso coincide com o estado da arte para o problema.

Palavras-chave: corte bidimensional guilhotinado em placas, padr˜ao de corte, grafos And-Or, pseudo-polinomial, programa¸c˜ao dinˆamica

(8)

Sum´

ario

Resumo vii

Lista de Figuras x

1 Introdu¸c˜ao 1

2 Conceitos Preliminares 3

2.1 An´alise de Complexidade de Algoritmos . . . 3

2.2 Complexidade Computacional . . . 5

2.3 Algoritmos Pseudo-Polinomiais . . . 8

2.4 Programa¸c˜ao Dinˆamica . . . 10

2.5 Problema da Mochila . . . 14

3 Corte Bidimensional Guilhotinado 21 3.1 Introdu¸c˜ao . . . 21

3.2 NP-Dificuldade do Problema do Corte Bidimensional Guilhotinado . . . . 23

3.3 Solu¸c˜ao por grafo And-Or . . . 25

4 Um algoritmo pseudo-polinomial 31 4.1 Prova do algoritmo Pseudo-Polinomial . . . 44

4.1.1 O tempo de execu¸c˜ao do algoritmo . . . 44

4.1.2 O tempo de execu¸c˜ao da cria¸c˜ao do grafo . . . 45

4.2 O tamanho do grafo . . . 46

5 Conclus˜ao 49

(9)

Lista de Figuras

1.1 Exemplo de corte de placa para obter uma pe¸ca . . . 2

2.1 Conjuntos P = N P ou P 6= N P . . . 9

2.2 Algoritmo Counting Sort . . . 11

2.3 Arvore de Recurs˜´ ao . . . 13

2.4 Algoritmo Problema da Mochila Preenchimento . . . 16

2.5 Exemplo Problema da Mochila - Itens . . . 18

2.6 Exemplo Problema da Mochila - Valores Base . . . 18

2.7 Exemplo Problema da Mochila - Algoritmo . . . 20

3.1 Exemplo Cutting Problema - 8 Stage . . . 23

3.2 Redu¸c˜ao Problema da Mochila para Problema do Corte Bidimensional Gui-lhotinado . . . 24

3.3 Exemplo de n´os OU - Grafo And-Or . . . 26

3.4 Exemplo de n´os E - Grafo And-Or . . . 26

3.5 Placa, pe¸cas e padr˜ao de corte . . . 27

3.6 Grafo com um caminho de uma solu¸c˜ao . . . 27

3.7 Limite inferior na estrat´egia de Grafo And-Or para resolu¸c˜ao do Problema do Corte Bidimensional Guilhotinado . . . 28

3.8 Verifica¸c˜ao de corte na estrat´egia de Grafo And-Or para resolu¸c˜ao do Pro-blema do Corte Bidimensional Guilhotinado . . . 30

4.1 Exemplo da transforma¸c˜ao do problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas para grafo. . . 32

4.2 Exemplo de transforma¸c˜ao impl´ıcita do problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas para grafo. . . 33

(10)

4.3 Exemplo de transforma¸c˜ao para grafo And-Or do problema de Gera¸c˜ao de

Padr˜oes de Cortes Guilhotinados em Placas. . . 34

4.4 Exemplo de Ordena¸c˜ao Topol´ogica. . . 35

4.5 Exemplo de uma placa 3x3 para um grafo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas. . . 36

4.6 Exemplo de uma placa 3x3 para um grafo And-Or -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas. . . 37

4.7 Exemplo de uma placa 3x3 para um grafo And-Or ordenado topol´ ogica-mente -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas. 38 4.8 Passo 1 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 39

4.9 Passo 2 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 39

4.10 Passo 3 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 40

4.11 Passo 4 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 40

4.12 Passo 5 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 41

4.13 Passo 6 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 42

4.14 Passo 7 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 42

4.15 Passo 8 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 43

4.16 Passo 9 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas. . . 43

4.17 Subgrafo Solu¸c˜ao - Algoritmo - problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas. . . 44

4.18 Cria¸c˜ao do grafo And-Or - Etapa de cria¸c˜ao dos n´os And e arestas. . . 46

4.19 ´Area considerada para criar as pe¸cas. . . 47

(11)

Cap´ıtulo 1

Introdu¸

ao

O problema denominado Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas, estudado neste trabalho, consiste em determinar a “melhor” forma de cortar, atrav´es de uma guilhotina, um material ou placa retangular, a fim de produzir um cojunto de unidades menores.

No ramo industrial este problema aparece diversas vezes nos processos de corte de mat´erias-primas para a produ¸c˜ao de objetos menores especificados por clientes. Geral-mente os materiais a serem cortados s˜ao placas de madeira, chapas de a¸co, fibras de vidro, tecidos, pe¸cas de couro, entre outros.

Esse problema tem sido amplamente estudado na literatura desde meados de 1960, dentre esses trabalhos, podemos citar Gilmore and Gomory (1964) [1], Herz (1972) [2], Beasley (1985) [3], Morabito, Arenales e Arcaro (1992) [4], Silveira e Morabito (2002) [5], Da Bianco e da Silva (2010) [6].

O problema Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas considera apenas placas e pe¸cas bidimensionais, envolvendo portanto apenas duas dimens˜oes rele-vantes para a sua resolu¸c˜ao (comprimento e largura). O problema considera apenas cortes guilhotinados, ou seja cortes que dividem uma placa retangular em duas outras placas re-tangulares menores. Tal restri¸c˜ao segue da caracter´ıstica dos equipamentos comumente utilizados no mundo real. Notem que um corte guilhotinado produz dois novos retˆangulos onde os retˆangulos resultantes possuem uma dimens˜ao de comprimento igual ao da pe¸ca de origem. Al´em disso, nesse problema n˜ao h´a limita¸c˜ao de n´umero de cortes que podem ser feitos para obten¸c˜ao de uma pe¸ca a partir de uma placa.

(12)

Figura 1.1: Exemplo de corte de placa para obter uma pe¸ca (ilustra¸c˜ao retirada de [5]). Devido `a dificuldade do problema e por ele ser classificado como NP-Dif´ıcil, neste trabalho foi necess´ario um estudo mais aprofundado sobre An´alise de Complexidade, al´em de problemas e t´ecnicas que pudessem ajudar na resolu¸c˜ao e entendimento do problema. Por fim, combinando os conceitos de grafo And-Or e programa¸c˜ao dinˆamica, desenvol-vemos um algoritmo exato capaz de resolver o problema em tempo pseudo-polinomial, sendo esta a principal contribui¸c˜ao deste trabalho.

Sendo assim, os cap´ıtulos restantes desta monografia s˜ao dividos da seguinte forma. No Cap´ıtulo 2 introduzimos os conceitos te´oricos relevantes para o desenvolvimento do trabalho, tais como conceitos associados a complexidade e an´alise de algoritmos e exem-plifica¸c˜oes - construindo assim um conhecimento preciso para a produ¸c˜ao do nosso al-goritmo; no Cap´ıtulo 3 apresentamos formalmente o problema Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas e descrevemos como o mesmo ´e comumente solucionado na literatura; No Cap´ıtulo 4 criamos uma solu¸c˜ao para o problema e provamos que seu tempo de execu¸c˜ao ´e pseudo-polinomial; por fim aprensentamos as considera¸c˜oes finais.

(13)

Cap´ıtulo 2

Conceitos Preliminares

2.1

An´

alise de Complexidade de Algoritmos

A fim de tornar o trabalho autocontido, nessa se¸c˜ao ser´a apresentado um recorte dos conceitos de An´alise e Complexidade de Algoritmos apresentados em [7].

Um algoritmo ´e um processo sistem´atico para a solu¸c˜ao de um problema, sendo esse processo de vital importˆancia para problemas a serem resolvidos por computadores. Existem dois t´opicos b´asicos no estudo de algoritmos: a corre¸c˜ao e a an´alise. A corre¸c˜ao consiste na verifica¸c˜ao da exatid˜ao do algoritmo para resolver o problema proposto, sendo realizado atrav´es de uma prova mat´ematica. A an´alise busca a obten¸c˜ao de ”vari´aveis”que possam avaliar a eficiˆencia do algoritmo em rela¸c˜ao a tempo de execu¸c˜ao e mem´oria utilizada no processo de resolu¸c˜ao do problema [7].

O tempo de execu¸c˜ao de um algoritmo pode ser determinado de duas formas: m´etodo emp´ırico e m´etodo anal´ıtico. O primeiro trata de obter o tempo atrav´es da execu¸c˜ao do algoritmo por meio de diversos tipos de entrada. Em contrapartida, o segundo modo obt´em uma ordem de grandeza do tempo de execu¸c˜ao, isto ´e , uma express˜ao mat´ematica que traduza o comportamento do tempo de um algoritmo. Ao contr´ario do m´etodo emp´ırico, o an´alitico independe de um computador, linguagem ou compilador empregados, para se saber o tempo de execu¸c˜ao [7].

As seguintes simplifica¸c˜oes s˜ao introduzidas para que o modelo an´alitico seja obtido [7]:

– Supor que a quantidade de dados manipulados pelo algoritmo seja suficientemente grande, isto ´e, a entrada dos algoritmos s´o ser˜ao avaliadas se tiverem comportamento

(14)

assint´otico ( quantidade de dados tender a infinito).

Consequentemente, n˜ao s˜ao consideradas constantes aditivas ou multiplicativas nas express˜oes mat´ematicas obtidas.

Um algoritmo opera a partir de uma entrada para produzir uma sa´ıda, desta forma, seu tempo de execu¸c˜ao pode ser descoberto em fun¸c˜ao da entrada. O processo de exe-cu¸c˜ao de um algoritmo pode ser dividido em etapas elementares, os passos. Cada passo consiste na execu¸c˜ao de um conjunto fixo de opera¸c˜oes b´asicas cujo tempo de execu¸c˜ao ´e constante. A opera¸c˜ao com maior frequˆencia na execu¸c˜ao do algoritmo ´e denominada opera¸c˜ao dominante. Como a express˜ao de tempo de execu¸c˜ao do algoritmo ´e obtida desconsiderando constantes aditivas e multiplicativas, e consideram-se apenas os passos que sejam opera¸c˜os dominantes [7]. Assim sendo, a express˜ao mat´ematica que representa e avalia o tempo de execu¸c˜ao ´e uma fun¸c˜ao que fornece o n´umero de passos (opera¸c˜os dominantes) efetuados pelo algoritmo a partir da uma entrada.

A seguir apresentamos a no¸c˜ao de complexidade de tempo de um algoritmo con-forme apresentado por Jayme Luiz Szwarcfiter e Lilian Markenzon em [7]:

Defini¸c˜ao 1. ( [7] ) Seja A um algoritmo, { E1,...,Em } o conjunto de todas as entradas

poss´ıveis de A. Denote por ti, o n´umero de passos efetuados por A, quando a entrada for

Ei. Definem-se:

• Complexidade do pior caso = maxEi∈E {ti}

• Complexidade do melhor caso = minEi∈E {ti}

• Complexidade do caso m´edio = P

1≤i≤m pi ti,

onde pi ´e a probabilidade de ocorrˆencia da entrada Ei

A nota¸c˜ao O ´e utilizada para exprimir no¸c˜oes de complexidades, podendo ser de pior, melhor ou caso m´edio. Sejam f, h fun¸c˜oes reais positivas de v´ariavel inteira n. Diz-se que f ´e O(h), registrando f = O(h), quando existir uma constante c > 0 e um valor inteiro n0, de modo que

n > n0 ⇒ f (n) ≤ c.h(n) (2.1)

Ou seja, a fun¸c˜ao h atua como limite superior para valores assint´oticos da fun¸c˜ao f. A seguir alguns exemplos retirado de [7] exemplificando a nota¸c˜ao O.

(15)

f = n2− 1 ⇒ f = O(n2) f = n2− 1 ⇒ f = O(n3)

f = 403 ⇒ f = O(1)

f = 5 + 2 log2n + 3 log22n ⇒ f = O(log22n) f = 5 + 2 log2n + 3 log22n ⇒ f = O(n) f = 3n + 5 log2n + 2 log22n ⇒ f = O(n)

f = 5.2n+ 5n10 ⇒ f = O(2n)

Sabendo que a express˜ao f = O(h) tem o mesmo significado que ”f ≤ h”, precisamos definir o conceito que signifique ”f ≥ h”.Logo, temos que f = Ω(h) se

n > n0 ⇒ f (n) ≥ c.h(n) (2.2)

2.2

Complexidade Computacional

A an´alise de complexidade de algoritmos ´e estudada na an´alise de algoritmos es-pec´ıficos. A teoria da complexidade, por sua vez, estuda a classifica¸c˜ao de problemas com base na complexidade dos poss´ıveis algoritmos que os resolvem.

Um algoritmo ´e qualificado como sendo polinomial quando sua complexidade ´e uma fun¸c˜ao polinomial no tamanho da entrada do problema, sendo assim, se a fun¸c˜ao for exponencial ou fatorial, o algoritmo tamb´em ser´a exponencial ou fatorial [8]. Um algoritmo ´e eficiente quando sua complexidade ´e um polinˆomio no tamanho da entrada. Em outras palavras, para um algoritmo ser polinomial, o n´umero de passos que ele deve efetuar no pior caso, n˜ao deve ultrapassar um valor polinomial com rela¸c˜ao `a entrada.

(16)

Isto ´e, o n´umero de passos efetuado pelo algoritmo, para qualquer que seja a entrada, deve ser menor ou igual a nc , onde n ´e o tamanho da entrada e c ´e uma constante.

Podemos citar alguns exemplos de algoritmos de busca e ordena¸c˜ao e suas comple-xidades:

1 – Busca Sequencial – O(n) – Polinomial 2 – Busca Bin´aria – O(log2n) – Polinomial 3 – Ordena¸c˜ao Bolha – O(n2) – Polinomial

4 – Ordena¸c˜ao MergeSort – O(nlog2n) – Polinomial

Algoritmos de complexidade exponenciais, possuem fun¸c˜ao cn, sendo c>1.

Algoritmos com complexidade n˜ao-polinomial demandam tal quantidade de tempo para execu¸c˜ao, que mesmo instˆancias de tamanho relativamente pequeno, n˜ao podem ser resolvidos sem ter executado um longo tempo para sua resolu¸c˜ao. Na tabela 2.2, podemos visualizar os gastos para alguns exemplos de complexidade.

Tabela 2.1: Tabela de Complexidades. Considere que cada opera¸c˜ao leve 1ms. Tabela retirada de Siang Wun Song - Universidade de S˜ao Paulo - IME/USP [9]

n f1(n)=n f2(n)=nlog2n f3(n)=n2 f4(n)=n3 f5(n)=2n

16 0.016s 0.064s 0.256s 4s 1m4s

32 0.032s 0.16s 1s 33s 46dias

512 0.512s 9s 4m22s 1d13h 10137 anos

Algoritmos podem ser classificados segundo suas complexidades, podendo ser in-decid´ıvel, intrat´avel ou trat´avel.

Problemas Indecid´ıveis s˜ao problemas t˜ao dif´ıceis que n˜ao pode ser criado nenhum algoritmo para resolvˆe-los, como por exemplo o problema da parada e Turing. Intrat´aveis s˜ao os problemas que admitem algoritmos para resolvˆe-los, mas provalvemnte n˜ao existe um algoritmo que os resolva em tempo polinomial. Trat´aveis s˜ao os problemas que pos-suem algoritmos de tempo polinomial que o resolvem. Problemas Intrat´aveis e Trat´aveis s˜ao problemas ditos decid´ıveis [8].

Os problemas tamb´em podem ser classificados como Problemas de Decis˜ao, Loca-liza¸c˜ao e Otimiza¸c˜ao.

Problemas de Decis˜ao: S˜ao aqueles que consistem na verifica¸c˜ao de determinada quest˜ao para o problema, isto ´e, verificar a existˆencia de alguma propriedade para a

(17)

entrada, tendo como resposta Sim ou N˜ao.

Problemas de Localiza¸c˜ao: S˜ao aqueles que consistem em identificar/localizar a partir da entrada, caso exista, alguma estrutura que forne¸ca uma solu¸c˜ao para o problema. Problema de Otimiza¸c˜ao: S˜ao aqueles que consistem em determinar o valor/custo da melhor solu¸c˜ao poss´ıvel entre todas as poss´ıveis solu¸c˜oes vi´aveis do problema.

Assim sendo problemas de decis˜ao s˜ao a forma mais simples de problema compu-tacional, uma vez que os de Localiza¸c˜ao e Otimiza¸c˜ao cont´em a mesma verifica¸c˜ao de existˆencia de uma solu¸c˜ao para o problema, logo o problema de decis˜ao n˜ao possui maior dificuldade dos que os outros dois. Portanto os problemas sao classificados em classes a partir do tempo necess´ario para resolvˆe-lo, e o tempo necess´ario para verificar se uma poss´ıvel estrutura da entrada ´e de fato um comprovante v´alido para a resposta/solu¸c˜ao do problema [8].

A classe P : Um problema de decis˜ao pertence `a classe P, se e apenas se ele for resolvido em tempo Polinomial por um algoritmo determin´ıstico [10]. Isto ´e, o problema aceita um algoritmo com complexidade de pior caso polinomial.

A classe NP : Um problema de decis˜ao pertence `a classe NP (nondeterministic polynomial), se o problema ´e polinomialmente verific´avel, isto ´e, o problema admite uma estrutura denominada certificado , qual podemos verificar em tempo polinomial, onde ap´os a comprova¸c˜ao de sua validade, podemos afirmar que a resposta para a quest˜ao a ser respondida ´e sim [11].

Se um problema pertence `a classe P ent˜ao ele tamb´em pertence `a classe NP, pois se um problema pode ser resolvido em tempo polinomial por um algoritmo. Uma poss´ıvel sa´ıda desse algoritmo pode ser utilizada como certificado, e sua valida¸c˜ao baseia-se em executar o algoritmo e comparar as respostas. Todo esse processo pode ser feito em tempo polinomial, portanto P ⊆ N P

Para o completo entendimento das classes NP-Completo e NP-Dif´ıcil, ´e impor-tante o estudo de redu¸c˜ao e complexidade relativas aos problemas. Como para muitos problemas em NP ´e desconhecido um algoritmo polinomial, uma boa id´eia ´e investigar a complexidade relativa dos problemas da classe NP, ou seja, verificar se um dado problema A ´e mais f´acil ou mais dif´ıcil que um outro problema B em NP. Usando a id´eia de redu-¸c˜ao polinomial, dizemos que um problema A n˜ao ´e mais dif´ıcil que ( ou polinomialmente redut´ıvel a) um problema B, se existe um algoritmo que:

(18)

• Transforma uma entrada Io do problema A , em tempo polinomial, numa instˆancia

f (I) do problema B.

• A resposta do problema B para a instˆancia f (I) ´e sim, se e somente se a resposta de A para a instˆancia I ´e sim.

Note que se A n˜ao ´e mais dif´ıcil que B, e B est´a na classe P, A tamb´em estar´a em P. [11]. A classe NP-Completo: Um problema de decis˜ao A ∈ NP, pertence a classe NP-Completo se todos os outros problemas em NP se transformam polinomialmente em A [8] – Fortemente NP-Completo: Quando comprovado que o problema n˜ao pode ser resolvido por um algoritmo de tempo pseudo-polinomial, a menos que P = N P – Fracamente NP-Completo: ´E quando o problema NP – Completo possui um

algoritmo pseudo-polinomial que o resolva.

A classe NP-Dif´ıcil : Um problema A pertence a classe NP-Dif´ıcil se existe um problema B em NP-Completo que pode ser transformado em A em tempo polinomial [8].

Em outras palavras, a diferen¸ca entre problemas NP-Completos e NP-Dif´ıceis ´e que para os NP-Completos temos provas de pertinˆencia na classe NP, enquanto para os NP-Dif´ıceis certificados verific´aveis em tempo polinomial n˜ao necessariamente s˜ao conhecidos [8]. Todo problema NP-completo ´e NP-Dif´ıcil. Al´em disso, problemas de otimiza¸c˜ao, cuja vers˜ao de decis˜ao ´e NP-Completo, s˜ao tamb´em considerados NP-dif´ıficeis

A grande quest˜ao da Computa¸c˜ao ´e se P = N P ? Ou seja, N P ⊆ P , o que implicaria em todos os problemas da classe NP serem trat´aveis. Veja na figura 2.1

2.3

Algoritmos Pseudo-Polinomiais

Para o estudo dos problemas propostos neste trabalho, precisamos antes entender melhor o conceito de algoritmos Pseudo-Polinomiais. Consideremos a complexidade O(n∗ M ), onde n ´e o tamanho da entrada e M ´e um inteiro da entrada. Sabemos que o inteiro M faz parte (est´a contido) na entrada e que n pode ser menor do que M . Isso ocorre porque quando dizemos que M ´e um inteiro da entrada, isto significa que o valor M ´e uma informa¸c˜ao que pode ser obtida a partir de dados da entrada. Esse valor ´e representado por uma quantidade de bits, log2M , note que M = 2log2M. Logo a entrada cont´em

(19)

Figura 2.1: Imagem representando as classes como conjuntos, caso seja P = N P ou P 6= N P .

Assim sendo um algoritmo O(n ∗ log2M ) ´e um algoritmo polinomial com rela¸c˜ao ao tamanho da entrada, mas O(n ∗ M ) pode n˜ao ser polinomial com rela¸c˜ao ao tamanho da entrada (n). Por exemplo: Sendo M = 2n ser˜ao necess´arios n bits para represent´a-lo,

sendo O(n) o tamanho da entrada, mas como a informa¸c˜ao ´e relevante para a complexidade e n˜ao como esta representada em bits, temos O(n ∗ M ) = O(n ∗ 2n) que ´e exponencial em

rela¸c˜ao ao tamanho da entrada.

Assim sendo o algoritmo ´e exponencial, mas em caso de um M “pequeno” o algo-ritmo se comporta como um algoalgo-ritmo polinomial. Um modo mais formal de defini¸c˜ao apresentada por Gennady Shmonin em [12], ´e que um algoritmo A que resolva um pro-blema de decis˜ao P ´e dito Pseudo-Polinomial quando a complexidade de A for polinomial no tamanho da entrada de P , supondo que esta seja codificada em um alfabeto un´ario. Podemos citar como exemplos de algoritmos Pseudo-Polinomiais para melhor entendi-mento do conceito, o algoritmo que resolve o Problema da Mochila que veremos com mais detalhes no cap´ıtulo 2.5 que falaremos sobre o Problema da Mochila e o algoritmo Counting Sort que resolve o problema de ordena¸c˜ao.

(20)

Exemplo

Algoritmo Counting Sort : O algoritmo consiste na ordena¸c˜ao de um vetor de valores do tipo inteiro, baseando-se em indexa¸c˜ao e n˜ao em compara¸c˜oes como algoritmos cl´assicos como Quicksort ou Bubble sort. O algoritmo parte do principio que o valor do maior elemento do vetor, k, ´e conhecido e com rela¸c˜ao ao n´umero de elementos do vetor cria-se um vetor auxiliar de k posi¸c˜oes para que o algoritmo crie um vetor auxiliar para contagem dos elementos. O ideal ´e valor de k manter-se linear, caso isso ocorra o algoritmo se comporta de forma linear, caso o k seja muito maior que o tamanho do vetor ou exponencialmente maior, o algoritmo torna-se exponencial pois a necessidade de criar e percorrer um vetor de k posi¸c˜oes faz o algoritmo ter tempo exponencial. Como a complexidade do Counting Sort al´em de depender do n´umero de elementos, tamb´em depende da grandeza do maior elemento do vetor, temos que o Counting Sort ´e um algoritmo Pseudo-Polinomial.

Abaixo podemos ver o pseudo-c´odigo e o custo dos blocos de c´odigo, retirado de [13] e uma ilustra¸c˜ao na figura 2.2 para melhor entendimento do algoritmo retirado de [14].

• O(k) - ´E criado um vetor de trabalho e se atribui o valor zero `a todas posi¸c˜oes desse vetor auxiliar

• O(n) - Nessa etapa ser´a feita a contagem do n´umero de cada elemento do intervalo. Caso o 1 aparece duas vezes, dentro da casa 1 ser´a feito o incremento duas vezes. • O(n) - Por fim, percorre-se o vetor B inserindo de forma ordenada em A, os valores

dos ´ındices de B, conforme o seu n´umero de ocorrˆencias no vetor A.

2.4

Programa¸

ao Dinˆ

amica

Problemas computacionais muitas vezes admitem rela¸c˜oes de recorrˆencias que des-crevem uma maneira de resolver o problema atrav´es da resolu¸c˜ao de subproblemas.

Essas rela¸c˜oes de recorrˆencias naturalmente sugerem algoritmos baseados em divi-s˜ao e conquista para resolver o problema, isto ´e, o problema ´e decomposto em instˆancias menores (subproblemas) que devem ser resolvidas para a solu¸c˜ao do problema principal. Por sua vez, esses subproblemas tamb´em s˜ao decompostos em outros subproblemas que

(21)

Figura 2.2: Ilustra¸c˜ao do algoritmo Counting Sort e seus passos [13].

devem ser resolvidos para que o superproblema possa ser resolvido, e assim sucessiva-mente, at´e encontrar subproblemas que possuam uma solu¸c˜ao trivial do problema (caso base), ou seja, problemas para o qual n˜ao ´e necess´ario fazer nenhuma decomposi¸c˜ao para resolvˆe-los.

Algoritmos de divis˜ao e conquista algumas vezes podem ser ineficientes, pelo fato de em sua resolu¸c˜ao, termos que resolver um mesmo subproblema desnecessariamente pois em alguns casos, um dado problema j´a pode ter sido resolvido em um instante anterior, logo resolucionar um mesmo problema seria uma computa¸c˜ao desnecess´aria.

Uma alternativa para contornar esse tipo de problema ´e utilizar o m´etodo da pro-grama¸c˜ao dinˆamica. Por defini¸c˜ao o paradigma de program¸c˜ao dinˆamica possui algumas carecter´ısticas distintas, sendo que para existir um modo de aplicar a programa¸c˜ao dinˆ a-mica, o problema tamb´em deve apresentar uma recorrˆencia , outra caracter´ıstica ´e que o algoritmo constru´ıdo deve de algum modo percorrer algum tipo de estrutura de dados como uma tabela, onde inicializando os valores dos subproblemas triviais na tabela,

(22)

pode-mos em alguma ordem descobrir o valor dos outros subproblemas, apenas consultando os resultados j´a gravados na tabela que s˜ao necess´arios para a resolu¸c˜ao do problema atual. Geralmente o tempo de execu¸c˜ao do algoritmo ´e linearmente proporcional ao tamanho da tabela [15].

Exemplo

Para exemplificarmos o uso da programa¸c˜ao dinˆamica usaremos o problema ma-t´ematico da sequˆencia de fibonacci e os m´etodos de resolu¸c˜ao do problema. A seguir apresentamos a defini¸c˜ao formal da sequˆencia de fibonacci.

Defini¸c˜ao 2. Sequˆencia de Fibonacci:

(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...) F´ormula de Recorrˆencia:

F (n) =          1 se n = 1 1 se n = 2 F (n − 1) + F (n − 2) se n ≥ 3

Podemos resolver o problema por Divis˜ao e Conquista (Top-Down) ou Programa¸c˜ao Dinˆamica (Bottom-Up).

Solu¸c˜ao Recursiva (Divis˜ao e Conquista): i n t f i b ( c o n s t i n t n ) { Se ( n <= 2 ) r e t u r n a 1 ; E n t o r e t u r n a f i b ( n−1 ) + f i b ( n−2 ) ; }

Na Figura 2.3 ser visto a ´arvore de recurs˜ao do problema da sequˆencia de fibonacci. Agora vamos calcular um limite inferior para o tamanho da ´arvore de recurs˜ao constru´ıda pelo algoritmo.

(23)

Figura 2.3: ´Arvore de Recurs˜ao Fibonacci [16]. • C´alculo limite inferior

T (0) = T (1) = 1

Sendo T (n − 1) ≥ T (n − 2) temos: T (n) ≥ 2T (n − 2) + c k = 1

T (n) ≥ 2{2T (n − 4) + c} + c ( Uma instˆancia chamando uma subinstˆancia menor) T (n) ≥ 4T (n − 4) + 3c k = 2

T (n) ≥ 8T (n − 6) + 7c k = 3 T (n) ≥ 16T (n − 8) + 15c k = 4 T (n) ≥ 32T (n − 10) + 31c k = 5 T (n) ≥ 2KT (n − 2K) + (2K − 1)c

Fazendo n − 2K = 0 temos K = n/2 Logo: T (n) ≥ 2n/2T (0) + (2n/2− 1)c

T (n) ≥ (1 + c)2n/2+ c Portanto T (n) = Ω(2n/2)

Podemos assim concluir que o algoritmo de fibonacci recursivo possui complexidade Ω(2n/2) provando assim que ´e n˜ao ´e uma boa maneira para resolver o problema. Na

(24)

pois j´a haviam sido feitas em outro momento, como por exemplo o c´alculo de F ib(2) trˆes vezes na ´arvore.

Abaixo podemos ver um algoritmo de Programa¸c˜ao Dinˆamica (Bottom-Up) que resolve o problema da sequˆencia de fibonacci.

Solu¸c˜ao Iterativa (Programa¸c˜ao Dinˆamica ): v e t o r f i b ( i n t n ) { v e t o r V; V [ 1 ] := 1 ; V [ 2 ] := 1 ; Para i :=3 a t ´e n f a ¸c a Vvi ] := V[ i −1] + V[ i − 2 ] ; r e t u r n V; }

O algoritmo para descobrir o valor do i-´esimo elemento da sequˆencia de Fibonacci F [i], deve para cada i, onde 1 ≤ i ≤ n, percorrer a tabela ( no caso, um vetor) e ir preenchendo o valor do F [i] na tabela com os dois elementos anteriores j´a preenchidos no vetor, iterando em i at´e chegar em n e descobrir o valor desejado do i-´esimo somando os dois elementos anteriores.

2.5

Problema da Mochila

Nesta sess˜ao estudaremos uma variante do Problema da Mochila, o Problema da Mochila Booleana ou Problema da Mochila Zero-Um. O problema consiste em dada uma mochila de capacidade W , sendo este um valor inteiro, e um conjunto de n itens cada um com tamanho wi (inteiro) e um valor ci associado, queremos determinar um conjunto de

itens a serem colocados na mochila de modo a maximizar o valor total transportado pela mochila, respeitando a sua capacidade limite [17]. O problema ´e dito Zero-Um pelo fato de cada item ter apenas dois status, o objeto est´a ou n˜ao est´a na mochila, n˜ao pode ser colocado uma parte/fra¸c˜ao do objeto na mochila.

(25)

• Pn

i=1wi ≤ P

• 0 < wi < W , para todo i = 1,..., n.

O Problema da Mochila admite uma subestrutura ´otima, sendo ela descrita como [17]:

• Se o item n estiver na solu¸c˜ao ´otima, o valor desta solu¸c˜ao ser´a cn mais o valor da

melhor solu¸c˜ao do problema da mochila com capacidade de W − wi considerando

apenas n − 1 primeiro itens.

• Se o item n n˜ao estiver na solu¸c˜ao ´otima, o valor ser´a dado pelo valor da melhor solu¸c˜ao do problema da mochila com capacidade W considerando apenas os w − 1 primeiros itens.

• Seja z[k,d] o valor ´otimo do problema da mochila considerando-se uma capacidade d para a mochila que cont´em um subconjunto dos k primeiros itens da instˆancia da mochila original.

• Assim obtemos a formula de recorrˆencia de z[k,d] para todo k e d:

z[k,d] =                0 se k = 0 0 se d = 0 z[k − 1,d] se wk> d max{z[k − 1,d],z[k − 1,d − wk] + ck} se wk ≤ d

– Se k = 0 a mochila tem 0 itens para serem colocados nela independente do tamanho dela.

– Se d = 0 a mochila tem tamanho 0 independente de quantos itens existam para ser colocados.

– Se wk > d o k-´esimo item n˜ao cabe na mochila, logo devemos olhar para os

”k-1”primeiros itens.

– Se wk ≤ d c´alcula o m´aximo entre os casos de o item estar ou n˜ao na mochila.

Dada a recorrˆencia ´e possivel construirmos um algoritmo recursivo para o problema, mas em seu pior caso temos a complexidade de Ω(2n/2), isto ´e, n˜ao ´e uma solu¸c˜ao boa para

(26)

o problema. Assim como no problema da sequˆencia de fibonacci existe a sobreposi¸c˜ao de subproblemas, ou seja, o c´alculo repetido de um mesmo subproblema.

A solu¸c˜ao para evitar este problema ´e o uso de programa¸c˜ao dinˆamica. Assim sendo, usaremos uma tabela (matriz) para computar os dados que obtivermos na resolu¸c˜ao dos subproblemas. Para se descobrir a instˆancia atual do problema z[k,d], ´e necess´ario as solu¸c˜oes de z[k − 1,d] e z[k − 1,d − wk], ou seja, ´e necess´ario sempre um elemento

imediatamente acima (o item n˜ao est´a na mochila) ou em qualquer posi¸c˜ao da linha acima sem o imediato acima (o item est´a na mochila), logo devemos preencher a matriz linha a linha para que consigamos construir totalmente a matriz. Abaixo podemos visualizar a figura 2.4 de como ´e feito o preenchimento e o pseudo c´odigo retirado de [17].

Figura 2.4: Ordem de preenchemento da matriz do Problema da Mochila [17].

(27)

Entrada:Vetores c e w com o valor e tamanho de cada item, capacidade W da mochila e n´umero de itens n.

P ro ble ma M oc h ila ( c , w, W, n ) {

para d := 0 at´e W fa¸ca z[0, d] := 0

para k := 1 at´e n fa¸ca z[k, 0] := 0

para k := 1 at´e n fa¸ca para d := 1 at´e W fa¸ca

z[k, d] := z[k−1, d]

se (wk ≤ d) e (ck+ z[k − 1, d − wk] < z[k, d]) ent˜ao

z[k, d] := ck+ z[k − 1, d − wk]

devolva ( z [ n , W] )

Sa´ıda: O valor m´aximo do total de itens colocados na mochila.

Ap´os o resultado do algoritmo acima e do preenchimento da matriz, podemos atrav´es do algoritmo abaixo percorrer a tabela e encontrar os itens que foram de fatos colocados na mochila.

Entrada: Tabela z preenchida, capacidade W e o n´umero de itens n. M o c h i l a S o l u c a o ( z , n , W)

{

para i := 0 at´e n fa¸ca x[i] := 0 M o c h i l a S o l u c a o A u x ( x , z , n ,W) devolva ( x ) } M o c h i l a S o l u c a o a u x ( x , z , n , W) { se k 6= 0 ent˜ao se z[k,d] = z[k − 1,d] ent˜ao x[k] := 0

(28)

M o c h i l a S o l u c a o A u x ( x , z , n ,W) sen˜ao

x[k] := 1

M o c h i l a S o l u c a o A u x ( x , z , n ,W) }

Sa´ıda: O vetor x que indica os itens colocados na mochila.

Exemplo

Abaixo mostraremos um exemplo do Problema da Mochila considerando uma mo-chila de peso igual a 7 e o conjunto de itens com valores de c = {10,7,25,24} e w = {2,1,6,5}, como demonstrado na figura 2.5

Figura 2.5: Exemplo Problema da Mochila - Itens. [18]

Podemos ver na figura 2.5 que primeiramente na matriz que computamos os dados das solu¸c˜oes dos subproblemas, iremos inicializar os valores com os casos base, isto ´e, quando d = 0 e k = 0.

Figura 2.6: Exemplo Problema da Mochila - Passo 1. [18]

Nas figuras abaixo podemos ver alguns exemplos dos passos que o algoritmo ir´a fazer para preencher a tabela, e iremos estudar os casos de cada elemento z[k,d].

• Figura 2.7(a) - w1 > d? 2 > 1? Sim, logo n˜ao ´e possivel colocar na mochila.

(29)

• Figura 2.7(b) - w1 > d? 2 > 2? N˜ao, assim devemos calcular o m´aximo entre os

valores poss´ıveis para este item (ele est´a ou n˜ao na mochila). – z[k − 1,d − wk] + cK = z[0,0] + 10 = 0 + 10 = 10 .

– z[k − 1,d] = z[0,2] = 0 – max(10,0) = 10

• Figura 2.7(c) - Ap´os obtermos o resultado da matriz, queremos descobrir o valor m´aximo para a mochila, no nosso caso 4 itens e mochila de tamanho 7, z[4,7]. w4 > d? 5 > 7? N˜ao, assim devemos calcular o m´aximo entre os valores poss´ıveis

para este item (ele est´a ou n˜ao na mochila). – z[3,2] + c4 = 10 + 24 = 34 .

– z[3,7] = 32 – max(34,32) = 34

Para obtermos a composi¸c˜ao ´e simples, basta guardarmos os apontadores dos itens que foram colocados na mochila. Conclu´ımos assim que o algoritmo de Programa¸c˜ao Di-nˆamica do Problema da Mochila tem complexidade O(nW ) pelo fato do mesmo depender do valor do peso da mochila W , isto ´e, precisamos criar uma matriz e percorrer uma matriz com tamanho dependente de quantos itens existem no problema e tamanho da mochila (W ). Assim, dizemos que ´e um algoritmo Pseudo-Polinomial

(30)

(a) Problema da Mochila - Passo 2. [18]

(b) Problema da Mochila - Passo 3. [18]

(c) Problema da Mochila - Descobrindo o valor m´aximo transportado pela Mochila com os n Itens. [18]

(31)

Cap´ıtulo 3

Corte Bidimensional Guilhotinado

3.1

Introdu¸

ao

No ramo industrial existem processos de produ¸c˜ao ligados ao corte de mat´ eria-prima, geralmente de tamanho grande e padronizado, em itens de tamanhos menores, para atender a algum tipo de demanda interna ou externa, podendo esses itens serem de tamanhos variados e n˜ao padronizados.

Como exemplos de materiais a serem cortados, podemos citar madeira, vidro, a¸co, tecido. Padr˜oes de cortes adequados da mat´eria-prima s˜ao essenciais para manter uma ind´ustria competitiva no mercado, uma vez que minimizando o desperd´ıcio de material ou minimizando o n´umero de cortes necess´arios para obter certa pe¸cas, estamos melhorando assim o desempenho de uma produ¸c˜ao, assim como minimizando os gastos da ind´ustria e consequentemente maximizando seus lucros. [6]

Este problema ´e classificado academicamente como Problema de Cortes e Empaco-tamentos (PCE). Os PCE’s s˜ao problemas conbinat´orios que s˜ao geralmente NP-Dif´ıceis. Isto ´e atribu´ıdo ao fato de existir uma explos˜ao combin´atoria de arranjos poss´ıveis para que possa ser determinado o arranjo ´otimo. [6]

Neste cap´ıtulo estudaremos o Problema do Corte Bidimensional Guilhotinado Res-trito um tipo espef´ıfico de PCE. O problema consiste no corte de uma placa retangular de dimens˜oes (L,W ) em pe¸cas retangulares menores (li,wi), estas possuem valores de

uti-lidade π, i = 1,2,3, ..., m, de modo a maximizar a soma dos valores de utiuti-lidade das pe¸cas recortadas. Um conjunto de itens menores que foram produzidos atrav´es de uma sequˆ en-cia de cortes a partir da placa inien-cial (L,W ) define um padr˜ao de corte. Pe¸cas que diferem

(32)

das pe¸cas que queremos obter (li,wi), s˜ao consideradas restos ou res´ıduos. [4]

Se o valor ultidade de cada objeto pi for igual a ´area do objeto, ent˜ao maximizar

o valor utilidade corresponde a minimizar o desperd´ıcio de material.

Defini¸c˜ao 4. ( [4] ) Seja ai uma das pe¸cas produzidas (li,wi), o problema pode ser definido

como: max g = m X i=1 πiai

Correspondem ao padr˜ao de corte.

A entrada do problema consiste nas dimens˜oes da placa inicial (L,W), a quantidade de pe¸cas pr´e-definidos (m) e as suas dimens˜oes (li,wi).

A sa´ıda do problema consiste numa estrutra que represente quais cortes devem ser feitos na placa, para obter o melhor padr˜ao de corte.

Uma restri¸c˜ao existente no problema ´e que cada corte produz apenas dois retˆ an-gulos, chamados de cortes de guilhotina. Se existir um limite superior para o n´umero de cortes possiveis para obter as pe¸cas que queremos, o problema ´e chamado de restrito (“staged”) , se n˜ao houver limites para quantos cortes pode-se fazer na placa, o problema ´e denominado (“non-staged”). Na figura 3.1 podemos ver um padr˜ao de corte restrito de 8 cortes. O primeiro corte ´e feito de forma paralela a uma das bordas da placa, o pr´oximo ´e feito perpendicular ao corte j´a feito e assim por diante, at´e chegar ao n´umero do limite de cortes poss´ıveis, neste caso oito. Vale ressaltar que n˜ao h´a nenhum impedimento para que haja apenas cortes paralelos, caso as pe¸cas desejadas sejam obtidas por estes cortes, por exemplo uma placa dividida em trˆes pe¸cas (w,i) iguais podem ser feita com trˆes cortes paralelos sem necessidade de cortes perpendiculares entre cortes.

(33)

Figura 3.1: Exemplo Problema do Corte Bidimensional Guilhotinado - 8 Stages. Imagem retirada de [4]

3.2

NP-Dificuldade do Problema do Corte

Bidimen-sional Guilhotinado

Nesta sess˜ao provaremos que o Problema da Mochila se reduz ao Problema do Corte Bidimensional Guilhotinado.

Teorema 1 (Mochila ∝ CorteBidimensionalGuilhotinado).

Inicualmente a entrada do Problema da Mochila ´e transformada em uma instˆancia do Problema do Corte Bidimensional Guilhotinado em tempo polinomial. O Problema da Mochila possui apenas uma dimens˜ao, ou seja, o peso de cada objeto e o peso da mochila. Se imaginarmos o problema como o peso sendo uma dimens˜ao do problema e outra dimens˜ao sendo 1, temos uma instˆancia do Problema do Corte Bidimensional Guilhotinado, como podemos ver na figura 3.2. Al´em disso, fazemos o valor utilidade da pe¸ca igual ao valor do objeto.

(34)

Figura 3.2: Redu¸c˜ao Problema da Mochila para Problema do Corte Bidimensional Gui-lhotinado

.

Seja I uma instˆancia do problema da mochila e I’ a instˆancia de Corte Bidimensi-onal Guilhotinado obtida a partir de I◦ como descrito anteriormente.

⇒ Se I (Problema sem estar transformado) possui solu¸c˜ao de valor k, ent˜ao devemos mostrar que I’ ( Problema transformado) tamb´em possui solu¸c˜ao de valor k.

Se a mochila de I possui solu¸c˜ao composta pelos objetos o1, o2, ..., oj com valores

v1, v2, ..., vj, no qual a soma dos valores ´e igual a k, ent˜ao utilizando apenas cortes

hori-zontais, a placa poder´a ser cortada em pe¸cas de valor utilidade v1, v2, ..., vj e a solu¸c˜ao do

problema ter´a o valor utilidade total igual a k.

⇐ Se I’ (Problema sem estar transformado) possui solu¸c˜ao de valor k, ent˜ao I ( Problema transformado) possui solu¸c˜ao de valor k. Como tanto a placa quanto as pe¸cas possuem altura 1, nenhum corte horizontal ser´a necess´ario. Sendo assim, por um raciocinio an´alogo ao anterior se I’ possui solu¸c˜ao de valor utilidade igual a k, ent˜ao I tamb´em possui

(35)

solu¸c˜ao de valor k.

Corol´ario 2. Problema do Corte Bidimensional Guilhotinado ´e NP-Dif´ıcil.

Uma conhecida redu¸c˜ao de Subset Sum para o Problema da Mochila demonstra que a mochila ´e NP-Dif´ıcil mesmo quando os valores dos objetos s˜ao iguais aos seus pesos. Disso, temos como consequˆencia o fato de nosso problema ser NP-Dif´ıcil mesmo quando o valor utilidade de cada pe¸ca ´e igual a sua ´area, vers˜ao em que desejamos minimizar o desperd´ıcio de material.

3.3

Solu¸

ao por grafo And-Or

Nesta se¸c˜ao faremos uma revis˜ao da abordagem proposta por “Morabito, Arenales e Arcaro (1992)” [4] na qual foi usada a estrat´egia da cria¸c˜ao de um grafo And-Or, onde cada n´o representa um subproblema e cada aresta a rela¸c˜ao entre esses n´os. ´E poss´ıvel definir o problema como uma busca, especificando o n´o inicial, os n´os finais e as regras que definem os movimentos legais.

No Problema do Corte Bidimensional Guilhotinado a placa retangular de dimens˜oes (L,W ) ´e o n´o inicial, as pe¸cas menores de tamanho (li,wi) s˜ao os n´os finais e as arestas

representam os cortes de guilhotina que s˜ao definidos como os movimentos legais para obten¸c˜ao daquelas pe¸cas menores a partir de uma placa maior.

Em um grafo And-Or podemos representar a placa a ser cortada como um n´o pai, que pode ter mais de um corte guilhotinado feito em cima dela, e que ap´os aquele corte, sempre ser´a dividida em duas outras novas placas, que por sua vez ser´a feito a mesma coisa at´e que se encontre a pe¸ca desejada no problema com os cortes feito em cima da pe¸cas. Na figura 3.3 podemos ver n´os OU (OR), que s˜ao aqueles que a partir de uma placa, tem-se arestas de sa´ıdas que representam os cortes que podem ser feitos em cima daquela em cima daquela placa. Por exemplo: a placa “A” pode ter suas arestas de sa´ıda para “B” OU “C”, caso a aresta que leva a “B” seja escolhida, o corte que ser´a feito ser´a “b” ( vertical). Caso seja “C”, ser´a “c” (horizontal).

(36)

Figura 3.3: Exemplo de n´os OU - Grafo And-Or .

Na figura 3.4 podemos ver os n´os E (AND), que representam que sempre ap´os receber um corte guilhotinado, a placa ir´a se dividir em duas novas placas, que por sua vez poder´a ser feitos novos padr˜oes de cortes e que se repetira o processo at´e n˜ao poder ser mais dividida ou encontrar a pe¸ca desejada. Por exemplo : ao ser feito o corte guilhotinado “a” na placa “A” ela ser´a dividida em “B” E “C”, por isso suas arestas de saidas para as

duas. Do mesmo jeito o corte “c” dividi a placa em “D” e res´ıduo.

Figura 3.4: Exemplo de n´os E - Grafo And-Or .

Um subgrafo solu¸c˜ao atrav´es do grafo, do n´o inicial at´e os n´os finais, representam os padr˜oes de corte que devem ser feitos nas placas para obten¸c˜ao da solu¸c˜ao do problema. Abaixo na figura 3.5 podemos ver uma imagem ilustrativa onde a placa P ´e mostrada

(37)

no item (a), as pe¸cas que queremos obter no item (b) e as pe¸cas obtidas atrav´es do corte Guilhotinado ilustradas no item (c).

Figura 3.5: (a) Placa. (b) Pe¸cas. (c) Pe¸cas obtidas. .

Na figura 3.6 podemos ver o subgrafo solu¸c˜ao em vermelho onde encontramos a solu¸c˜ao para o problema obtendo as pe¸cas 3,4,5 e 7. Assim como no item (c) da figura 3.5.

Figura 3.6: Exemplo Grafo And-Or e o caminho com a solu¸c˜ao. .

(38)

Na abordagem de “Morabito, Arenales e Arcaro (1992)” [4] , os grafos And-Or na verdade s˜ao ´arvores que ilustram a ´arvore de recorrˆencia do algoritmo proposto. Assim sendo, ´e feito uma constru¸c˜ao implicita dessa ´arvore And-Or e ao mesmo tempo o pro-cedimento Top-Down proposto decide recursivamente se para um dado n´o, iniciando a partir de uma ra´ız que representa a placa P, “vale a pena”continuar na busca ou n˜ao. Os n´os que ser˜ao expandidos e continuar˜ao no processo s˜ao chamados de n´os abertos, j´a os n´os que n˜ao continuar˜ao no procedimento e, consequentemente os seus filhos tamb´em n˜ao ser˜ao, s˜ao chamados de n´os fechados.

Para cada n´o que representa uma placa Rpq(p,q) faremos um procedimento para

descobrir, se devemos consider´a-lo como n´o aberto ou fechado, isto ´e, ele e seus filhos devem continuar na busca ou n˜ao.

• Devemos descobrir um limite inferior referente a cada subplaca analisada, ou seja, a solu¸c˜ao ´otima para essa subplaca est´a acima desse limite encontrado. O limite inferior utilizado ´e obtido pela f´ormula abaixo:

δ(p,q) = max{π ∗ [p/li] ∗ [q/wi], i ∈ Rpq}

A f´ormula tem como o resultado o m´aximo de pe¸cas com maior valor utilit´ario de um mesmo tipo, que a placa (p,q) pode dar, pois ´e uma solu¸c˜ao vi´avel para Rpq.

Figura 3.7: Limite inferior na estrat´egia de Grafo And-Or para resolu¸c˜ao do Problema do Corte Bidimensional Guilhotinado.

(39)

O limite inferior de qualquer n´o (p,q) sempre ´e atualizado quando os n´os sucessores fornecerem melhores padr˜oes de corte, assim sendo, se δ(r,q) + δ(p − r,q) > δ(p,q), entao δ(p,q) ser´a substitu´ıdo por δ(r,q) + δ(p − r,q), ou seja, o limite inferior das duas novas placas obtidas por uma padr˜ao de corte.

• O limite superior referente ao n´o pode ser encontrado a partir do problema relaxado para Rpq. µ(p,q) = max X i∈Rpq πi∗ ai s.t. X i∈Rpq (li∗ wi) ∗ ai ≤ (p ∗ q) 0 ≤ ai, i ∈ Rpq.

Podemos notar pela f´ormula acima que todos os factiv´eis padr˜oes de cortes na placa (p,q) precisam seguir as restri¸c˜oes de que as pe¸cas cortadas precisam ser menor ou igual ao retˆangulo (p,q), esta condi¸c˜ao ´e imposta pelo inteiro ai que prov´em o limite superior

para o problema relaxado, ou seja, agora o espa¸co ´e unidimensional, as pe¸cas poderiam ser “dobradas”suas estruturas, e ainda sim poderiam caber em um espa¸co, que em duas dimens˜oes n˜ao conseguiriam. Consideram-se apenas o espa¸co que ela ocupa e n˜ao as dimens˜oes. Assim sendo o problema relaxado se torna o Problema da Mochila estudado no cap´ıtulo 2, sess˜ao 2.5.

Para cada n´o iriamos necessitar executar uma programa¸c˜ao linear na f´ormula des-crita acima, e descobrir o limite superior do mesmo. Mas como podem existir milhares de n´os a serem examinadas e rodar uma programa¸c˜ao linear em cada uma delas teria um alto custo, ´e adotada uma solu¸c˜ao mais relaxada do problema, onde agora o problema permite n´umeros reais, isto ´e, n˜ao existe mais o inteiro ai que restringe o problema a

pe¸cas inteiras.

Assim, atrav´es da formula abaixo podemos obter o limite superior desejado.

(40)

Como podemos ver na f´ormula acima, p ∗ q ∗ (πi/li ∗ wi) = (p ∗ q/li ∗ wi) ∗ πi,

onde podemos inferir que agora como o problema aceita n´umeros reais, o resultado ser´a o m´aximo de pe¸cas com maior valor utilit´ario de um mesmo tipo poss´ıvel assim como no limite inferior. A diferen¸ca entre os dois, ´e que agora podemos considerar a menor parte de lucro por unidade de ar´ea da pe¸ca que tiver o maior valor utilit´ario em πi/li∗ wi.

Assim, no caso onde o corte teria res´ıduo, agora ser´a preenchido com esse valor unit´ario j´a que no problema relaxado aceitam-se n´umeros reais.

• Agora que possu´ımos o limite inferior e limite superior podemos verificar se um ramo do grafo pode ser descartado, ou seja, um n´o ir´a se tornar fechado. Assim sendo, se µ(r,q) + µ(p − r,q) ≤ δ(p,q) ?, ent˜ao o corte em r pode ser descartado sem perder a solu¸c˜ao ´otima, uma vez que o melhor padr˜ao para os n´os (r,q) e (p − r,q) n˜ao podem ser melhor do que j´a sabemos para (p,q).

Figura 3.8: Verifica¸c˜ao de corte na estrat´egia de Grafo And-Or para resolu¸c˜ao do Problema do Corte Bidimensional Guilhotinado.

(41)

Cap´ıtulo 4

Um algoritmo pseudo-polinomial

Nesta se¸c˜ao iremos apresentar a principal contribui¸c˜ao deste trabalho, isto ´e, um novo algoritmo para o problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas cujo tempo de execu¸c˜ao ´e pseudo-polinomial com rela¸c˜ao ao tamanho da entrada. Na solu¸c˜ao proposta por esta monografia para o problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas, iremos considerar assim como no problema estudado no cap´ıtulo anterior, que o valor utilidade de cada objeto pi ´e igual a ´area do objeto, ou

seja, devemos maximizar o valor utilidade ou minimizar o desperd´ıcio de material. Para o estudo e solu¸c˜ao do problema, iremos considerar a constru¸c˜ao de um grafo And-Or ac´ıclico dirigido, isto ´e, suas arestas tem dire¸c˜ao e n˜ao formam ciclos direcionados no grafo. A constru¸c˜ao ser´a usada para melhor visualiza¸c˜ao do problema e entendimento do algoritmo proposto.

Primeiramente, a partir da placa inicial (L,W ), iremos gerar os v´ertices do grafo, fazendo o produto cartesiano entre os intervalos fechados [1,L] e [1,W ]. Assim os v´ertices do grafo representar˜ao elementos do produto cartesiano de [1,L] e [1,W ]. Assim temos o conjunto de todos os pares ordenados para os vertices que s˜ao as representa¸c˜oes das pe¸cas (li,wi) que podemos obter atrav´es de um padr˜ao de corte em (L,W ).

Iremos considerar a seguinte regra para reduzir o n´umero de pe¸cas/v´ertices do problema: pe¸cas iguais mas com as dimens˜oes invertidas, s˜ao consideradas a mesma pe¸ca, por exemplo p1 = (1,2) e p2 = (2,1) ser˜ao representadas por um ´unico n´o. Tal regra ´e

segura pois para obtermos a pe¸ca desejada no mundo real, bastaria rotacion´a-la. Assim temos.

(42)

As arestas s˜ao as representa¸c˜oes dos cortes de uma pe¸ca, onde a dire¸c˜ao da aresta significa que a partir de uma pe¸ca obtemos a outra. Por exemplo: p1 = (3,2) → p2 = (2,2)

representa que a partir da pe¸ca 1, fazendo um corte vertical, obtemos a pe¸ca 2. Caso uma pe¸ca se divida em duas de dimens˜oes iguais, teremos duas arestas de sa´ıda de um v´ertice para o outro. Veja na Figura 4.1.

(a) Corte que resulta em duas pe¸cas diferentes

(b) Corte que resulta em duas pe¸cas iguais

Figura 4.1: Exemplo da transforma¸c˜ao do problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas para grafo: em (a) podemos ver um v´ertice 3,2 tendo duas arestas de sa´ıdas apontando para outros dois v´ertices (2,2) e (1,2) que equivale ao padr˜ao de corte ao seu lado , em (b) podemos ver um v´ertice (4,4) tendo duas arestas de sa´ıda apontando para o v´ertice (2,2) que equivale ao padr˜ao de corte ao seu lado.

As arestas ser˜ao geradas a partir das seguintes regras: Defini¸c˜ao 5. Se (li,wi) n˜ao ´e uma das pe¸cas que queremos obter:

E se (li = lj E wi > wj) OU (li > lj E wi = wj):

(43)

As regras acimas levam em considera¸c˜ao que se o v´ertice j´a ´e uma das pe¸cas que queremos obter, n˜ao ´e necess´ario criar uma aresta de sa´ıda a partir deste, uma vez que ela j´a ´e o que estamos buscando e se fizermos mais cortes n˜ao haveria ganho nenhum pois sua ´area j´a ´e a desejada e seu valor utilidade n˜ao ir´a aumentar se houver mais cortes. As arestas s´o s˜ao geradas a partir de uma pe¸ca maior em dire¸c˜ao a uma pe¸ca menor, mantendo sempre uma dimens˜ao da mesma, pois s´o podem ser feito um corte guilhotinado por vez, sendo ele vertical ou horizontal.

Uma considera¸c˜ao importante ´e o caso em que a pe¸ca obtida por um corte, quebra a regra li ≥ wi∀ pi. Caso isso aconte¸ca, basta fazer a invers˜ao da pe¸ca, deixando impl´ıcito

que houve um rotacionamento na dimens˜ao da pe¸ca.

Figura 4.2: Exemplo de transforma¸c˜ao impl´ıcita do problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas para grafo.

.

Uma vez obtido o grafo com as regras acima, podemos perceber que todo o al-goritmo e regras criadas apenas estruturam v´ertices do tipo Or , mas para a solu¸c˜ao do problema precisaremos da cria¸c˜ao de v´ertices And, mesmo que na estrutura j´a criada os v´ertices And estejam implicitamente estruturado.

Os v´ertices And em nosso contexto devem representar pares de placas que s˜ao geradas a partir de um ´unico corte. Assim sendo, para se criar todos os v´ertices And usaremos os v´ertices que j´a foram criados. Podemos seguir os passos abaixo para todos os n´os do grafo:

(44)

Passo 1 - Dado um n´o “v” verificamos cada aresta de entrada “e” que chega neste v´ertice.

Passo 2 - A partir desta aresta “e”, descobrimos a pe¸ca pai que gerou “v”.

Passo 3 - A partir da pe¸ca pai, descobrimos a pe¸ca complementar da pe¸ca “e”, denominado “e2”.

Passo 4 - Criar um n´o com os mesmos atributos que o n´o pai, com arestas de sa´ıda apontando para as sa´ıdas de “e”,“e2”. E uma aresta de entrada vindo do antigo n´o pai.

Passo 5 - Remover as arestas “e”,“e2”. Podemos ver um exemplo na Figura 4.3:

Figura 4.3: Exemplo de transforma¸c˜ao para grafo And-Or do problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

.

Neste ponto, cada padr˜ao de corte poss´ıvel de ser obtido para P pode ser visualizado no grafo And-Or constru´ıdo como um subgrafo, denotado como subgrafo solu¸c˜ao, definido da seguinte forma:

• O v´ertice representando (L,W ) pertence ao subgrafo;

• Um v´ertice Or que pertence ao subgrafo possui exatamente 1 aresta de sa´ıda neste subgrafo.

(45)

• Um v´ertice And que pertence ao subgrafo possui todas suas arestas de sa´ıda neste subgrafo.

Desta forma, para solucionar o problema devemos achar o melhor subgrafo solu¸c˜ao, isto ´e, o subgrafo que representa o padr˜ao de corte que maximiza o valor utilidade.

Nosso algoritmo primeiramente ir´a gerar uma ordena¸c˜ao topol´ogica dos v´ertices do grafo And-Or criado.

Uma ordena¸c˜ao topol´ogica consiste em ordenar os v´ertices de um grafo ac´ıclico dirigido G=(V,E) de forma que, se existe um caminho do v´ertice v para o v´ertice u, ent˜ao v aparece antes de u na ordena¸c˜ao [19].

Figura 4.4: Exemplo de Ordena¸c˜ao Topol´ogica .

Para exemplificar e ilustrar o passo a passo do nosso algoritmo, escolhemos uma placa inicial (3,3) e queremos obter o melhor padr˜ao de corte que maximize o valor utili-dade das pe¸cas que desejamos obter, sendo elas p1 = (2,1) e p2 = (3,1). Na Figura 4.5,

podemos ver a estrutura do grafo preliminar montado, sem os n´os AND. A Figura 4.6 ilustra o grafo And-Or completo.

(46)

Figura 4.5: Exemplo de uma placa 3x3 para um grafo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

.

Assim sendo, a partir do grafo And-Or criado na Figura 4.6 faremos uma ordena¸c˜ao topol´ogica. Assumiremos uma ordena¸c˜ao dos v´ertices de forma decrescente com rela¸c˜ao a ´area das placas que representam. Podemos ver na Figura 4.7 o grafo ordenado, onde representamos em cada n´o a sua largura, altura, ´area, e o tipo de n´o ( And ou Or) como atributos, acima de cada representa¸c˜ao.

O algoritmo ´e do tipo bottom-up, onde para todo n´o ( a partir do primeiro n´o da ordena¸c˜ao at´e o ´ultimo, em ordem crescente), devemos calcular o valor utilidade do n´o corrente a partir dos valores dos n´os filhos.

(47)

Figura 4.6: Exemplo de uma placa 3x3 para um grafo And-Or -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

. Segue abaixo o algoritmo:

A l g o r i t m o bottom−up ( n´os do grafo ) {

Para todo n´o, ordenados de forma crescente em rela¸c˜ao `a area fa¸ca{ Crie uma variavel auxiliar contador

(contabilizar´a a melhor ´area/utilidade acumulada para o n´o corrente)

Se o n´o n˜ao tiver arestas de sa´ıda {

auxiliar = ´area / utilidade do n´o corrente } Sen˜ao{

(48)

Cada aresta de sa´ıda do n´o levar´a a algum n´o que

j´a teve sua vari´avel auxiliar j´a calculada. Logosome os valores de todas as vari´aveis auxiliares desses n´os, e atribua

essa soma a vari´avel auxiliar do n´o corrente. }

Se o n´o for do tipo Or {

Cada aresta de sa´ıda do n´o que levar´a a algum n´o que j´a teve sua vari´avel auxiliar calculada, atribua o maior valor dentre as vari´aveis auxiliares

`

a variavel auxiliar do n´o corrente. }

} } }

Figura 4.7: Exemplo de uma placa 3x3 para um grafo And-Or ordenado topol´ogicamente -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

.

(49)

Figura 4.8: Passo 1 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

.

Figura 4.9: Passo 2 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

(50)

Figura 4.10: Passo 3 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

.

Figura 4.11: Passo 4 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

(51)

Figura 4.12: Passo 5 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

(52)

Figura 4.13: Passo 6 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

.

Figura 4.14: Passo 7 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

(53)

Figura 4.15: Passo 8 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

.

Figura 4.16: Passo 9 - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhoti-nados em Placas.

.

Para descobrir o subgrafo solu¸c˜ao que produz a melhor solu¸c˜ao (padr˜ao de corte), basta marcar quais n´os (valor da vari´avel auxiliar) foram escolhido atrav´es da escolha do maior valor para descobrir o valor de cada n´o OR. Assim, ap´os o algoritmo ter sido feito, teremos nos marcadores quais os n´os devemos seguir e qual ´e o subgrafo solu¸c˜ao (padr˜ao de corte) da placa P = (L,W )

(54)

Figura 4.17: Subgrafo Solu¸c˜ao - Algoritmo -problema de Gera¸c˜ao de Padr˜oes de Cortes Guilhotinados em Placas.

.

4.1

Prova do algoritmo Pseudo-Polinomial

4.1.1

O tempo de execu¸

ao do algoritmo

A partir de um grafo And-Or G com n v´ertices e m arestas, nosso algoritmo efetua O(n + m) passos, isto ´e, n´umero linear de passos com rela¸c˜ao ao n´umero de v´ertices e arestas do grafo G que constru´ımos.

Para verficar tal afirma¸c˜ao basta observar que uma ordena¸c˜ao topol´ogica pode ser constru´ıda em tempo O(n + m) [20]. Al´em disso, no algoritmo bottom-up criado no presente trabalho, percorremos todos os n´os do grafo de acordo com a ordem topol´ogica dada, visitando suas arestas de entrada (cada aresta de G ´e visitada exatamente uma vez), calculando assim os pesos de cada v´ertice. Dessa forma podemos concluir que o algoritmo possui complexidade O(n + m), pois para cada n´o, devemos percorrer todas arestas que chegam nele e fazer opera¸c˜oes constantes, como saber o m´aximo (Or) ou fazer a soma dos pesos das arestas (And), para assim podermos passar para o pr´oximo n´o que est´a ordenado topologicamente.

Logo, temos

|V (G)|

X

i=1

(dv−+ 1) = m + n.

(55)

4.1.2

O tempo de execu¸

ao da cria¸

ao do grafo

Dado o grafo And-Or G, o tempo de execu¸c˜ao do nosso algoritmo ´e linear com rela-¸c˜ao ao n´umero de v´ertices e arestas de G. Sendo assim, devemos verificar o algoritmo para constru¸c˜ao de G e seu tempo de execu¸c˜ao. Dado uma placa inicial (L,W ) primeiramente criamos os n´os Or da seguinte forma:

A l g o r i t m o cria¸c˜ao n´o s Or ( L,W ) { Para i:=1 at´e L fa¸ca{

Para j:=i at´e W fa¸ca{ cria o n´o (i,j) }

} }

Assim temos que o procedimento acima demanda tempo O (L x W) e produz O (L x W) v´ertices Or. Ap´os a cria¸c˜ao dos n´os Or, iremos criar os n´os And e as arestas do grafo conforme o algoritmo abaixo (a Figura 4.18 ilustra a cria¸c˜ao):

A l g o r i t m o cria¸c˜ao dos And e das arestas ( n´os do grafo ) { Para cada n´o v (i,j) que n˜ao ´e uma pe¸ca final desejada fa¸ca{

Para l:=1 at´e bj2c fa¸ca{

cria um n´o al representando o corte [i:l , i:(j-l)];

cria uma aresta de v para al;

cria uma aresta de al para os n´os que representam (i,l) e (i,j-l);

}

Para k:=1 at´e b2icfa¸ca{

cria um n´o bk representando o corte [(i-k):j , k:j];

cria uma aresta de v para bk;

cria uma aresta de bk para os n´os que representam (k,j) e (i-k,j);

} } }

Como podemos observar o tempo de execu¸c˜ao da segunda etapa do algoritmo possui rela¸c˜ao direta com o n´umero de n´os And que ele ir´a criar, pois para cada n´o And

(56)

Figura 4.18: Cria¸c˜ao do grafo And-Or - Etapa de cria¸c˜ao dos n´os And e arestas. .

criado ´e efetuado um n´umero constante de opera¸c˜oes como cria¸c˜ao de arestas e v´ertices. Logo conclu´ımos que essa etapa de cria¸c˜ao possui tempo linear com rela¸c˜ao ao n´umero de vertices And criados.

4.2

O tamanho do grafo

As duas se¸c˜oes anteriores mostram que o tempo de execu¸c˜ao do algoritmo como um todo ´e linear com rela¸c˜ao ao grafo constru´ıdo. No entanto, o grafo n˜ao faz parte da entrada, e portanto, devemos determinar o tamanho do grafo em fun¸c˜ao da dimens˜ao da placa de entrada P .

Sabemos que o n´umero de arestas em um grafo completo ´e (n2− 2)/2 sendo n o

n´umero de v´ertices [21], dessa forma, no pior caso, o limite superior para o n´umero de arestas ser´a da ordem de n2 ertices.

Primeiramente iremos observar o n´umero de n´os no grafo sem os v´ertices AND. Como cada OR ´e um retˆangulo distinto, sua largura e altura s˜ao inteiros (li,wi) e elas

tem que ser menor que a altura e largura (L,W ) da placa P . Assim podemos concluir, que o n´umero de n´os Or n˜ao pode ultrapassar o produto (L × W ). No entanto, o n´umero exato de v´ertices Or que temos ´e L x W −(W2− W )/2, onde o primeiro termo 00L x W ”

´e equivalente a todos os n´os da placa P , e a subtra¸c˜ao pelo segundo termo (W2− W )/2

s˜ao os n´os que n˜ao ser˜ao considerados, pelo fato de que placas que tem altura e largura equivalente a outra placa, apenas com uma invers˜ao de eixos, n˜ao s˜ao consideradas na

(57)

solu¸c˜ao proposta, por exemplo p1 = 1,2 e p2 = 2,1 s˜ao consideradas equivalentes. Assim,

concluimos que o n´umero de v´ertices Or ´e L x W −(W2)/2 e est´a na ordem de O (L x W). Veja a Figura 4.19.

Figura 4.19: ´Area considerada para criar as pe¸cas. .

Podemos determinar que o n´umero de n´os ´e polinomial em fun¸c˜ao da altura e largura da placa P , logo pelo teorema em que o n´umero de arestas ´e igual a (n2 − 2)/2,

conclu´ımos que o n´umero de arestas tamb´em ´e polinomial em rela¸c˜ao a P . Para uma pe¸ca l’,w’ temos l’-1 cortes verticais e w’-1 cortes horizontais. Assim podemos inferir que o n´umero de arestas no grafo Or, isto ´e, grafo sem contar os n´os And, ´e descrito pela formula: |E(Gor)| = L X l0=1 W X w0=1 (l0+ w0− 2) |E(Gor)| = L X l0=1 [( W X w0=1 w0) + W (l0− 2)] |E(Gor)| = L X l0=1 ((W + 1)W 2 + W (l 0− 2)) |E(Gor)| ≤ (L(W + 1)W 2 ) + W L X l0=1 l0 |E(Gor)| ≤ L(W + 1)W 2 + W (L + 1)L 2

Sendo assim, conclu´ımos que o n´umero de arestas do grafo Or est´a na ordem de O(L × W2+ W × L2).

(58)

Pela constru¸c˜ao do grafo, sabemos que o n´umero de v´ertices And do grafo And-Or ´e aproximadamente o n´umero de arestas do grafo Or divido por 2, assim temos:

|V (GAnd−Or)| = O(L × W2+ W × L2).

Como o n´umero de arestas do Grafo And-Or ´e 3 vezes o n´umero de n´os And (Veja a Figura 4.20). Temos:

|E(GAnd−Or)| = O(L × W2+ W × L2).

Figura 4.20: Grafo Or transformado para And-Or. .

Como o eixo L ´e sempre maior que o W , podemos inferir que o n´umero de vertices e arestas do grafo ´e da ordem de O(L2 x W ).

Finalmente, a complexidade total do nosso algoritmo ser´a O(|V (G)| + |E(G)|) = O(L2× W ).

Assim, temos um algoritmo pseudo-polinomial para o problema, como descrito na Se¸c˜ao 2.3.

(59)

Cap´ıtulo 5

Conclus˜

ao

O uso de grafos And-Or e o estudo sobre o seu uso no problema Gera¸c˜ao de Cortes Guilhotinados em Placas, permitiram a cria¸c˜ao de um algoritmo Pseudo-Polinomial para a resolu¸c˜ao do problema n˜ao-restrito. A solu¸c˜ao proposta usa a t´ecnica de programa¸c˜ao dinˆamica onde um grafo And-OR ´e utilizado como estrutura de dados ao inv´es de uma matriz. Essa abordagem nos proporciona um estrat´egia para percorrer os n´os do grafo encontrando uma solu¸c˜ao ´otima do problema.

´

E importante ressaltar que a abordagem proposta para produ¸c˜ao de um algoritmo pseudo-polinomial para o problema ´e nova, e o algoritmo proposto neste trabalho possui complexidadade assint´otica equivalente ao estado da arte para o problema.

O problema solucionado considera as restri¸c˜oes mais b´asicas, onde o tamanho dos eixos s˜ao inteiros, o valor utilidade de cada pe¸ca ´e igual a sua ´area, o n´umero de cortes que podem ser feitos ´e ilimitado, e n˜ao h´a limita¸c˜ao quanto ao n´umero m´aximo e m´ınimo de pe¸cas a serem obtidas com uma determinada dimens˜ao.

Como trabalhos futuros, pretendemos considerar outras varia¸c˜oes do problema, ampliando a aplicabilidade de nossa abordagem no mundo real. Uma an´alise emp´ırica comparando nossa abordagem com as demais solu¸c˜oes para o problema, tamb´em ser´a realizada no futuro.

(60)

Referˆ

encias Bibliogr´

aficas

[1] P. Gilmore and R. E. Gomory, “Multistage cutting stock problems of two and more dimensions,” Operations research, vol. 13, no. 1, pp. 94–120, 1964.

[2] J. Herz, “Recursive computational procedure for two-dimensional stock cutting,” IBM Journal of Research and Development, vol. 16, no. 5, pp. 462–469, 1972.

[3] J. Beasley, “Algorithms for unconstrained two-dimensional guillotine cutting,” Jour-nal of the OperatioJour-nal Research Society, pp. 297–306, 1985.

[4] R. Morabito, M. Arenales, and V. Arcaro, “An and—or-graph approach for two-dimensional cutting problems,” European Journal of Operational Research, vol. 58, no. 2, pp. 263–271, 1992.

[5] R. Silveira and R. Morabito, “Um m´etodo heur´ıstico baseado em programa¸c˜ao di-nˆamica para o problema de corte bidimensional guilhotinado restrito,” Gest˜ao & Produ¸c˜ao, vol. 9, no. 1, pp. 78–92, 2002.

[6] C. M. Da Bianco and A. D. da Silva, “Problema de corte bidimensional guilhotinado-uma abordagem atrav´es de ferramentas cad e heur´ısticas de posicionamento.” XXX Encontro Nacional de Engenharia de Produ¸c˜ao.

[7] J. L. Szwarcfiter and L. Markenzon, Estruturas de Dados e seus Algoritmos. Livros T´ecnicos e Cient´ıficos, 1994, vol. 2.

[8] L. Bueno, “Teoria da complexidade computacional,”

http://professor.ufabc.edu.br/ leticia.bueno/classes/aa/materiais/complexidade2.pdf, acessado em 2017.

[9] S. W. Song, “Complexidade de algoritmos,” https://www.ime.usp.br/˜song/ mac5710/slides/01complex.pdf, acessado em 2017.

Referências

Documentos relacionados

Para disciplinar o processo de desenvolvimento, a Engenharia de Usabilidade, também conceituada e descrita neste capítulo, descreve os métodos estruturados, a

The strict partition problem is relaxed into a bi-objective set covering problem with k-cliques which allows over-covered and uncovered nodes.. The information extracted

Esses cortes, chamados de bidimensionais (duas dimensões relevantes) guilhotinados (corte aplicado a um painel retangular, produz dois novos retângulos) restritos (com limitação

3 O presente artigo tem como objetivo expor as melhorias nas praticas e ferramentas de recrutamento e seleção, visando explorar o capital intelectual para

A participação foi observada durante todas as fases do roadmap (Alinhamento, Prova de Conceito, Piloto e Expansão), promovendo a utilização do sistema implementado e a

Contudo, sendo um campo de pesquisa e de atuação muito específico e novo no Brasil, ainda existe uma série de dificuldades para a eleição de parâmetros de conservação

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

Ninguém quer essa vida assim não Zambi.. Eu não quero as crianças