Resolución de Problema de Navegación de Robot en Matriz con Costes Variables

Enviado por Chuletator online y clasificado en Matemáticas

Escrito el en español con un tamaño de 5,14 KB

Formalización del Problema

Espacio de Estados

Este problema puede ser representado mediante una matriz de 2 dimensiones con n filas y m columnas (n=4 y m=3 para este enunciado). Cada estado (i, j) indica, por tanto, las coordenadas de la celda en la que se encuentra el robot en cada momento.

Estado Inicial

El estado inicial es (1, 1) para este enunciado.

Estado Final

El estado final es (4, 3).

Test Objetivo

Consiste en comprobar que el estado actual (i, j) es igual al Estado Final: (i, j) = Estado Final.

Operadores

Los operadores son los movimientos a celdas adyacentes de la matriz:

  • Mover abajo
  • Mover arriba
  • Mover izquierda
  • Mover derecha

Cada movimiento implica mover una posición. Además, según este enunciado, los costes de aplicar un operador son 100, 200 o 300 euros, dependiendo del estado en que nos encontremos. Por tanto, si el movimiento es realizado, además de devolver el estado sucesor, es necesario devolver el coste de aplicar dicho operador.

Considerando las constantes: MAX_FILAS = 4 y MAX_COL = 3, se definen los siguientes procedimientos:

Procedimiento MoverAbajo

procedimiento MoverAbajo(E/S entero: fil, E/S entero: col, S entero: coste)
var
  entero: coste_calculado
inicio
  coste_calculado <- 0
  si fil < MAX_FILAS entonces
    // Calcular coste basado en la celda actual ANTES de mover
    si fil = 2 Y (col = 1 O col = 3) entonces
      coste_calculado <- 200
    sino
      si fil = 3 entonces
        coste_calculado <- 300
      sino
        coste_calculado <- 100
      fin_si
    fin_si
    // Actualizar posición
    fil <- fil + 1
    coste <- coste_calculado // Asignar coste de salida
  sino
    coste <- 0 // No se puede mover, coste 0
  fin_si
fin_procedimiento

Procedimiento MoverArriba

procedimiento MoverArriba(E/S entero: fil, E/S entero: col, S entero: coste)
var
  entero: coste_calculado
inicio
  coste_calculado <- 0
  si fil > 1 entonces
    // Calcular coste basado en la celda actual ANTES de mover
    si fil = 3 Y (col = 1 O col = 3) entonces
      coste_calculado <- 200
    sino
      si fil = 4 entonces
        coste_calculado <- 300
      sino
        coste_calculado <- 100
      fin_si
    fin_si
    // Actualizar posición
    fil <- fil - 1
    coste <- coste_calculado // Asignar coste de salida
  sino
    coste <- 0 // No se puede mover, coste 0
  fin_si
fin_procedimiento

Procedimiento MoverIzq

procedimiento MoverIzq(E/S entero: fil, E/S entero: col, S entero: coste)
var
  entero: coste_calculado
inicio
  coste_calculado <- 0
  si col > 1 entonces
    // Calcular coste basado en la celda actual ANTES de mover
    si fil = 2 Y col = 2 entonces
      coste_calculado <- 200
    sino
      coste_calculado <- 100
    fin_si
    // Actualizar posición
    col <- col - 1
    coste <- coste_calculado // Asignar coste de salida
  sino
    coste <- 0 // No se puede mover, coste 0
  fin_si
fin_procedimiento

Procedimiento MoverDer

procedimiento MoverDer(E/S entero: fil, E/S entero: col, S entero: coste)
var
  entero: coste_calculado
inicio
  coste_calculado <- 0
  si col < MAX_COL entonces
    // Calcular coste basado en la celda actual ANTES de mover
    si fil = 2 Y col = 1 entonces
      coste_calculado <- 200
    sino
      coste_calculado <- 100
    fin_si
    // Actualizar posición
    col <- col + 1
    coste <- coste_calculado // Asignar coste de salida
  sino
    coste <- 0 // No se puede mover, coste 0
  fin_si
fin_procedimiento

Definición de la Heurística

Este problema se representa en una matriz de 2 dimensiones donde cada movimiento consiste en ir de una celda a otra adyacente. Por tanto, una heurística admisible puede estar relacionada con el número de celdas que restan hasta la solución, expresada mediante la distancia de Manhattan: número de filas y número de columnas desde la celda actual hasta la celda objetivo.

Por otra parte, el enunciado ya indica que el coste mínimo para atravesar dos salas es de 100 euros. Realizando una relajación de las condiciones del problema, se puede estimar que cada movimiento tiene un coste mínimo de 100. Por lo tanto, la heurística se define como:

H(n) = 100 * Distancia_Manhattan(n, Estado_Objetivo)

Siendo n cualquier estado del espacio del problema.

Admisibilidad de la Heurística

La función heurística es admisible si nunca sobreestima el coste real de llegar a la solución. Esta heurística calcula el coste estimado basándose en el mínimo número de movimientos necesarios (según la distancia de Manhattan) y multiplicándolo por el mínimo coste posible de un movimiento (100 euros). Por tanto, nunca sobreestimará el coste real de llegar a la solución, cumpliendo la condición de admisibilidad.

Entradas relacionadas: