El bloque de representación, dentro del sistema IA, está relacionado con el modo en el que codificamos las percepciones y las almacenamos en nuestro sistema de memoria, de modo que podamos utilizarlas para crear sistemas inteligentes. Existen muchas maneras de representación de percepciones, y resulta fundamental llevar a cabo un estudio pausado de las mismas para no complicar en exceso nuestros sistema IA.
Pues bien, comencemos con la representación de la información procedente de la percepción; esto es con el bloque representación. Si tenemos dos sensores; izquierda y derecha, nuestro modelo resulta ser extremadamente sencillo. Simplemente tenemos 4 combinaciones posibles que podemos representar en la tabla siguiente:
SensorIzq,SensorDch
0,0
0,1
1,0
1,1
Como he dicho, estamos aprendiendo y por lo tanto creando modelos lo más sencillo posible. Aplicando cierto razonamiento a la representación de las acciones a tomar con estas percepciones podemos mejorar la tabla anterior incorporando una tercera columna con un valor para cada uno de los estados anteriores;
SensorIzq,SensorDch,Robot
0,0,0
0,1,1
1,0,2
1,1,3
De este modo ya tenemos representados nuestro modelo. Basta con crear un documento llamado por ejemplo linefollower.csv y reflejar la tabla anterior tal y como está.
Por otro lado, el bloque de razonamiento lógico es el encargado de seleccionar las acciones apropiadas para que el bloque de actuación responda a la motivación del sistema IA. Es decir, el bloque de razonamiento responde a la pregunta; ¿qué debería hacer el sistema IA con los datos codificados adecuadamente (representación) procedentes de la percepción, para conseguir los objetivos (motivación) planteados para nuestro sistema?
La implementación de este bloque de razonamiento lógico lo vamos a llevar a cabo a través de programación con Arduino. Tengamos en cuenta que de momento no tenemos construido el bloque de aprendizaje, pero lo que si sabemos es que la variable Robot del bloque anterior de representación va a poder presentar los valores 0, 1, 2 y 3. Por lo tanto atendiendo a las percepciones en cada uno de estos estados podemos decirle al robot como actuar. Os paso la propuesta siguiente:
switch((int)prediction) {
case 0:
/* En este caso he preferido
no hacer nada, pues así al
principio está parado hasta
que lo movemos sobre una línea,
y en caso de salirse pues ya está
girando así que genial */
break;
case 1:
adelanteMotorI();
atrasMotorD();
break;
case 2:
adelanteMotorD();
atrasMotorI();
break;
case 3:
adelanteMotorI();
adelanteMotorD();
break;
}
Como podéis ver hemos implementado un bloque de acuerdo al razonamiento lógico supervisado de los estados posibles del Robot. Hemos preguntado por el valor de una variable llamada prediction que de momento no sabemos como se genera pero que podemos suponer que será el bloque de aprendizaje quién la determine.
Pues de acuerdo a la predicción del bloque de aprendizaje que generemos en la unidad siguiente, nuestro arduino llevará a cabo unas acciones a través de las funciones que creamos en la unidad 7 de actuación y que controlan los movimientos de los motores.
Aclaración de las acciones a tomar (bloque razonamiento):
Empecemos por el final: Si la variable Robot procedente de la predicción nos determina que el robot está en la situación 3, es que nuestros sensores del bloque percepción marcan ambos '1', esto es, los dos están sobre la cinta aislante, le diremos al bloque actuación que mantenga los dos motores hacia adelante.
Si la predicción nos marca el estado 2; sensor derecha 0 (se ha salido de la línea por la derecha) le diremos al bloque actuación que haga girar el robot configurando e motor derecho hacia adelante y el izquierdo hacia atrás.
Si la predicción nos marca el estado 1; sensor izquierdo 0 (se ha salido de la línea por la izquierda) haremos lo contrario que la situación anterior.
Y si la predicción nos marca el estado 0: se ha salido por los dos lados, no le doy instrucciones adicionales porque ya anteriormente se habrá salido por uno de los dos lados y ya sabe que tiene que girar, de modo que en este estado simplemente espero a que el giro de la acción anterior se complete.
De momento no podemos probar este código, porque como he dicho, la variable prediction aún no se ha creado, pues pertenece al bloque aprendizaje que veremos en la unidad siguiente.