Package main

## Class BasuraProblem

- java.lang.Object
- - org.uma.jmetal.problem.AbstractGenericProblem<org.uma.jmetal.solution.binarysolution.BinarySolution>
  - - org.uma.jmetal.problem.binaryproblem.impl.AbstractBinaryProblem
    - - main.BasuraProblem

- All Implemented Interfaces:
    `java.io.Serializable`, `org.uma.jmetal.problem.binaryproblem.BinaryProblem`, `org.uma.jmetal.problem.Problem<org.uma.jmetal.solution.binarysolution.BinarySolution>`

      public class BasuraProblem
      extends org.uma.jmetal.problem.binaryproblem.impl.AbstractBinaryProblem

  Clase que extiende el AbstractBinaryProblem con los detalles del problema de la recolección de basura. La función utiliza un thredpool para evaluar de forma paralela cada una de las rutas de los itinerarios utilizando TSPSolver. Si existe algun problema en la creación del thread se procede a la utilización de una operación alternativa que es secuencial.
  Author:
    Toyos, Vallcorba
  See Also:
    Serialized Form

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BasuraProblem​(java.lang.String pathToInstanceFolder, int[] estadoInicialContenedores, int cantidadCamiones, int capacidadCamiones, int cores)` | Constructor.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `org.uma.jmetal.solution.binarysolution.BinarySolution` | `createSolution()` | Crea una solución posible.
    `org.uma.jmetal.solution.binarysolution.BinarySolution` | `evaluate​(org.uma.jmetal.solution.binarysolution.BinarySolution solution)` | Calcula el fitness de la solución.
    `org.uma.jmetal.solution.binarysolution.BinarySolution` | `evaluateSingleThreaded​(org.uma.jmetal.solution.binarysolution.BinarySolution solution)` |
    `int` | `getBitsFromVariable​(int index)` |
    `int` | `getFactorTiempo()` |
    `int` | `getFactorTurnoDiurno()` |
    `java.util.List<java.lang.Integer>` | `getListOfBitsPerVariable()` |
    `double` | `getTiempoMaximo()` |
    `BasuraProblem` | `setCoefTermiantion​(int iterations, float variance)` |
    `void` | `setFactorTiempo​(int factorTiempo)` |
    `void` | `setFactorTurnoDiurno​(int factorTurnoDiurno)` |
    `void` | `setTiempoMaximo​(double tiempoMaximo)` |
    `BasuraProblem` | `setTimeTermination​(int time)` |

    - ### Methods inherited from class org.uma.jmetal.problem.binaryproblem.impl.AbstractBinaryProblem

      `getTotalNumberOfBits`

    - ### Methods inherited from class org.uma.jmetal.problem.AbstractGenericProblem

      `getName, getNumberOfConstraints, getNumberOfObjectives, getNumberOfVariables`

    - ### Methods inherited from class java.lang.Object

      `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.uma.jmetal.problem.Problem

      `getName, getNumberOfConstraints, getNumberOfObjectives, getNumberOfVariables`

- - ### Constructor Detail

    - #### BasuraProblem

          public BasuraProblem​(java.lang.String pathToInstanceFolder,
                               int[] estadoInicialContenedores,
                               int cantidadCamiones,
                               int capacidadCamiones,
                               int cores)

      Constructor.
      Parameters:
        `pathToInstanceFolder` - : carpeta con los archivos de la instancia.
        `estadoInicialContenedores` - : estado inicial de los contenedores con los dias desde que fue levantado por ultima vez
        `cantidadCamiones` - : cantidad máxima de camiones
        `capacidadCamiones` - : capacidad máxima de los camiones
        `cores` - : tamaño del pool de nucleos para la función de evaluación.

  - ### Method Detail

    - #### getBitsFromVariable

          public int getBitsFromVariable​(int index)

      Specified by:
        `getBitsFromVariable` in interface `org.uma.jmetal.problem.binaryproblem.BinaryProblem`
      Overrides:
        `getBitsFromVariable` in class `org.uma.jmetal.problem.binaryproblem.impl.AbstractBinaryProblem`

    - #### getListOfBitsPerVariable

          public java.util.List<java.lang.Integer> getListOfBitsPerVariable()

      Specified by:
        `getListOfBitsPerVariable` in interface `org.uma.jmetal.problem.binaryproblem.BinaryProblem`
      Specified by:
        `getListOfBitsPerVariable` in class `org.uma.jmetal.problem.binaryproblem.impl.AbstractBinaryProblem`

    - #### createSolution

          public org.uma.jmetal.solution.binarysolution.BinarySolution createSolution()

      Crea una solución posible. Una solución consiste de un itinerario con los contenedores que levantará cada camión en cada turno de cada día. La solución está representada como un conjunto de matrices para cada turno de cada dia. Donde las filas son cada camión y las columnas los contenedores. Una entrada 1 en la fila i columna j indica que el camión i levantará el contenedor j para el turno y día que representa dicha matriz. Para crear la solucion se escoge una estrategia de forma aleatoria. Las estrategias a utilizar son: Generación por algoritmo Greedy, generación con Greedy más shuffle de turnos y generación aleatoria. Las estrategias se escogen con probabilidad 0.33,0.33 y 0.66 respectivamente.
      Specified by:
        `createSolution` in interface `org.uma.jmetal.problem.Problem<org.uma.jmetal.solution.binarysolution.BinarySolution>`
      Overrides:
        `createSolution` in class `org.uma.jmetal.problem.binaryproblem.impl.AbstractBinaryProblem`
      Returns:
        Retorna la matriz codificada como una BinarySolution.

    - #### evaluate

          public org.uma.jmetal.solution.binarysolution.BinarySolution evaluate​(org.uma.jmetal.solution.binarysolution.BinarySolution solution)

      Calcula el fitness de la solución. El fitness se calcula en base a las restricciones de capacidades, distancia y tiempo del itinerario.
      Parameters:
        `solution` - solución a evaluar.
      Returns:
        solución evaluada.

    - #### evaluateSingleThreaded

          public org.uma.jmetal.solution.binarysolution.BinarySolution evaluateSingleThreaded​(org.uma.jmetal.solution.binarysolution.BinarySolution solution)

    - #### getFactorTurnoDiurno

          public int getFactorTurnoDiurno()

    - #### setFactorTurnoDiurno

          public void setFactorTurnoDiurno​(int factorTurnoDiurno)

    - #### getTiempoMaximo

          public double getTiempoMaximo()

    - #### setTiempoMaximo

          public void setTiempoMaximo​(double tiempoMaximo)

    - #### getFactorTiempo

          public int getFactorTiempo()

    - #### setFactorTiempo

          public void setFactorTiempo​(int factorTiempo)

    - #### setTimeTermination

          public BasuraProblem setTimeTermination​(int time)

    - #### setCoefTermiantion

          public BasuraProblem setCoefTermiantion​(int iterations,
                                                  float variance)