Mehr Glück als Verstand: Der Linux-Magazin Wettbewerb ist ausgefochten

Dieser Beitrag ist Teil 3 von 3 in der Serie Linux-Magazin Wettbewerb

    Viele haben nicht mehr daran geglaubt, aber der Wettbewerb des Linuxmagazins ist durchgeführt worden: Im neusten Heft (01/11) sind die Gewinner abgedruckt. Siehe da, ich habs als einziger PHP-Frickler in die Top-20 geschafft:

    Das gute an Programmierwettbewerben ist, dass man mit einer solchen Rangierung für die Zukunft ausgesorgt hat: Reichtum, Jugend, Schönheit, Wein, willige Weiber und einen offiziellen Schutz vor Alterskurzsichtigkeit sind das Minimum das es zu gewinnen gab. Ähhm, nein, sorry, ich hab da was verwechselt.

    Auf jeden Fall: Heeeeeeeeeeerzliche Gratulation den Gewinnern! Gut gemacht! Die Turnierergebnisse und Bots sollen laut Heft alsbald downgeloaded werden können. Ganz im Sinne der Durchführung ist aber bis Dato noch nichts sichtbar. Ich werde sicher analysieren, warum der Frigidor nicht weheheit vor mir liegt. Unter uns gesagt, ist er nämlich viel der bessere Programmierer (der liebe Gott hat mir dafür eine grosse Klappe geschenkt).

    Weiterlesen

    Programmierwettbewerbe: Zeit sollte man haben

    Dieser Beitrag ist Teil 2 von 3 in der Serie Linux-Magazin Wettbewerb

      thinkingLeider kann ich mangels Zeit beim Google AI-Contest nicht mitmachen :(. Und ich habe mich schon so gefreut. Naja, ich hoffe, es gibt einen Nächsten.

      Sehr interessant ist der Verlauf des Wettbewerbs des Linux-Magazins. Alles ging gut bis zum Abgabetermin am 12. September 2010. Ab dann war der Wurm drin: Die versprochenen Bestätigungsmails an die Teilnehmer sind nie eingetroffen und der Organisator ist „abgetaucht“. Die Wettbewerbsteilnehmer haben viel Geduld gezeigt, das Wiki regelmässig von Spam gereinigt und abgewartet.

      Nachdem die ersten unangenehmen Fragen aufgetaucht sind, hat sich die Organisation gemeldet und verkündet, dass ein Bericht in der Novemberausgabe des Magazins erscheinen wird. Das ist er dann auch, aber mehr ist bis jetzt nicht passiert. Der Unmut wird immer grösser, vor allem nachdem eine Teilnehmerliste veröffentlicht wurde, auf der einige Bots fehlen. Leider gibt es weiterhin nur spärlich Neuigkeiten. Eine Community ist ein Dialog: Wird er vom Organisator nicht geführt, führt ihn die Community alleine.

      Wir sind hier organisatorisch mit einem ähnlichen Problem konfrontiert: Programme in vielen Programmiersprachen werden abgegeben und müssen von uns bewertet werden. Auch ein kleiner Mehraufwand pro einzelner Lösung summiert sich schlussendlich zu sehr viel Zeit. Das Einzige, das hilft, ist Denken im Voraus. Klare Richtlinien und Regeln, sonst wird der Aufwand unüberschaubar riesig. Es gibt Beispiele von erfolgreich durchgeführten Wettbewerben: Avaloqix wurde life durchgeführt mit Anwesenden, der Google AI-Contest oder die alten Codezone (Microsoft) Wettbewerbe haben ebenfalls gezeigt, wie es gehen könnte. Ich möchte den Organisatoren vom Linux-Magazin nicht in die Suppe spucken, und wenn sie die Durchführung noch hinkriegen, haben sie meinen grössten Respekt und viel gearbeitet, aber irgendwie war es ein Schnellschuss.

      So ganz per Zufall habe ich noch eine nette Sache entdeckt: Das Freie Magazin führt ebenfalls einen sehr interessanten Wettbewerb durch. Tip: Das LIESMICH im Download lesen :)….

      Jetzt macht auch Google noch ein Programmierwettbewerb

      Ich habe mich schon gefreut: Der Würfler zum Linux-Magazin-Wettbewerb ist fertiggestellt und eigentlich bereit zum Einsenden. Etwas enttäuscht habe ich festgestellt, dass das Problem akademisch gelöst und der optimale Spieler bekannt ist. Nun, der Thrill der noch bleibt ist, dass bei nur 100 Spielen auf 50 Punkte der Zufall eine seeeehr grosse Rolle spielt.

      Doch zu früh gefreut, jetzt kommt das: Die Google AI-Challenge. Man kann nicht mal was gewinnen, aber das Spiel ist unglaublich genial: Es geht darum, Planeten zu erobern:

      Es gibt jetzt schon Starter-Packages für verschiedene Sprachen und das System ist ziemlich offen (für unsere Shell-Krieger 🙂 ). Ab dem 10.09.2010 kann man sich dann offiziell eintragen und losranken.

      Avaloq IT-Adventure Battle-Day

      Dieser Beitrag ist Teil 2 von 2 in der Serie Avaloqix Programmierwettbewerb

        battledaySo, nun ist er also durch, der Avaloq IT Adventure Battle Day. Etwa 40 Anmeldungen verzeichnete Avaloq für den Wettbewerb, die 10 besten Agenten sowie deren Coderz wurden zu diesem Event eingeladen. Das Resultat vorneweg: Mein Agent wurde nach Strich und Faden zerzaust :boxen: und landete auf Platz 8. Nicht den Hauch einer Chance. Ich war schon sehr stolz, in einer solch illusteren Runde überhaupt anwesend sein zu dürfen. Zum Einen war die Veranstaltung Bi-National mit Teams aus Bonn, Köln, Dresden und Berlin, und der Schweiz, zum Anderen bin ich mir schon wie Joe the Plumber vorgekommen :). Mathematikstudenten, Dozenten, passionierte Spieleprogrammierer, die schon während der Präsentation Fachdispute geführt haben :).

        Beim ersten Spieldurchgang haben sich die Programmierer der Agenten vorgestellt und die implementierten Strategien und Taktiken erläutert. Das war wirklich mehr als spannend und lehrreich. Grundsätzlich haben sich zwei Kategorien herausgebildet: Die Bewerter und die Durchspieler (fachlich korrekte Namen aus der Spieletheorie nach Wahl einsetzen).

        Die Bewerter haben verschiedene Faktoren gewichtet miteinander verrechnet: Änderung des Maxflows, Änderung des Current-Flows, eine Kantenwichtigkeit, Quellen- oder Senkenkanten, … Die zweite Gruppe von Agenten hat versucht, möglichst viele Spiele durchzurechnen und so die Züge, bzw. Kanten zu bewerten. Die Durchspieler haben obsiegt (mindestens Rang 1 und 2 gingen an Agenten dieser Kategorie).

        Informatikerkino

        Informatikerkino

        Der Gewinner hat mit einer Vorversion des Agenten schon letztes Jahr gewonnen (obwohl dieser angeblich einen Bug hatte und beim ersten Zug die am schlechtesten bewertete Kante ausgewählt hat 🙂 ). Er war auch der Einzige, der daran gedacht hat, dass die Turnier-Maschinen mehrere Cores haben könnten und diese auch aktiv ausgenutzt hat (an den eigenen Kopf hau! Oft und feste! :kopfklatsch: ). In seinem Handout hat er ein interessantes Paper zur Spieletheorie angegeben.

        Avaloqix hat eine neue Version des Spielfeldes mit erweiterten Debug-Ausgaben gezeigt. Auf einem der Laptops lief ein Matchmaker, der die Agenten automatisch aufeinander los liess; DAS wäre ein gutes Tool gewesen beim Entwickeln :). Sie denken leider eher nicht, dass sie den Wettbewerb noch ein drittes mal durchführen werden. Dafür sind Ideen im Raum, die Spieloberfläche zu opensourcen.

        Der Nachmittag war äusserst spannend und ich habe viel gelernt. Unter Anderem auch, wie hemdsärmelig mein Algorithmus in Tat und Wahrheit war. Etwas mehr Theorie und Optimierung hätten wahrlich nicht geschadet.

        Ich gratuliere allen Gewinnern und danke Avaloq und den Anderen.

        Die Photos sind auf Flickr verfügbar.

        Nachtrag: Juhuu, ich bin doch dabaei in Marrakesch! Das nennt man Lucky Looser :freu: !

        Lokale Turniere für CodeRuler

        coderulerCodeRuler ist ein geniales Programmierspiel von IBM. Es eignet sich sehr für eine spielerische Beschäftigung mit der Programmiersprache Java.

        Für Turniere hat das Spiel eine eingebaute Serverfunktion. Rulers werden ganz bequem von Eclipse aus eingereicht und stehen dann auf dem Server zur Verfügung. Wenn man allerdings eigene Rulers gegeneinander antreten lassen möchte, oder wenn das Netz securitymässig so abgeriegelt ist dass Peer to Peer Verbindungen nicht möglich sind, muss man etwas tricksen. Hier die einfachste Möglichkeit unter Linux (eventuell portierbar), die ich gefunden habe. Kompliziertere Möglichkeiten gibt es natürlich auch.

        1. Die MyRuler.java Dateien müssen irgendwie auf den Servercomputer kommen. Ev. mit E-Mail, USB-Stick oder Flaschenpost.
        2. Den Server in Eclipse starten mittels: Window → Preferences → Games → Start. Eventuell sollte vor dem Start der Port angepasst werden (9999 ist gut).
        3. Für jeden Ruler muss ein eigenes „Game“ Projekt in Eclipse erstellt werden. Die MyRuler.java dorthin kopieren.
        4. Für jeden Ruler Folgendes erledigen:
          1. Projekt öffnen und Games.xml anklicken.
          2. Mit dem Pfeil den Bereich Game Server erweitern und die korrekten Daten ausfüllen.
          3. Identification ausfüllen.
          4. Ruler submitten.
          5. Im Workspace Verzeichnis (Ersichtlich unter File → Switch Workspace) in .metadata/.plugins/com.ibm.games/players wechseln
          6. Das Verzeichnis localhost in irgendetwas Anderes umbenennen

        Turniere können nun an Zwei Orten durchgeführt werden:

        • Entweder Direkt von einem games.xml aus.
        • Im Turniermodus: Window → Preferences → Games → Tournaments.

        Der Turniermodus ist ein Sensibelschen. Turniere scheinen nur mit neu submitteten Rulern möglich zu sein. Ausserdem: Im Hintergrund wird sofort mit dem Turnier begonnen! Das GUI zeigt keine direkte Reaktion, nicht mal ein Eintrag des neuen Turniers ist ersichtlich, aber im Hintergrund kämpfen die armen Gesellen. Das Spiel kann dann mit dem Button Play angesehen werden. Hier hat erst ein Klick auf den schwarzen Bereich das Spielfeld zum Vorschein gebracht.

        Avaloqix: Unterhaltsamer Java-Programmierwettbewerb

        Flow im HirnIch liebe Wettbewerbe und ich liebe das Spielen. Meine inneres, urmännliches Ich springt voll auf das kompetitive Element solcher Veranstaltungen an. Zum Erlegen von Höhlenbären oder für Sportwettkämpfe eigne ich mich definitiv nicht, darum bin ich froh, wenn ab und zu ein Kräftemessen auf meinem – eher wetwarelastigen – Gebiet stattfindet.

        Leider hat es jetzt seit längerer Zeit kein Codeduel (ein spassiger, von Microsoft Schweiz gesponserter/organisierter Event in welchem SOAP-Services gegeneinander angetreten sind, für den es aber leider keine offizielle Website mehr gibt) mehr gegeben und für die kommerzielle Version solcher Wettbewerbe habe ich im Moment wirklich keine Zeit.

        Über die Seite des Schweizerischen Jahres der Informatik bin ich auf Avaloqix gestossen und war sofort begeistert. Am Tag der Informatik am 29. August 2008 in Zürich wird es ein Event speziell zu diesem Wettbewerb geben.

        Das Spiel

        Es geht darum, einen Spieler für eine abgewandelte Version des Shannon Switching Games zu programmieren. Kurz erklärt: Es gibt eine Quelle und ein Senke, die über ganz viele Röhren und Sammelpunkte miteinander verbunden sind. Im ersten Durchgang versucht der eine Spieler einen möglichst grossen Durchfluss zu erzielen indem er Röhren freischaltet, während der andere Spieler ebendies durch das Ausbauen von Röhren zu verhindern versucht. In einer zweiten Runde werden die Rollen der Spieler in demselben Röhrengeflecht getauscht. Gewonnen hat, wer als Durchflussmaximierer den grösseren Durchfluss erzielen konnte.
        Weiterlesen

        AntMe, Spass mit programmierbaren Ameisen

        AntMe!Nachdem ich die Ameisen in meiner Wohnung mit ganz perfidem tragts-es-zu-euch-nach-Hause-und-vergiftet-eure-Nachkommen-Gift losgeworden bin, habe ich sehr viel sympathischere Zeitgenossen dieser Spezies getroffen: AntMe ist ein Programmierspiel, dass aus Microsofts Coding4Fun Initiative (nicht zu verwechseln mit dem Galileo Coding for Fun Buch. Das ist auch spassig, behandelt auch AntMe, aber zusätzlich noch viele Andere Dinge) hervorgegangen ist. Es hat einen eigenen Wikipedia Artikel und vorallem eine geniale Homepage.

        Grundsätzlich geht es darum Ameisen zu implementieren die überleben, Äpfel und Zucker sammeln und unter Umständen auf Käfer und fremde Ameisen losgehen. Ein Markierungsmechanismus sorgt dafür, dass die Ameisen untereinander kommunizieren können. Fortgeschrittene Ameisenpapis und -mamis können spezialisierte Ameisen erstellen und RPG mässig Eigenschaften verbessern, wenn sie dafür andere verschlechtern.

        Die Ameisen in Aktion

        Die Ameisen können in C# oder in Visual Basic .net mit der notwendigen Intelligenz versehen werden. Bestimmte Methoden werden zu bestimmten Ereignissen aufgerufen; beispielsweise WirdMüde() (ja, mit „ü“ und deutsch) oder SiehtFeind(ByVal käfer As Käfer). Zur Steuerung steht fast der ganze .net Sprachumfang zur Verfügung, sowie Ameisenspezifische Hilfsmethoden wie etwa GeheZuBau() oder GreifeAn(käfer).

        Quickstart

        Auf der AntMe Homepage findet man verschiedene Versionen. Wir spielen hier mit der 1.5 Beta 2 (VB.net oder C#, je nach Gusto). Die Profiversion beinhaltet den gesamten Quellcode der Spielengine (!). Das ist so genial, dass es nochmals erwähnt werden darf: Die Profiversion beinhaltet den gesamten Quellcode der Spielengine. Will man sich nur mit den Ameisen beschäftigen, reicht die Einsteigerversion. Im Download enthalten ist ein gut dokumentiertes Ameisenskelett, bei dem sofort losgottgespielt werden kann.
        Eine gute Doku über die Klassen und deren Methoden sowie ein Tutorial wird mitgeliefert. Zum Teil beziehen sich die Unterlagen noch auf Version 1.1, aber der Transfer zu 1.5 ist eigentlich kein Problem. Für Leute, die lieber kuckn statt lesen, gibt es gut gemachte Screencasts, die ebenfalls in die Thematik einführen.

        Für eher haptisch veranlagte Menschen gibt es auch ein Buch: AntMe! – Programmieren und Spielen mit den Ameisen und Visual C#. Das kenne und besitze ich allerdings (noch) nicht.

        Verfügt man noch über keine Programmierumgebung, so könn bei Microsoft gratis die Express Versionen verschiedener Sprachen downgeloaded werden. Für die 3D Visualisierung braucht man
        noch DirectX. Mit der neusten Version (nicht mit der im Forum angegebenen) hat es wunderbar gefunzt.

        Turniere

        Ein Bisschen lebt das Ganze auch vom kompetitiven Element (um ehrlich zu sein, vielleicht ist ein Bisschen etwas untertrieben: ICH FRESS EUCH ALLE AUF!). In der Version 1.5 funktioniert das Importieren von anderen Ameisen leider nicht und es wird eine unbehandelte Ausnahme ausgespuckt:
        Der Typ für Member AntMe.SpielKonfiguration.AntMe.Simulation, Version=1.5.0.0, Culture=neutral, PublicKeyToken=37d8e32ef3294969 wurde nicht aufgelöst.

        Workaround für die VB-Version (C# ungetestet):
        Weiterlesen