
```
[{+|-}a1
        
        +
         ][{+|-}a2
                  
                  +
                   ]…[{+|-}ana
                               
                               +
                               ] para cada celda. Esto significa que enumeramos todas las 

```

celdas, y la información en cada celda se compone de las flechas salientes (más precisamente a qué celdas llega por el número de veces que la acción aparece). 

Utilizamos un índice toroidal donde, p. ej. 1 - 2 = nc **– 1, por lo que podemos usar** 
referencias positivas o negativas (este es el significado de +|-). Cuando nos referimos a la misma celda se omite la acción. 

El espacio de la Figura 3 se codifica con +r+r+r+r+r **y un algoritmo de Markov que lo** 
genera es: 
1. S **→ +**r 2. → *SSSSS*Ω 
3. **Ω →∙** 
Con la descripción y definiciones anteriores no es difícil ver como *codificar*
(inequívocamente) cualquier entorno válido. Sin embargo, si queremos *generar* **entornos** usando algoritmos de Markov, la cosa es mucho más difícil, ya que una generación aleatoria de las reglas de Markov puede generar cadenas que no representen ningún entorno. Aunque las optimizaciones pueden existir, ya que no queremos perder generalidad y manejar la medición de la complejidad, aquí proponemos dejar al algoritmo ejecutarse un número limitado de iteraciones y entonces pasarle un postprocesamiento 
(eliminar + repetidos, símbolos inválidos, etc.) y entonces comprobar si la cadena resultante es un entorno válido (sintáctica y semánticamente). 

Para el cálculo de la complejidad, cualquier aproximación de la longitud del algoritmo de Markov (p. ej. el número de símbolos del algoritmo entero) sería válido como una aproximación a su complejidad. 

## Codificando Y Generando Objetos

Primero codificamos el número de objetos nω**, utilizando cualquier codificación para** 
los números naturales como se menciona arriba. Después tenemos que codificar su celda inicial, codificando también no + 3 números naturales delimitados por nc **(no** necesariamente diferentes, consecuentemente log nc **cada uno). En el caso de que** ⊕ y ⊖
esté**n en la misma celda, una nueva celda es generada aleatoriamente y asignada a** ⊖. 

El comportamiento (que debe ser universal) es generado por otro algoritmo de Markov como sigue. La cadena de entrada del algoritmo es la observació**n, codificada como** 
hemos visto en secciones anteriores. Solo con la observació**n actual los objetos no** 
tendrían acceso a la memoria y estarían muy limitados, por lo que dos sí**mbolos** 
especiales **∆ y ∇ significan poner la cadena actual en memoria o recuperar la última** 
cadena insertada a la memoria respectivamente. Una vez el algoritmo de Markov es ejecutado, todos los símbolos que no están en el conjunto de acciones A **son** 
eliminados de la cadena generada. Entonces, para todos los objetos (excepto para ⊕ y 
⊖), la acción más a la derecha en la cadena es la acción a realizar. Para ⊕ y ⊖ **se utiliza** 
toda la cadena. 