Das Spiel Cities: Skylines erwies sich als Turing-vollständig: Wir erstellen einen 4-Bit-Addierer

Städte: Skylines ist ein Stadtsimulationsspiel mit ausreichender Komplexität, um darin universelle logische Elemente zu erstellen. Mit universellen Logikelementen können Sie jede Schaltung bauen, einschließlich Turing-kompletter Maschinen. Das heißt, wie in Minecraft können wir in Cities: Skylines einen Computer erstellen. Es wäre jedoch sehr schwierig, auf der Grundlage dieser Elemente einen Computer mit vollem Funktionsumfang zu erstellen. Daher werde ich stattdessen einen 4-Bit-Addierer demonstrieren. Alles ist in der Vanille-Version des Spiels erledigt, es sind keine Mods oder Add-Ons erforderlich.

Wie bei jedem anderen Stadtbausimulator muss der Spieler die Stadt mit Strom und Wasser versorgen. Kraftwerke erzeugen Strom, dafür benötigen sie sauberes Wasser und Abwasser. Wassertürme liefern sauberes Wasser, Abwasserrohre ermöglichen es Ihnen, Abflüsse zu beseitigen, und beide Gebäudetypen benötigen Strom. Diese Dualität zwischen Abwasserkanälen und Wassertürmen ermöglicht es Ihnen, UND- und ODER-Elemente zu erstellen.


Wichtige Teilnehmer von links nach rechts: ein Flüssigbrennstoffkraftwerk, ein Wasserturm, ein Abwasserrohr. Dahinter steht eine Windkraftanlage.

Im Folgenden wird gezeigt, wie das AND-Element erstellt wird. Die beiden Eingänge sind Stromleitungen, die zum Wasserturm (oben) und zum Abwasserrohr (unten) führen. Der Ausgang ist eine Stromleitung, die an ein Kraftwerk angeschlossen ist. Obwohl die Eingaben im Screenshot Null sind, erzeugt das Kraftwerk immer noch Strom - selbst nachdem die Wasserversorgung abgeschlossen ist und das Abwasser funktioniert, dauert es einige Zeit, bis es gestoppt ist. Die Gebäude sind weit voneinander entfernt, da sonst Strom frei zwischen ihnen fließen könnte.




Das UND-Element auf einer regulären Karte zeigt Schichten von Strom und Wasser.

Für die Funktionsvollständigkeit benötigen wir eine weitere Komponente: einen Wechselrichter oder ein NOT-Element. Um es zu erstellen, werden wir die Simulation der Dynamik der Flüssigkeiten des Spiels verwenden. Die unsachgemäße Verwendung von Dämmen, Kanälen oder eine zu schwere Belastung der Kanalisation kann zur Überflutung von Gebäuden führen. Ein überflutetes Kraftwerk erzeugt keinen Strom. Dies reicht aus, um das unten gezeigte NOT-Element zu erstellen.




Oben: die Elektrizitätsschicht des NOT-Elements, unten: das Abwassersystem aus- und wieder einschalten.

Ein 1-Bit-Addierer kann gemäß dem unten gezeigten Schema von 9 verschiedenen Elementen konstruiert werden. Vier dieser Addierer können zu einem 4-Bit-Addierer verkettet werden. Ich habe die Tore in das Raster eingefügt, um zu zeigen, wie sie auf die Karte passen würden.


Das Schema eines 1-Bit-Addierers mit einem Übertrag.

Um mein Leben zu vereinfachen, habe ich beschlossen, endloses Geld einzuschalten und auf der im Karteneditor erstellten Karte zu spielen. Sie können PNG-Bilder in den Editor importieren, mit denen die Höhenkarte geladen wird. Ich habe eine Karte mit Erdblöcken erstellt, auf der Sie Logikelemente wie auf einer Leiterplatte platzieren können ! So sieht die Karte aus. Die Bilder zeigen vier 1-Bit-Addierer, die sich in einem 2x2-Raster wiederholen.



Im Bild sind unterbrochene Linien sichtbar, da das Spiel an scharfen Kanten nicht sehr gut funktioniert.

Der Bau einer Schaltung ist ein sehr eintöniger Prozess, und ich musste wegen meiner Fehlkalkulationen immer wieder neu anfangen. Eines der Probleme, auf die ich gestoßen bin, ist das Überschneiden von Drähten. Glücklicherweise können sich Stromleitungen mit einem signifikanten Höhenunterschied berührungslos kreuzen.


1-Bit-Addierer. Ich habe vier solcher Elemente miteinander verbunden.

Schließlich muss ich eine Stadt in der Nähe bauen und ein Volumen an Abflüssen schaffen, das ausreicht, um gleichzeitig bis zu acht Windmühlen zu überfluten (ja, unser Computer funktioniert wie ein Mist). Aber ich würde diese Entscheidung nicht als umweltfreundlich bezeichnen: Jedes Logikelement verwendet ein Flüssigbrennstoffkraftwerk, daher ist der Verschmutzungsgrad ziemlich hoch. Das Debuggen war schwierig: Manchmal stellte sich heraus, dass Donnerblitze zum Ausfall von Stromleitungen führten. Sie ist wie kosmische Strahlung, wirkt aber länger.


Ein Netz von Stromleitungen, die zu einem der 4-Bit-Eingänge führen.

Ich habe ein Video aufgenommen, um zu zeigen, dass das Hinzufügen wirklich funktioniert. Im ersten Schritt setze ich ein Signal am Eingang, indem ich es an ein Kraftwerk anschließe, das immer eingeschaltet ist (wie bei der Stromversorgung eines integrierten Schaltkreises). Links setze ich den Wert auf 1001 (= 9) in der Mitte von 1110 (= 14). Nachdem ich die Werte der Eingänge eingestellt hatte, beschleunigte ich das Spiel und der Ausgang auf den rechten fünf Drähten nahm einen Wert von einer Einheit an. Nach langer Zeit wurde der Endwert auf 10111 (= 23) eingestellt. Und es funktioniert wirklich!


Im zweiten Video habe ich mich auf einen der Addierer konzentriert. Sie können sehen, wie sich der Zustand der Komponenten im Laufe der Zeit ändert, bis der endgültige Ausgabewert festgelegt ist (0 - Summe, 1 - Übertragung).


Das Projekt hat einige Mängel. Es wird ein sehr langsamer Computer - eine 4-Bit-Addition dauert ungefähr 15 Monate im Spiel und ungefähr 20 Minuten in Echtzeit. Es gibt Probleme mit der Größe. Aufgrund der Art und Weise, wie die Leistung im Spiel implementiert wird, müssen die Komponenten des Logikelements weit genug voneinander entfernt sein. Andernfalls fließt Strom zwischen ihnen. Der 4-Bit-Addierer hat die meisten der 9 in einem regulären Spiel verfügbaren Kacheln belegt, aber ich habe es nicht sehr optimiert. Bis zu 25 Kacheln können mit Mods verwendet werden. Wenn Sie Ideen haben, wie Sie effizientere Berechnungen implementieren können, schreiben Sie darüber in den Kommentaren zum Originalartikel!

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


All Articles