Archiv der Kategorie: Roboter

Breve – Simulation von dezentralen Systemen und künstlichem Leben

In einem früheren Artikel habe ich Robocode thematisiert. In einem spielerischen Umfeld wird hier von den Topshots eindrucksvoll gezeigt, zu welchen komplexen Funktionen autonome Agenten fähig sind.
Ein ernsthafteren Ansatz verfolgen Simulationsumgebungen für dezentrale Systeme. Eine davon ist breve. Breve ermöglicht die Simulation von Multi-Agenten Systemen über zelluläre Automaten bis hin zu künstlichem Leben. Dabei unterscheidet breve sich im Ansatz nicht groß von anderen Frameworks, wie z.B. Swarm.
Was breve hervorhebt und was ein Grund ist, warum ich breve hier trotz des Alters vorstellen möchte, ist der auf OpenGL basierende 3D Simulator, der die Agenten und die Umwelt visualisiert. Hinzu kommt eine experimentelle Physik – Engine, die Kollisionen und deren Auswirkungen simulieren kann. Damit ist breve auch zur Robotik – Simulation geeignet. Breve wurde von verschiedenen Universitäten und der US Airforce entwickelt, die letzte veröffentlichte Version datiert auf 2008 und ist für Windows, Linux und Mac Os X zum Download erhältlich. Continue reading “Breve – Simulation von dezentralen Systemen und künstlichem Leben” »

Robocode – Killing is My Business…

Build the Best – Destroy the Rest!

Ich war lange auf der Suche nach einer Alternative zu AntMe!, die nicht auf ein Microsoft Betriebssystem angewiesen ist (.NET Zwang…) und nach Möglichkeit nativ unter Mac Os X und/oder einem Linux Derivat läuft. Zusätzlich sollte es in einer Hochsprache zu programmieren sein, was leider Gottes das wirklich großartige DNAFight ausschließt.
Der Klassiker unter den Programmierspielen, Core War hat unbestritten seinen Charme, auch und gerade mit einem Tron – Remake in naher Zukunft, aber Assembler ist nicht so meins. Vielleicht werde ich Core War in Zukunft noch einmal eine Chance geben.
Für den Moment widme ich meine Aufmerksamkeit Robocode. Ziel von Robocode ist es, mit dem eigenen Roboter (kurz: „Bot“) einen oder mehrere gegnerische Roboter in einem vorher definierten Spielfeld auszuschalten. Im Gegensatz zu herkömmlichen Spielen wird der Roboter nicht direkt vom Spieler gesteuert. Vielmehr muss der Roboter im Vorfeld programmiert werden, um in allen möglichen Situationen reagieren zu können, ohne das der Spieler noch eingreifen kann.
Die Bots werden etatmäßig in Java programmiert, es gibt mittlerweile aber einige Implementierungen für verschiedene Sprachen, die in Java lauffähig sind. Robocode selber läuft auf jedem Betriebssystem, ein halbwegs aktuelles Java Runtime Environment vorausgesetzt.
Die Roboter selber werden in verschiedene Klassen eingeteilt, die sich nach der Größe der kompilierten Binärdateien richtet. Die einzelnen Klassen sind Nanobots (unter 250 Bytes), Microbots (unter 750 Bytes), Minibots (unter 1500 Bytes) und unbeschränkte Megabots.
Der Funktionsumfang der verschiedenen Bots rangiert dementsprechend von sehr dummen Bots, die nur einfache Bewegungen ausführen, bis hin zu Bots die komplette neuronale Netze enthalten und zu verschiedensten Taktiken und zu spontanen Aktionen und Strategiewechseln fähig sind.
Für die Erschaffung eines eigenen Bots bringt Robocode alles mit: Hunderte Bots als Vorlage, einen eigenen Editor und Compiler. Natürlich können die Bots auch in einer beliebigen IDE, z.B. Eclipse, erschaffen werden. Da Robocode ursprünglich von IBM entwickelt wurde, um den Einstieg in Java – Programmierung zu erleichtern, braucht man keine weitergehenden Programmierkenntnisse (auch wenn diese natürlich nicht schaden), um mit Robocode zu beginnen. Englischkenntnisse sind aber unerlässlich, liegt die sehr gut dokumentierte API nur in Englisch vor.
Abschließend noch mein erster Bot nach zwanzig Minuten rumexperimentieren mit dem Robocode Editor.
Der Bot ist recht simpel, er fährt hundert Einheiten geradeaus und biegt 90° nach rechts ab und scanned mit dem Radar in einem Winkel von 180°. Entdeckt er den Feind, schießt er eine Kugel der Stärke 3 ab und dreht sich um 90°. Wird der Bot selber getroffen dreht er sich um 180° nach links. Wird eine Begrenzungswand getroffen setzt der Bot 100 Einheiten zurück.

package pw;
import robocode.*;
//import java.awt.Color;

//PhilBot
public class PhilBot extends Robot
{
public void run() {
turnLeft (getHeading() );
while(true) {
ahead(100);
turnRight(90);
turnGunRight(180);
}
}
public void onScannedRobot(ScannedRobotEvent e) {
fire(3);
turnLeft(90);
}
public void onHitByBullet(HitByBulletEvent e) {
turnLeft(180);
}
public void onHitWall(HitWallEvent e) {
back(100);
}
}

Da die meisten freigegebenen Bots Vertreter der sehr elaborierten Gattung sind, dürfen mir Robocode – Einsteiger gerne ihre ersten Entwürfe zukommen lassen.