El juego Cities: Skylines resultó ser Turing completo: creamos un sumador de 4 bits

Cities: Skylines es un juego de simulación de ciudad con suficiente complejidad para crear elementos lógicos universales en él. Usando elementos lógicos universales, puede construir cualquier circuito, incluidas las máquinas completas de Turing. Es decir, como en Minecraft, podemos crear una computadora dentro de Cities: Skylines. Sin embargo, sería muy difícil crear una computadora con todas las funciones sobre la base de estos elementos, por lo que demostraré un sumador de 4 bits. Todo se hace en la versión estándar del juego; no se requieren modificaciones ni complementos.

Este juego, como cualquier otro simulador de construcción de ciudades, requiere que el jugador suministre electricidad y agua a la ciudad. Las centrales eléctricas generan electricidad, para esto necesitan agua limpia y alcantarillado. Las torres de agua suministran agua limpia, las tuberías de alcantarillado le permiten deshacerse de los desagües y ambos tipos de edificios requieren electricidad. Esta dualidad entre alcantarillas y torres de agua le permite crear elementos AND y OR.


Participantes clave, de izquierda a derecha: una planta de energía de combustible líquido, una torre de agua, una tubería de alcantarillado. Detrás hay una turbina eólica.

A continuación se muestra cómo construir el elemento AND. Las dos entradas son líneas eléctricas que conducen a la torre de agua (arriba) y a la tubería de alcantarillado (abajo). La salida es una línea eléctrica conectada a una planta de energía. Aunque las entradas son cero en la captura de pantalla, la planta de energía sigue generando electricidad, incluso después de que se complete el suministro de agua y las aguas residuales funcionen, toma un tiempo detenerse. Los edificios están muy separados, porque de lo contrario la electricidad podría fluir libremente entre ellos.




El elemento AND en un mapa regular que muestra capas de electricidad y agua.

Para la integridad funcional, necesitamos un componente más: un inversor o un elemento NOT. Para crearlo, utilizaremos la simulación de la dinámica de los fluidos del juego. El uso inadecuado de presas, canales o una carga demasiado pesada en las alcantarillas puede provocar la inundación de los edificios. Una central eléctrica inundada no genera electricidad. Esto es suficiente para crear el elemento NOT que se muestra a continuación.




Arriba: la capa de electricidad del elemento NOT; abajo: el sistema de alcantarillado se apaga y enciende.

Se puede construir un sumador de 1 bit de acuerdo con el esquema de 9 elementos diferentes, que se muestra a continuación. Cuatro de estos sumadores se pueden encadenar para crear un sumador de 4 bits. Coloqué las puertas en la cuadrícula para mostrar cómo encajarían en el mapa.


El esquema de un sumador de 1 bit con un carry.

Para simplificar mi vida, decidí activar dinero infinito y jugar en el mapa creado en el editor de mapas. Puede importar imágenes PNG en el editor, que se utilizan para cargar el mapa de altura. ¡Creé un mapa con bloques de tierra en el que puedes colocar elementos lógicos como en una placa de circuito impreso ! Así es como se ve el mapa. Las imágenes muestran cuatro sumadores de 1 bit que se repiten en una cuadrícula de 2x2.



Las líneas discontinuas son visibles en la imagen porque el juego no funciona muy bien en los bordes afilados.

Construir un circuito es un proceso muy monótono, y tuve que comenzar una y otra vez debido a mis errores de cálculo. Uno de los problemas que encontré es la intersección de cables. Afortunadamente, las líneas eléctricas con una diferencia significativa en la elevación pueden cruzarse sin contacto.


Sumador de 1 bit. Conecté cuatro de esos elementos juntos.

Finalmente, necesito construir una ciudad cercana, creando un volumen de desagües suficiente para inundar simultáneamente hasta ocho molinos de viento (sí, nuestra computadora funciona como una caca). Pero no llamaría a esta decisión ecológica: cada elemento lógico utiliza una planta de energía de combustible líquido, por lo que el nivel de contaminación es bastante alto. La depuración fue difícil: a veces resultó que los relámpagos provocaban la ruptura de las líneas eléctricas. Ella es como los rayos cósmicos, pero actúa por más tiempo.


Una red de líneas eléctricas que conduce a una de las entradas de 4 bits.

Grabé un video para mostrar que la adición realmente funciona. En el primero, configuré una señal en la entrada conectándola a una estación de energía que siempre está encendida (como alimentar un circuito integrado). A la izquierda, configuré el valor en 1001 (= 9), en el medio de 1110 (= 14). Después de configurar los valores de las entradas, aceleré el juego y la salida en los cinco cables de la derecha tomó el valor de una unidad. Después de mucho tiempo, el valor final se estableció en 10111 (= 23). ¡Y realmente funciona!


En el segundo video, me concentré en uno de los sumadores. Puede ver cómo el estado de los componentes cambia con el tiempo hasta que se establece el valor de salida final (0 - suma, 1 - transferencia).


El proyecto tiene algunos defectos. Hará una computadora muy lenta: una adición de 4 bits requiere aproximadamente 15 meses de tiempo en el juego y aproximadamente 20 minutos de tiempo real. Hay problemas con el tamaño. Debido a la forma en que se implementa la potencia en el juego, los componentes del elemento lógico deben estar lo suficientemente separados; de lo contrario, la corriente fluirá entre ellos. El sumador de 4 bits tomó la mayoría de los 9 mosaicos disponibles en un juego normal, pero no lo optimicé mucho. Se pueden usar hasta 25 fichas con modificaciones. Si tiene ideas sobre cómo implementar cálculos más eficientes, ¡escríbalo en los comentarios al artículo original!

Source: https://habr.com/ru/post/460233/


All Articles