• Nenhum resultado encontrado

6 Implementação da aplicação

6.2 Implementação da heurística

6.2.6 Classe Controlador (ZCL_TM_CTR_CLARKE_WRIGHT)

A classe denominada de “controlador” permite gerir todo o processo relativo à execução do algoritmo. Assim, por cada geração de rotas para um determinado dia/fileira é criada uma instância da classe controlador.

Por exemplo, nos casos em que se pretende gerar as rotas para as três fileiras (papel, embalagens e vidro) num determinado dia, devem ser criadas as respetivas 3 instâncias desta classe.

Na tabela 6.6 apresenta-se uma representação UML da classe correspondente “controlador”, indicando-se os seus atributos e métodos.

ZCL_TM_CTR_CLARKE_WRIGHT - lista_savings TYPE ztm_lista_savings - lista_juncoes TYPE ztm_lista_juncoes - lista_ecopontos TYPE ztm_lista_ecopontos - lista_rotas_atuais TYPE ztm_lista_rotas_atuais - total_juncoes TYPE i

- capacidade_viat TYPE ztm_quantidades - ecoponto_sede TYPE REF TO zcl_tm_ecoponto

- total_rotas TYPE i

- lista_rotas_solucao - lista_rotas_inicial - dia_semana TYPE char1

- dia TYPE dats

- fileira TYPE char10

- distancia_maxima TYPE i - enchimento_minimo TYPE i

+ constructor

+ novo_ecoponto IMPORTING im_ecoponto TYPE REF to zcl_tm_ecoponto

+ obter_sede + criar_rotas_iniciais + incrementar_total_rotas + obter_savings + calcular_custo_saving

IMPORTING im_ecop_ant TYPE REF to zcl_tm_ecoponto + IMPORTING im_ecop_seg TYPE REF to zcl_tm_ecoponto + EXPORTING ex_custo TYPE ztm_custo

+ EXPORTING ex_tempo TYPE ztm_tempo

6. Implementação da aplicação

Faculdade de Ciências da Universidade de Lisboa 92

+ EXPORTING ex_ecop_seg_sede TYPE ztm_custo + EXPORTING ex_ecop_ant_seg TYPE ztm_custo + calcular_rotas

+

obter_rota

IMPORTING im_ecoponto TYPE REF to zcl_tm_ecoponto + IMPORTING im_rota_diferente TYPE REF to zcl_tm_rota + EXPORTING ex_arco TYPE REF to zcl_tm_arco

+ EXPORTING ex_rota TYPE REF to zcl_tm_rota + obter_total_rotas EXPORTING ex_n_total_rotas TYPE i

+ atualizar_lista_rotas_atuais IMPORTING im_juncao TYPE REF to zcl_tm_juncao_rotas + obter_lista_rota_atuais EXPORTING ex_lista_rotas_atuais TYPE ztm_lista_rotas_atuais + apagar_rota_lista_r_atuais IMPORTING im_rota TYPE REF to zcl_tm_rota

+ obter_lista_ecopontos EXPORTING ex_lista_ecopontos TYPE ztm_lista_ecopontos + obter_lista_juncoes EXPORTING ex_lista_juncoes TYPE ztm_lista_juncoes + obter_lista_savings EXPORTING ex_lista_savings TYPE ztm_lista_savings

+ Inicializar

+ obter_total_juncoes EXPORTING ex_total_juncoes TYPE i + alterar_capacidade_viatura IMPORTING im_capacidade TYPE i + obter_total_ecop RETURNING re_n_ecopontos TYPE i + obter_tempo RETURNING re_tempo TYPE ztm_tempo + definir_dia IMPORTING im_dia TYPE dats

+ definir_dia_semana IMPORTING im_dia_semana TYPE char1 + obter_dia RETURNING re_dia TYPE dats

+ obter_dia_semana RETURNING re_dia_semana TYPE char1 + definir_fileira RETURNING im_fileira TYPE char10 + obter_fileira RETURNING re_fileira TYPE char10 + obter_rotas_existentes

+ obter_custo RETURNING re_custo TYPE ztm_custo + obter_m3 RETURNING re_m3 TYPE ztm_m3 + obter_distancia_max RETURNING re_distancia_max TYPE i + definir_distancia_max IMPORTING im_distancia_max TYPE i + obter_ench_min RETURNING re_ench_min TYPE i + definir_ench_min IMPORTING im_ench_min TYPE i

6. Implementação da aplicação

Faculdade de Ciências da Universidade de Lisboa 93

Detalhe dos atributos:

lista_savings  Guarda a informação referente à lista dos savings gerada pelo algoritmo.

 lista_juncoes  Disponibiliza a listas das junções efetuadas durante a execução do algoritmo.

 lista_ecopontos  Consiste na lista dos ecopontos em estudo.

 lista_rotas_atuais  Representa a lista das rotas num determinado momento da execução do algoritmo.

 total_juncoes  Indica o número total de junções já efetuadas.

 capacidade_viat  Corresponde à capacidade das viaturas.

 ecoponto_sede  Corresponde ao ecoponto sede.

 total_rotas  Identifica o número total de rotas geradas pelo algoritmo.

 total_rotas_solução  Listas das rotas de acordo com a solução final obtida.

 lista_rotas_inicial  Lista das rotas iniciais do algoritmo.

 dia_semana  Dia da semana correspondente ao dia em estudo.

 dia  Dia em estudo.

 fileira  Tipo de material (papel, embalagem ou cartão).

 distancia_maxima  Distância máxima permitida entre dois ecopontos para que o respetivo saving seja considerado no algoritmo. (ver capítulo 8.2)

 enchimento_minimo  Percentagem de enchimento a partir da qual a validação que restringe os savings com base nas distâncias deixa de ser considerado. (ver capítulo 8.2)

Detalhe dos métodos:

 constructor  Este método inicializa os vários atributos no momento em que a classe é instanciada.

 novo_ecoponto  Adiciona um ecoponto na lista de ecopontos.

 obter_sede  Obtém o ecoponto sede.

 criar_rotas_iniciais  Cria as rotas iniciais do algoritmo. Cada uma destas rotas consiste na ligação entre cada ecoponto e o ecoponto sede. Esta informação é assignada aos atributos “lista_rotas_atuais”, “lista_rotas_inicial”.

 incrementar_total_rotas  Incrementa uma unidade ao atributo “total_rotas”. Este método é chamado quando se cria uma nova rota.

obter_savings  Obtém a lista dos savings atribuindo esta informação ao atributo “Lista_savings”.

 calcular_custo_saving  Retorna a informação do tempo de deslocação e distância de um determinado saving (entre dois ecopontos).

 calcular_rotas  O sistema cria iterativamente as rotas até obter a solução final, que corresponde à geração das rotas através do algoritmo Clarke and Wright respeitando a restrição das capacidades das viaturas.

6. Implementação da aplicação

Faculdade de Ciências da Universidade de Lisboa 94  obter_rota  Obtém a rota (no caso de existir) que contenha um arco que ligue o

ecoponto (parâmetro de importação do método) e a sede.

 obter_total_rotas  Devolve o número de rotas existentes.

 atualizar_lista_rotas_atuais  Após as junções de duas rotas este método permite atualizar a lista das rotas existentes.

 obter_lista_rota_atuais  Devolve a lista das rotas existentes em determinado momento da execução do algoritmo.

 apagar_rota_lista_r_atuais  Apaga uma rota da lista das rotas atuais. Este método é utilizado quando se efetua uma junção de rotas, visto que as rotas concatenadas devem desaparecer por darem lugar a uma nova rota.

 obter_lista_ecopontos  Devolve a lista dos ecopontos em estudo.

 obter_lista_juncoes  Devolve a lista das junções de rotas efetuadas.

 obter_lista_savings  Devolve a lista dos savings.

 Inicializar  Apaga a informação definida nos atributos desta classe.

 obter_total_juncoes  Obtém o número de junções efetuadas até ao momento.

 alterar_capacidade_viatura  Permite definir um novo limite de capacidade das viaturas.

 obter_total_ecops  Devolve o número de ecopontos incluídos nas rotas obtidas.

 obter_tempo  Devolve a duração total (em minutos) das rotas obtidas.

 definir_dia  Define-se um valor para o atributo “dia”.

 definir_dia_semana  Define-se um valor para o atributo “dia_semana”.

 obter_dia  Obter a informação definida no atributo “dia”.

 obter_dia_semana  Obter a informação definida no atributo “dia_semana”.

 definir_fileira  Permite definir a fileira em estudo através do atributo “fileira”.

 obter_fileira  Obter a informação contida no atributo “fileira”.

 obter_rotas_existentes  Obter as rotas já aprovadas ou realizadas para excluir do estudo os ecopontos já recolhidos ou já incluídos numa rota a efetuar.

 obter_custo  Obter a estimativa referente ao custo/distância total da solução obtida.

 obter_m3  Obter a estimativa do volume em m3 dos resíduos recolhidos.

 obter_distancia_max  Obter o valor definido no atributo “distancia_maxima”.

 definir_distancia_max  Definir o valor definido no atributo “distancia_maxima”.

 obter_ench_min  Obter o valor definido no atributo “enchimento_minimo”.

 definir_ench_min  Definir o valor definido no atributo “enchimento_minimo”.

Devido à complexidade do método “calcular_rotas” opta-se por detalhar a forma como este se encontra implementado.

6. Implementação da aplicação

Faculdade de Ciências da Universidade de Lisboa 95

6.2.6.1 Método “calcular_rotas”

O método “calcular_rotas” agrega um conjunto de outros métodos e tem como objetivo a geração das rotas de recolha dos resíduos.

Este processo contempla os seguintes passos:

1. Para cada registo existente na lista de savings identificam-se os ecopontos que estão associados a um arco em que a sua outra extremidade corresponde ao ecoponto sede.

Como foi referido, apenas os ecopontos nesta situação são considerados relevantes para efeitos de junção de rotas.

A lista de savings encontra-se ordenada de forma crescente, enumerando em primeiro lugar os registos que conduzem a um maior ganho de eficiência.

2. Encontrado um registo relevante para efeitos de junção de rotas, o sistema valida se o total estimado de resíduos a recolher na rota a concatenar não excede a capacidade da viatura.

3. Se a condição anterior for verificada o sistema efetua a junção das duas rotas.

6. Implementação da aplicação

Faculdade de Ciências da Universidade de Lisboa 96

Figura 6.17: Fluxograma explicativo do processo associado com a junção de duas rotas Para cada registo da tabela

“Lista_savings” obter os respetivos dois ecopontos

Existem rotas contendo arcos que liguem cada um dos ecopontos ao ecoponto sede?

Início

Não

Sim

A junção das duas rotas está dentro do limite da

capacidade da viatura?

Sim Efetua a junção das rotas

Não

6. Implementação da aplicação

Faculdade de Ciências da Universidade de Lisboa 97