Skip to content

Problema

sebaignacioo edited this page Jun 23, 2021 · 3 revisions

Este archivo contiene el código relacionado con la instancia del problema y sus soluciones.

Clases

Este archivo contiene 3 clases.

Clase Puesto

class Puesto:
    def __init__(self, largo: int, id: int):
        """
        Objeto Puesto. Contiene los datos de cada puesto de la feria.
        @type largo: int
        @param largo: Largo del puesto
        @type id: int
        @param id: ID del puesto (números correlativos)
        """

Descripcion

  • Objeto Puesto. Contiene los datos de cada puesto de la feria.

Constructor

  • El método constructor requiere lo siguiente:
    • Parámetros:
      • largo (int): Largo del puesto
      • id (int): ID del puesto (números correlativos)

Mètodos

  • Esta clase no posee métodos.

Clase SolucionProblema

class SolucionProblema:
    def __init__(self, solucion, e: float):
        """
        Objeto que representa una solución del problema.
        @type solucion: list[Puesto]
        @param solucion: Lista de puestos en el órden de la solución.
        @type e: float
        @param e: Esfuerzo calculado para la solución
        """

Descripcion

  • Objeto que representa la solución del problema.

Constructor

  • El método constructor requiere lo siguiente:
    • Parámetros:
      • solucion (list[Puesto]): Lista de puestos en el órden de la solución.

Mètodos

  • Esta clase posee 1 método.

    • Método hacer_swap

      def hacer_swap(self):
              """
              Función encargada de realizar un swap desde la solución original, intercambiando 2 posiciones aleatorias.
              @return: Nueva solución, realizando un swap aleatorio desde la solución actual
              @rtype: list[Puesto]
              """
      • Descripcion: Función encargada de realizar un swap desde la solución original, intercambiando 2 posiciones aleatorias.
      • Parámetros
        • Este método no recibe parámetros
      • Retorno
        • (SolucionProblema): Nueva solución, realizando un swap aleatorio desde la solución actual

Clase InstanciaProblema

def __init__(self, datos_archivo: dict, datos_iniciales: dict, ps: PS):
        """
        Objeto que representa la instancia del problema.
        @type datos_archivo: dict
        @param datos_archivo: Diccionario que contiene los datos extraídos desde el archivo que contiene los datos de la instancia.
        @type datos_iniciales: dict
        @param datos_iniciales: Diccionario que contiene los parámetros iniciales (establecidos en el programa principal)
        @type ps: PrintService
        @param ps: Librería para hacer impresiones por pantalla
        """

Descripcion

  • Objeto que representa la instancia del problema.

Constructor

  • El método constructor requiere lo siguiente:
    • Parámetros:
      • datos_archivo (dict): Diccionario que contiene los datos extraídos desde el archivo que contiene los datos de la instancia.
      • datos_iniciales (dict): Diccionario que contiene los parámetros iniciales (establecidos en el programa principal)
      • ps (PrintService): Librería para hacer impresiones por pantalla

Mètodos

  • Esta clase posee 7 métodos.
    • Método generar_datos_iniciales

      def generar_datos_iniciales(self, datos_archivo: dict, datos_iniciales: dict) -> dict:
          """
          Función que se encarga de generar un diccionario con los datos de la instancia del problema. Estos datos son
          entregados como parámetros de la función, tanto los extraídos desde el archivo, como los establecidos en el
          programa principal.
          @type datos_archivo: dict
          @param datos_archivo: Diccionario que contiene los datos extraídos desde el archivo que contiene los datos de la instancia.
          @type datos_iniciales: dict
          @param datos_iniciales: Diccionario que contiene los parámetros iniciales (establecidos en el programa principal)
          @rtype: dict
          @return: Diccionario con los datos iniciales: 'n' (int): Numero de puestos, 'w' (list[list[int]]): Cantidad de
          personas que irán del puesto i al j, 'puestos' (list[Puesto]): Puestos de la feria. 't_inicial' (float):
          Temperatura inicial del SimAn. 't_min' (float):  Temperatura mínima del SimAn. 'alpha' (float): Valor de
          alpha de SimAn.
          """
      • Descripcion: Función que se encarga de generar un diccionario con los datos de la instancia del problema. Estos datos son entregados como parámetros de la función, tanto los extraídos desde el archivo, como los establecidos en el programa principal.
      • Parámetros
        • datos_archivo (dict): Diccionario que contiene los datos extraídos desde el archivo que contiene los datos de la instancia.
        • datos_iniciales (dict): Diccionario que contiene los parámetros iniciales (establecidos en el programa principal)
      • Retorno
        • (dict): Diccionario con los datos iniciales: 'n' (int): Numero de puestos, 'w' (list[list[int]]): Cantidad de personas que irán del puesto i al j, 'puestos' (list[Puesto]): Puestos de la feria. 't_inicial' (float): Temperatura inicial del SimAn. 't_min' (float): Temperatura mínima del SimAn. 'alpha' (float): Valor de alpha de SimAn.
    • Método calcular_distancia

      def calcular_distancia(self, i: int, j: int, puestos) -> float:
          """
          Función que se encarga de calcular la distancia total entre el puesto en las posiciones i y j. Toma en cuenta
          el largo de ambos puestos, y los largos de todos los puestos que están entre medio.
          @type i: int
          @param i: Posición o índice (parte desde 1) del origen.
          @type j: int
          @param j: Posición o índice (parte desde 1) del destino.
          @type puestos: list[Puesto]
          @param puestos: Lista de puestos de la solución.
          @rtype: float
          @return: Distancia total entre el puesto i y el puesto j
          """
      • Descripcion: Función que se encarga de calcular la distancia total entre el puesto en las posiciones i y j. Toma en cuenta el largo de ambos puestos, y los largos de todos los puestos que están entre medio.
      • Parámetros
        • i (int): Posición o índice (parte desde 1) del origen.
        • j (int): Posición o índice (parte desde 1) del destino.
        • puestos (list[Puesto]): Lista de puestos de la solución.
      • Retorno
        • (float): Distancia total entre el puesto i y el puesto j
    • Método calcular_esfuerzo

      def calcular_esfuerzo(self, sol) -> float:
          """
          Función que se encarga de calcular el esfuerzo requerido según la solución entregada
          @type sol: list[Puesto]
          @param sol: Lista de puestos que contiene los datos de la solución a la que se desea calcular el
          esfuerzo.
          @rtype: float
          @return: Esfuerzo total calculado para la solución
          """
      • Descripcion: Función que se encarga de calcular el esfuerzo requerido según la solución entregada
      • Parámetros
        • sol (list[Puesto]): Objeto Solucion_Problema que contiene los datos de la solución a la que se desea calcular el esfuerzo.
      • Retorno
        • (float): Esfuerzo total calculado para la solución
    • Método generar_solucion_inicial

      def generar_solucion_inicial(self) -> None:
          """
          Función que se encarga de generar la solución inicial del problema. Utiliza números random para generar una
          solución aleatoria de puestos.
          """
      • Descripcion: Función que se encarga de generar la solución inicial del problema. Utiliza números random para generar una solución aleatoria de puestos.
      • Parámetros
        • Este método no posee parámetros.
      • Retorno
        • Este método no retorna nada.
    • Método generar_nueva_solucion

      def generar_nueva_solucion(self) -> None:
          """
          Función encargada de generar una nueva solución, a partir de una solución de origen. La solución se genera a
          partir de lo que indique el índice de solución actual, y la genera haciendo swap (intercambio) entre dos
          puestos aleatorios.
          """
      • Descripcion: Función encargada de generar una nueva solución, a partir de una solución de origen. La solución se genera a partir de lo que indique el índice de solución actual, y la genera haciendo swap (intercambio) entre dos puestos aleatorios.
      • Parámetros
        • Este método no posee parámetros.
      • Retorno
        • Este método no retorna nada.
    • Método aceptar_solucion

      def aceptar_solucion(self) -> None:
          """
          Función que se encarga de aceptar la solución generada. Agrega la solución a la lista de soluciones,
          y actualiza el valor del índice de la solución actual.
          """
      • Descripcion: Función que se encarga de aceptar la solución generada. Agrega la solución a la lista de soluciones, y actualiza el valor del índice de la solución actual.
      • Parámetros
        • Este método no posee parámetros.
      • Retorno
        • Este método no retorna nada.
    • Método reiniciar_soluciones

      def reiniciar_soluciones(self) -> None:
          """
          Función encargada de reiniciar la instancia del problema para permitir la ejecución de un nuevo ciclo de
          Simulated Annealing.
          """
      • Descripcion: Función encargada de reiniciar la instancia del problema para permitir la ejecución de un nuevo ciclo de Simulated Annealing.
      • Parámetros
        • Este método no posee parámetros.
      • Retorno
        • Este método no retorna nada.

Funciones

Este archivo no contiene funciones.

Clone this wiki locally