Spielen Sie unterwegs endlose Versionen von KI-generiertem Pong

Es gibt derzeit eine Datei Großes Interesse an KI-Tools, die Programmierern beim Schreiben von Programmen helfen sollen. Copilot von GitHub und CodeWhisperer von Amazon wenden Deep-Learning-Techniken an, die ursprünglich zur Generierung von Text in natürlicher Sprache entwickelt wurden, indem sie zur Generierung von Quellcode angepasst werden. Die Idee ist, dass Programmierer diese Tools als eine Art Autovervollständigung auf Steroiden verwenden können, indem sie Eingabeaufforderungen verwenden, um Codestücke zu erstellen, die Entwickler in ihre Programme integrieren können.

Als ich mir diese Tools ansah, fragte ich mich: Können wir den nächsten Schritt machen und den menschlichen Programmierer aus der Schleife holen? Kann auf Knopfdruck ein Arbeitsprogramm geschrieben und on demand veröffentlicht werden?

In meinem Hauptberuf schreibe ich eingebettete Software für Mikrocontroller, also dachte ich sofort an ein Handheld-Gerät als Demo-Plattform. Der Bildschirm und einige Steuerelemente ermöglichen es dem Benutzer, einfache KI-generierte Programme zu bestellen und mit ihnen zu interagieren. So wurde die Idee der Unendlichkeit geboren
pong.

Ich entschied mich
pong Wegen vielen Gründen. Das Gameplay ist einfach und wurde im ursprünglichen Atari-Spiel von 1972 berühmt erklärt pong Arcade Locker im Triumph der Kürze: “Vermeiden Sie es, den Ball zu verlieren, um einen Highscore zu erzielen.” Alles, was Sie zum Spielen brauchen, ist eine Auf- und eine Ab-Taste. Wie bei vielen klassischen Atari-Spielen, die in den 70er und 80er Jahren erstellt wurden, pong Es kann in relativ wenigen Codezeilen geschrieben werden und wurde viele Male als Programmierübung durchgeführt. Das bedeutet, dass die Quellcode-Repositories, die als Trainingsdaten für KI-Tools aufgenommen werden, reich daran sind pong Beispiele, was die Wahrscheinlichkeit erhöht, anwendbare Ergebnisse zu erhalten.

Ich habe einen Raspberry Pi Pico W für 6 US-Dollar als Herzstück meines Mobilgeräts verwendet – seine integrierte drahtlose Konnektivität ermöglicht eine direkte Verbindung zu Cloud-basierten KI-Tools. Dafür habe ich ein $ 1,14 Pico LCD-Anzeigemodul installiert. 240 x 135 Farbpixel reichen dafür aus pongund das Gerät integriert zwei Tasten und einen zweiachsigen Präzisions-Joystick.

Meine Wahl der Programmiersprache für den Pico war MicroPython, weil es das ist, was ich normalerweise verwende, und weil es sich um interpretierten Sprachcode handelt, der ohne die Notwendigkeit eines computerbasierten Compilers ausgeführt werden kann. Das von mir verwendete KI-Codierungstool war OpenAI Codex. Auf OpenAI Codex kann über eine API zugegriffen werden, die auf Abfragen im HTTP-Webformat antwortet, das mithilfe der für MicroPython verfügbaren urequests- und ujson-Bibliotheken einfach zu erstellen und zu versenden ist. Die Nutzung der OpenAI Codex-API ist während der aktuellen Testphase kostenlos, aber eine Registrierung ist erforderlich, und Abfragen sind auf 20 pro Minute begrenzt – immer noch mehr als genug, um selbst die Fanatischsten unterzubringen pong Jockey.

LCD-Bildschirm mit Joystick auf der linken Seite und zwei Tasten auf der rechten Seite, Mikrocontroller, USB-Kabel.
Es werden nur 2 Hardwareeinheiten benötigt – Raspberry Pi Pico W [bottom left] Es bietet Rechenleistung und ein Steckbrett mit Display und einfacher Steuerung [top left]. Außer einem USB-Kabel zur Stromversorgung wird nichts weiter benötigt.James Provost

Der nächste Schritt bestand darin, ein Containerprogramm zu erstellen. Dieses Programm ist dafür verantwortlich, eine neue Version von zu erkennen pong Es wird per Knopfdruck bestellt und wenn es eine Eingabeaufforderung an OpenAI Codex sendet, erhält es die Ergebnisse und startet das Spiel. Die Container-Software richtet auch eine Hardware-Abstraktionsschicht ein, die die physische Kommunikation zwischen dem Pico und dem LCD-Controller/Controller übernimmt.

Die wichtigste Komponente des gesamten Projekts war die Erstellung einer Eingabeaufforderung, die jedes Mal an OpenAI Codex gesendet wird, wenn wir möchten, dass eine neue Version von ausgegeben wird
pong. Eine Eingabeaufforderung ist ein Stück Klartext mit der einfachsten Struktur des Quellcodes – ein paar Zeilen, die eine Struktur definieren, die vielen Videospielen gemeinsam ist, z. und einen Aufruf zum Aktualisieren des Status des Spiels basierend auf diesen Ereignissen und einen Aufruf zum Anzeigen des aktualisierten Status auf dem Bildschirm.

Der zurückgegebene Code erzeugt eine umsetzbare Datei pong Das Spiel ist ungefähr 80 Prozent der Zeit.

Wie diese Bibliotheken verwendet und Aufrufe ausgefüllt werden, liegt bei der KI. Der Schlüssel zur Umwandlung dieser allgemeinen Struktur in a
pong Die Kommentare sind im Spiel eingebaut – optional im Quellcode, der von Menschen geschrieben wurde, und wirklich nützlich für Eingabeaufforderungen. Kommentare beschreiben das Gameplay in einfachem Englisch – zum Beispiel: „Das Spiel hat die folgenden Klassen … Ball: Diese Klasse repräsentiert den Ball. Er hat Positions-, Geschwindigkeits- und Korrekturattribute.“ [sic]. Pong: Dieses Kapitel repräsentiert das Spiel selbst. Es hat zwei Schläger und einen Ball. Sie weiß, wie man überprüft, ob das Spiel vorbei ist.“ (Mein Container und Instant-Token sind auf Hackaday.io verfügbar) (Gehen Sie zu Hackaday.io, um unendlich viele zu spielen Bonng Spiele mit Raspberry Pi Pico W; Mein Container und Spotcode auf der Website.)

Was von der KI kommt, sind ungefähr 300 Zeilen Code. Bei meinen frühen Versuchen kann der Code das Spiel nicht rendern, weil die Version der MicroPython-Framebuffer-Bibliothek, die mit meinem Modul funktioniert, sich von den Framebuffer-Bibliotheken unterscheidet, auf denen OpenAI Codex trainiert ist. Die Lösung bestand darin, die Beschreibungen der Methoden, die meine Bibliothek verwendet, als schnelle Kommentare hinzuzufügen, z. B.: “def Rechteck (Selbst, x, y, w, h, c)”. Ein weiteres Problem war, dass viele der Trainingsbeispiele globale Variablen verwenden, während die von Ihnen bereitgestellten anfänglichen Variablen als Attribute definiert wurden, die so definiert wurden, dass sie in einzelnen Klassen leben, was im Allgemeinen eine bessere Vorgehensweise ist. Irgendwann musste ich aufgeben, mit dem Strom schwimmen und meine Variablen als global deklarieren.

Neun Beispielclips
Vom OpenAI-Codex generierte Pong-Variationen unterscheiden sich stark in Ball- und Schlägergröße, Farbe und Art und Weise, wie die Ergebnisse angezeigt werden. Manchmal führte der Code zu einem unspielbaren Spiel, z. B. in der unteren rechten Ecke, wo die Paddles des Spielers übereinander platziert wurden.James Provost

Der Code, der von meinen vorhandenen Routern stammt, erzeugt eine Arbeitsdatei
pong Das Spiel ist ungefähr 80 Prozent der Zeit. Manchmal funktioniert das Spiel überhaupt nicht, und manchmal produziert es etwas, das funktioniert, aber nicht ganz pong, etwa wenn er zulässt, dass die Paddel nach links und rechts sowie nach oben und unten bewegt werden. Manchmal gibt es zwei menschliche Spieler, manchmal spielt man gegen die Maschine. Da es in der Eingabeaufforderung nicht angegeben ist, nimmt Codex beide Optionen. Wenn Sie gegen die Maschine spielen, ist es immer interessant zu sehen, wie Codex diesen Teil der Codelogik implementiert hat.

Wer ist also der Autor dieses Codes? Sicherlich gibt es Rechtsstreitigkeiten, die beispielsweise darauf zurückzuführen sind, wie ein solcher Code lizenziert wird, da ein Großteil der Schulungssuite auf Open-Source-Software basiert, die dem Code, von dem sie abgeleitet ist, bestimmte Lizenzbedingungen auferlegt. Aber Lizenzen und Eigentum sind getrennt von der Urheberschaft, und was letztere betrifft, gehört sie meiner Meinung nach dem Programmierer, der das KI-Tool verwendet und die Ergebnisse überprüft, als ob Sie Kunstwerke mit der Zeichensoftware einer Firma erstellen und deren verwenden eigene Pinsel und Filter.

Für mein Projekt besteht der nächste Schritt darin, komplexere Spiele zu betrachten. Trefferpass 1986
Arkanoid Auf Anfrage jemand?

William

Leave a Reply

Your email address will not be published. Required fields are marked *