Comprobar en el tema del algoritmo: Ques20201024

Pregunta 1

descripción

Tu objetivo es sacar al robot del laberinto. El robot mira hacia el norte y la posición inicial está en el medio del laberinto. Puedes girar el robot para que mire al este, sur, oeste y norte. Puede hacer que el robot camine una cierta distancia hacia adelante y se detendrá antes de golpear la pared.

a. Formalice la pregunta, ¿qué tan grande es el espacio de estados?

La formalización es la siguiente:

Estado: el estado está determinado por la posición y la orientación del robot. Cuando la siguiente posición tiene solo 4 orientaciones para elegir, el número de estados posibles es 4. La próxima vez también hay 4 orientaciones para elegir. Las acciones de elegir la orientación y avanzar son continuas.

Estado de primer conocido: el robot mira hacia el norte.

Modelo de transferencia: puede caminar hacia adelante en cualquier dirección, a menos que esté a punto de chocar contra una pared.

Prueba de destino: prueba si la posición actual está fuera del laberinto.

Consumo de ruta: el valor de disipación total es la distancia que se mueve el robot.

Dado que no hay restricciones en la posición y orientación del robot durante el movimiento, y el movimiento del robot no es discreto, el estado puede aumentar exponencialmente y el espacio de estados es infinito.

b) Camine en el laberinto, gire en la intersección de dos o más caminos, vuelva a formalizar esta pregunta, ¿qué tan grande es el espacio estatal ahora?

Estado: el estado está determinado por la posición del robot. Cuando la posición es una intersección, puede pasar al siguiente estado. El estado necesita registrar la posición y el número de la intersección.

Estado de primer conocido: el robot mira hacia el norte en el medio del laberinto.

Modelo de transferencia: ve a la siguiente intersección a menos que estés a punto de chocar contra una pared.

Prueba de destino: prueba si la posición actual está fuera del laberinto.

Consumo de ruta: el valor de disipación total es la distancia recorrida.

Cuando el robot se está moviendo, el espacio de estados se ve afectado por el número de intersecciones (no cambie su orientación en otros momentos). Cuando la intersección es 1, el estado posible es 4, cuando es 2, el estado posible es 8, y cuando la intersección es n, el estado es El espacio es 4n.

c) Partiendo de cualquier punto del laberinto, podemos movernos en cualquiera de las cuatro direcciones hasta dar la vuelta, y solo necesitamos hacer esto para volver a formalizar el problema ¿Solo necesitamos registrar la dirección del robot? ?

Estado: el estado está determinado por la posición y la orientación del robot. Cuando la posición es una intersección, hay 4 direcciones para elegir la siguiente posición, y también puede pasar al siguiente estado. El estado necesita registrar la posición de la intersección Y el numero.

Estado de primer conocido: el robot mira hacia el norte en el medio del laberinto.

Modelo de transferencia: puede caminar hacia adelante en cualquier dirección, a menos que esté a punto de chocar contra una pared.

Prueba de destino: prueba si la posición actual está fuera del laberinto.

Consumo de ruta: el valor de disipación total es la distancia recorrida.

No es necesario registrar la información de dirección, solo la ubicación de la intersección, porque habrá un nuevo estado en la intersección, independientemente de la información de dirección.

d) En nuestra descripción inicial del problema, hemos abstraído el mundo real, restringido las acciones del robot y eliminado detalles, y enumeramos tres simplificaciones que hicimos.

Simplificación 1: la velocidad de movimiento del robot

Simplificación 2: ¿De qué manera actúa el robot como fuerza motriz?

Simplificación 3: tipo de sensor de robot, cámara o rango de infrarrojos

Pregunta 2

El problema de los misioneros y los salvajes Tres misioneros y tres salvajes están en una orilla del río Hay un barco que puede llevar una o dos personas. Por favor, trate de que todos crucen al otro lado del río y exija que no haya más gente salvaje que misioneros en cualquier lugar. Esta pregunta es famosa en IA porque es el primer tema de tesis para discutir la formalización de la pregunta desde un punto de vista analítico.

a. Por favor formalice el problema en detalle, describiendo solo las características necesarias para asegurar que el problema esté resuelto. Dibuja un diagrama de espacio de estados completo.

Referencia de resolución de problemas: https://www.jianshu.com/p/0af3a6bb1e43

Algunas premisas: Hay un viaje de ida y vuelta de la margen izquierda a la margen derecha, en el que pueden navegar misioneros y salvajes, y el estado no puede pedalear durante el proceso de transformación, es decir, descartarlo restaurará el estado del paso anterior. La pregunta se formaliza de la siguiente manera:

Estado: Utilice un triple (m, c, b) para representar el estado en la orilla del río, donde myc representan el número de sacerdotes y salvajes en una determinada orilla, y b se usa para indicar si el barco va de la orilla izquierda a la otra orilla o regresa ( b = 1 significa que el barco está en esta orilla, b = 0 significa que el barco no lo está). Las limitaciones son: a bordo de ambos lados del estrecho

≤2, que es el número de misioneros y salvajes a bordo.

Estado inicial de conocimiento: El estado inicial de la tríada es (3,3,1), es decir, tanto los salvajes de la margen izquierda como los misioneros son 3.

Modelo de transferencia: el barco conduce de la orilla izquierda a la orilla derecha, b de 0 -> 1, y luego de 1 -> 0. Mientras no se cumplan las condiciones de restricción, pasa al siguiente estado.

Prueba de destino: si alcanzar el estado final (0,0,0).

Consumo de ruta: la longitud de la ruta tomada.

Diagrama de espacio de estados:

b) Aplicar un algoritmo de búsqueda adecuado para encontrar la solución óptima al problema. ¿Es una buena idea verificar el estado de duplicado para este problema?

 Utilice el algoritmo de búsqueda en profundidad para resolver el problema, el código es el siguiente:

#include<iostream>
#include<cstdio>
#include<map>
#include<string>
#include<set>
#include<vector>
using namespace std;
using namespace std;
int N;
set<string>ans;
void print(vector<int>way) {
    int i = 0;
    string h;
    for (i = 1; i < way.size(); i++) {
       
        if (way[i] < 100) {
            h += "0";
        }
        h += to_string(way[i]);
        h += " ";
    }
    ans.insert(h);
}
void dfs(int pre, int ni, int nj, int b, set<int>s, vector<int>way) {

    int now = ni * 100 + nj * 10 + b;// 
    s.insert(pre);
    if (s.count(now) || (N - ni) < 0 || (N - nj) < 0 || ni < 0 || nj < 0 || (ni < nj && ni != 0) || ((N - ni) < (N - nj) && (N - ni) != 0)) {
        // 限制条件,若传教士和野人数都小于0,或者剩下的传教士比野人少都直接return
        return;
    }
    if (pre == 0) {
        // 如果上一轮就截止了,pre == 0 代表已到终点状态
        print(way);
        return;
    }
    way.push_back(pre);
    if (b == 1) { // 需前往对岸
      
        // 传教士+野人=1
        dfs(now, ni - 1, nj, 0, s, way);
        dfs(now, ni, nj - 1, 0, s, way);
        // 传教士+野人=2
        dfs(now, ni - 2, nj, 0, s, way);
        dfs(now, ni, nj - 2, 0, s, way);
        dfs(now, ni - 1, nj - 1, 0, s, way);
    }
    else {
     
         // 传教士+野人=1
        dfs(now, ni + 1, nj, 1, s, way);
        dfs(now, ni, nj + 1, 1, s, way);
        // 传教士+野人=2
        dfs(now, ni + 2, nj, 1, s, way);
        dfs(now, ni, nj + 2, 1, s, way);
        dfs(now, ni + 1, nj + 1, 1, s, way);
    }
}
//Ques20201024
int main() {
    int b = 1;
    // 初始化b的值
    int m, c;
    int pre = -1;
    set<int>s;
    chooseN = 3;
    N = c = m = 3;
    vector<int>way;
    dfs(pre, m, c, b, s, way);
    for (auto it = ans.begin(); it != ans.end(); it++) {
        cout << *it << endl;
    }
}

resultado de ejecución

Hay un total de 4 caminos óptimos obtenidos por la solución, como se muestra en el espacio del diagrama de arriba.

c. El espacio de estados de este problema es muy simple ¿Qué crees que dificulta que la gente lo resuelva?

En el proceso de resolución, se pueden transportar dos personas, y luego las mismas dos personas serán transportadas de regreso (o usarán otro formulario pero sigue siendo un ciclo, es decir, no funciona), por lo que es difícil eliminar esta duplicación. Dónde resolver. La mejor manera es usar un estado con memoria. Si ha encontrado este estado antes, simplemente regrese directamente y regrese al estado anterior. 

Supongo que te gusta

Origin blog.csdn.net/Toky_min/article/details/109259297
Recomendado
Clasificación