Matriz

Cálculo de áreas válidas por uso de matrizes

A requisição do cliente é passada para uma função indicando-se o retângulo referente a uma unidade de alocação, ou seja, se for uma requisição de tiras, então este retângulo terá o comprimento mínimo de uma tira e terá a largura equivalente ao número mínimo de tiras em uma alocação; se for uma requisição de chapas, então, o comprimento será equivalente ao mínimo de chapas que podem ser alocadas numa linha e a largura equivalente à largura de uma chapa e se for uma requisição de bobinas então o comprimento do retângulo deverá ser equivalente à quantidade mínima exigida a cada bobina.

Com isto a função deve responder se existe alguma área na bobina que esteja disponível para a alocação da requisição fornecida. Se existir, então ela deverá retornar todas as área em ordem decrescente de tamanho.

Para se calcular as área disponíveis, as semi-retas das bordas dos retângulos representando os defeitos e alocações já realizadas serão estendidas até as bordas da bobina como na figura.

Figura: Divisão do mapa em células da matriz tendo como referência as bordas dos defeitos.

Em seguida, será gerada uma matriz na qual cada elemento estará representando uma célula resultante do recorte feito na bobina. No caso da figura, a matriz terá 9 linhas e 9 colunas. Esta matriz armazenará os cálculos necessários para identificar quais células poderão receber o canto direito inferior da requisição. Uma vez identificados estas células, deve-se expandi-las ao máximo para a esquerda, depois para a direita, em seguida para cima e depois para baixo. Esta expansão será feita até que se encontre a borda da bobina ou alguma área que não esteja disponibilizada para alocação. Isto resultará na maior área possível que se pode utilizar a partir da célula identificada. Este processo é repetido até que não haja mais área que possam ser reportadas. Estas áreas são então ordenadas em ordem decrescente de tamanho e retornadas como resultado.

Eu desenvolvi um pequeno executável que fiz para demonstrar o algoritmo de procura de áreas válidas: Área válida pelo uso de matriz