Wie war das nochmal? Die KI..

Vor fast einem Jahr stellte ich erstmals als damals neues mögliches Thema die Entwicklung einer KI für unser Spiel vor. Dabei ging es nicht um die KI auf dem Kampffeld (obwohl auch diese ein spannendes Thema ist), sondern vielmehr auf einer größeren Ebene um die Psychologie der vielen geplanten NSCe. Jeder NSC – ob feindlich oder freundlich – soll nicht nur existieren und Aktionen von einer Liste ausführen, soll nicht nur jeden Tag diesselben blöden Skripte ablaufen, nein, er soll Ziele haben, Bedürfnisse, die er oder sie zu erfüllen sucht, soll morgens einen Grund verspüren, aufzustehen und den Tag zu beginnen.

Ja, klingt kitschig, ließ sich aber in einem ersten gebauten Prototypen gut an – der NSC wurde zwar ein Langweiler, aber immerhin, er wurde :) Wie es geht? In einem mehrschichtigen, hierarchischen Modell, von dem zwei Schichten bereits umgesetzt wurden, die Motivations- und die Optionsebene. Die Motivationsebene ist die oberste Ebene der KI aufbauend auf der Bedürfnispyramide von Maslow. Je nach Entwicklungsstand des NSCs werden die Bedürfnisse der unterschiedlichen Bedürfnisklassen (physiologische Bedürfnisse, Sicherheitsbedürfnisse, soziale Bedürfnisse, Individualbedürfnisse und Selbstverwirklichung) gewichtet und daraus ein Vektor empfundener Bedürfnisse des NSCs ermittelt. Zu diesem Vektor an empfundenen Defiziten sucht der NSC in der Optionsebene dann eine Option, die er ausführen könnte, um seine Bedürfnisse möglichst gut zu befriedigen. Natürlich werden wir dem NSC nicht fest vorgeben, welche Bedürfnisse durch welche Option wie stark befriedigt werden – das soll er schön selbst rausfinden, schließlich soll er nachher auch alle durch den Spieler aufkommende Änderungen antizipieren können. Der Optionsebene unterliegt eine SOM, eine self-organizing map, manchmal auch Kohonenkarte genannt. Anhand dieser entscheidet der NSC sich für eine Option – die Option, dessen SOM Wert dem ermittelten Vektor empfundener Bedürfnisse am nächsten ist. Und anhand der danach eintreffenden Events ändert er den Eintrag der Option in der SOM – so bleibt er immer up to date :)

So, der erste Prototyp lief, und nun? Um Dezember dann wusste ich, was nun. Wir stellen euch die KI zur Verfügung, genauer gesagt schubsen wir die KI als erstes unserer Feature ins Freie und bauen um die KI eine Anwendung, mit der man die KI testen, nein, besser noch, mit der KI spielen kann. Man selbst spielt dabei das Umfeld und die Umwelt – man kann den NSC beklauen lassen, ihn beschenken, es regnen lassen oder die Taverne sperren.. Und sehen, wie der NSC sich anpasst an die Wohltaten oder die Schikanen von außen. Im ersten Schritt als freies Spiel, dann mit wählbaren Zielen im Blick. Das wird ependär *freu* Und bald, in wenigen Wochen ist es dann soweit – die Closed Beta für das KI Testspiel startet :) Ich freu mich drauf, ich freu mich auf euch, auf eurer Feedback, auf und über alles :)

Posted in News-O-Matic.

Zeit für Nägel mit Köpfen!

Wie das? Das erste Mal in der Geschichte der Science-O-Matics *zu einer ausladenen Rede anheb* Nicht? Ok, dann nicht.. Euch kommt es vielleicht nicht gar so episch vor, aber ich freue mich riesig – in Kürze, sprich im Mai (genaues Datum folgt) wird die KI als erste meiner Prototypen den Schritt ins freie, nein, soweit noch nicht, ins geschlossene wagen. Als eigenständiges Spiel aufgesetzt wird die KI mit schicker (mobile-fähiger) Weboberfläche in die Closed Beta gehen, um euch (hoffentlich) ein paar nette Stunden zu bescheren und sich (als klitzekleiner Hintergedanke meinerseits) sich von euch auf Herz und Nieren testen zu lassen :) In der nächsten Zeit wird es viele Updates dazu gehen und in ca. zwei Wochen wird dann die Anmeldung zur Closed Beta online geschaltet :) Ich freue mich auf viel Input eurerseits *klatsch*

Posted in News-O-Matic. Tagged with , .

Frohe Ostern!

Gleich geht’s für uns auf zum Osterbrunch, und natürlich bringe ich dorthin Backwerk mit. Und was würde sich als Mitbringsel zu Ostern zur einem Osterbrunch voller Nerds besser eignen als ein bekanntes Easter Egg? Das Setting ist Day Of The Tentacle, gut erkennbar representiert durch ein (ziemlich großes), knatschgrünes Osterei mit Saugnapfringen :)

Grün-Tentakel Osterei

Grün-Tentakel Osterei

Maniac Mansion Disketten

Maniac Mansion Disketten

Und welches Easter Egg ist wohl gemeint? Ach, der wahre erd ist mir hier wahrscheinlich schon einen Schritt voraus, aber ich sag’s euch trotzdem: Das Easter Egg ist die komplette Version des Day of the Tentacle Vorgängers Maniac Mansion. Dargestellt wird dieses Easter Egg durch die Füllung des Grün-Tentakel Ostereis: Die Hülle des Ostereis ist aus ca. 3-4cm dicken Schichten aus Marmorkuchen, Nusskuchen und Käsekuchen, im entstehenden Hohlraum sind diskettenförmige Kekse mit Maniac Mansion Labels. So, wir müssen nun los, ich bin gespannt wer’s erkennt ;)

Posted in Off-Topic-O-Matic. Tagged with , .

How-To: UI für Anfänger – jQuery Mobile (I)

Keep it simple.

mobile_website_vs_appMobile Webanwendungen oder -webseiten sind keine Apps, sondern Webseiten die für die mobile Betrachtung optimiert wurden. So gibt es kleine Skripte, welche die mobile Browser erkennen und einen direkt auf die mobil optimierte Webseite weiterleiten (siehe z.B. IKEA). Die mobilen Webseiten können natürlich auch auf dem heimischen Computer aufgerufen werden, aber der knapp dimensionierte Platz wird bei inzwischen standardmäßigen Auflösungen von 1920×1080 kaum genutzt. Inzwischen gibt es auch “Compiler” (Phonegap), welche die mobile Webseiten in eine native App umwandeln. Hierbei wird der Browser durch ein Framework simuliert und eine gesonderte API ermöglicht die Kommunikation mit der Kamera des Smartphones. Hier tut es uns aber einfach mal eine einfache mobile Webanwendung, denn wir wollen es einfach halten.

Continue reading

Posted in Code-O-Matic. Tagged with , , , .

Einführung in BPMN

So, nachdem ich nun schon einige Artikel mit Ablaufdiagrammen gepostet habe (so zum Beipiel zur Optionsauswahl, zum allgemeinen Ablauf der KI und zur Kaufentscheidung) wurde ich nun gefragt, wie man diese eigentlich liest. Kurz gestockt, hmm, stimmt, das gehört wohl nicht zum Standardausbildungskanon ^^ Also die genutzte Notation ist die BPMN, also die Business Process Modelling Notation.

In diesem Artikel möchte ich kurz auf diese eingehen und die zentralen (also die von mir genutzten) Symbole erläutern, nach dieser kurzen Einführung sollte das Lesen der von mir geposteten Ablaufdiagramme also kein Problem mehr sein :)

Continue reading

Posted in Theory-O-Matic. Tagged with , .

Programmablauf: Option auswählen

Nachdem ich letzte Woche den allgemeinen Ablauf der Optionsebene im Coding besprochen habe, wollte ich nun nacheinander die (interessanten) Teile im Ablauf man genauer besprechen. Und starten möchte ich dabei mit der Auswahl der Option, also dem Baustein decide on option.

Auswahl Option

Auswahl Option

Der Ablauf findet (fast) komplett innerhalb der entsprechenden Instanz  der Klasse NPC statt. Einzige Ausnahme ist der Teil “get list of options”, hier wird vom DBHandler eine Liste mit allen Optionen angefordert. Ansonsten sind die folgenden Teile wichtig:

    • compute weights – aus den Bedürfnissen jeweils multipliziert mit der Gewichtung der jeweiligen Motivationsklasse werden die empfundenen Bedürfnisse ermittelt. Nun haben wir also einen Vektor, der genau dem vom NSC erhofften Resultat entspricht. Wir suchen im folgenden also die Option, die der NSC nun ausführen kann und deren erwartetes Resultat dem gefundenen Vektor am besten entspricht.
    • get list of all options – vom DBHandler wird die (ungefilterte) Liste aller Optionen angefordert. Diese enthält (später) mindestens die Nulloption (warten), ist also nicht leer.
    • evaluate (first) option (in list) – Die jeweils oberste Option wird ausgewertet, dabei werden als erstes die Voraussetzungen für die Option geprüft. An jede Option können Bedingungen geknüpft werden, momentan sind mögliche Bedingungen benötigte Items oder ein bestimmter Aufenthaltsort, das lässt sich aber später noch erweitern. Im ersten Schritt der Evaluation wird also geprüft, ob alle benötigten Gegenstände in der benötigten Menge im Inventar sind und ob der NPC am richtigen Ort ist. Dann wird die Wertung der Option ermittelt, diese Wertung ist der Abstand zwischen dem SOM Vektor (der die erwartete Bedürfniserfüllung durch diese Option ausdrückt) und dem im ersten Schritt ermittelten Bedürfnisvektor des NSCs. Ist dieser Wert größer als der Wert der bisher besten gefundenen Option, ist dies Option die bisher beste gefundene Option und wird sich gemerkt. Ist der Wert echt kleiner, wird die Option verworfen. Bei Gleichheit (dies kommt vor Allem / eigentlich nur in der Initialisierungsphase vor), wird die Option mit einer gewissen Wahrscheinlichkeit verworfen, sonst übernommen.
Posted in Code-O-Matic. Tagged with , .

Schön gesagt.. (3)

“Eines Tages werden Maschinen vielleicht denken können, aber sie werden niemals Fantasie haben.” – Theodor Heuss

Ein weiteres schönes Zitat, hier passend zum aktuellen KI Thema :) Ob es wahr ist, schwer zu sagen, das wird die Zeit wohl zeigen. Ich muss sagen.. mir reicht es, wenn meine NSC sich ans “denken” ranrobben ;)

Posted in Off-Topic-O-Matic. Tagged with .

Programmablauf: Optionsebene

Dieses Wochenende war endlich mal wieder Zeit, um mal ein paar Stunden am Stück zu proggen :) Erstens hat das sehr viel Spaß gemacht und zweitens bin ich gut voran gekommen :) So grob funktioniert nun alles, aber viele, viele, viele (viele, viele, viele.. :P ) Kleinigkeiten fehlen noch. Folgend seht ihr ein Ablaufdiagramm, das den groben Ablauf der Optionsebene (in der jetzigen Umsetzung) beschreibt.

Ablauf Optionsebene

Ablauf Optionsebene

Drei zentrale Mitspieler sind hier Instanzen der Klassen DBHandler (Schnittstelle zur Datenbank und Puffer), NPC (selbsterklärend) und AISimulation (simuliert das Umfeld).

  • get data: Aus dem Puffer (bzw. ultimativ aus der Datenbank) werden alle KI / NSC-relevanten Daten (Bedürfnisse, Gewichte der Motivationsklassen, Optionen, SOM, Inventar und Aufenthaltsort des NSCs). Aus diesen Daten wird dann eine Instanz der Klasse NPC erstellt. Dort wird dann erst die aktuelle Periode “durchlebt”, und dann die kommende Periode geplant.
  • decide on next option: Die Option, deren SOM-Werte den Bedürfnissen des NSCs am besten entspricht wird gewählt und eingeplant. Wenn wir uns in der live-Periode befinden, werden die dazu gehörenden Events aus dem Puffer geholt (get events) und in die Liste der kommenden Events einsortiert (sort events by date).
  • update time: Die Zeit wird upgedated auf den Zeitpunkt nach Ausführung der Option.
  • execute next event: Alle Events, deren Ausführungszeitpunkt vorm aktuellen Zeitpunkt liegt, werden nun ausgeführt. Die daraus resultierenden Änderungen in den Bedürfnissen, dem Inventar und dem Aufenthaltsort des NSCs (adjust inventory, location & needs) werden zusammen mit dem Event in den Puffer geschrieben.
  • In der Planungsperiode soll der NSC die nächste Periode nur planen, ohne zu wissen, welche Events wirklich eintreten werden. Dieser Vorgang findet also rein in der Instanz der Klasse NSC statt. Wieder wird die Option gewählt, deren SOM-Werte den Bedürfnissen des NSCs am besten entspricht. Sowohl die die Änderung in der Zeit als auch die Änderungen in den Bedürfnissen, dem Inventar und dem Aufenthaltsort des NSCs werden aus den Erwartungen des NSCs ermittelt und durchgeführt. Es werden dann Optionen ermittelt, bis die Planungsperiode komplett beplant ist. Die in der Planungsperiode getätigten Änderungen in den Bedürfnissen, dem Inventar und dem Aufenthaltsort des NSCs werden nicht in den Puffer übernommen, lediglich die Liste der Optionen landet ultimativ auf der Datenbank.
Posted in Code-O-Matic. Tagged with , .

Einfach mal kreativ schreiben…(1)

Das Spiel wird zwar in nächster Zeit noch nicht fertig gestellt sein, aber die Entwicklung einer Story ist ein langwieriger Prozess, der mehrere Schritte durchläuft. Bei meinem Hintergrund liegt es nahe, dieses Story-Schreiben als eine Art Literaturprojekt (wie es in NRW im Schulfach Literatur geplant und durchgeführt wird) zu sehen, das im Prinzip fünf verschiedene Phasen durchläuft: die Einstiegsphase, die Themenfindung, die Themenentwicklung, die Optimierung der Textproduktion und die Textrevision. In diesem Blogeintrag soll es nur um die erste Phase, die Einstiegsphase, gehen. (An der in Klammer stehenden Eins kann man erkennen, dass es wahrscheinlich mehrere Blogeinträge zu diesem Thema geben wird ;) )
Continue reading

Posted in Inspiration-O-Matic.

How-To: UI für Anfänger – Die Einleitung

Seitdem immer mehr Anwendungen in das Internet wandern und zudem das Internet immer mehr auf Smartphones genutzt wird, liegt es nah diesen Trend zu begleiten und eine UI-Unterstützung als Web-Anwendung für mobile Endgeräte zu erstellen. Gelegenheit dazu gibt es unter anderem, um die parallel laufende KI-Entwicklung von Cookie zu unterstützen. So ist es geplant, die KI bequem mehr mobilen Endgerät auf Herz und Nieren zu überprüfen. Eine Web-Anwendung ist im Prinzip nichts anderes als eine Homepage gestaltet als Anwendung im Web, welche damit logischerweise nur im Browser läuft und nicht installiert werden brauch. Passt man das Format auf mobile Endgeräte an, so laufen diese Homepages Smartphone-optimiert auf den jeweiligen Browsern.

Nun gibt es gerade im Umfeld des Internets einige Schlagwörter und Begriffe, welche nicht allen zugänglich sein dürfte. Zudem stehen einem zumeist eine große Bandbreite an (Open-Source) Programme, Frameworks und Standards zur Verfügung. Um vorab alles zu klären und zu erklären werde ich Schritt für Schritt auf die einzelnen Elemente eingehen und beginne in diesem ersten Blogeintrag der Serie erst einmal mit den Dingen, die ich gerne verwenden würde. Natürlich können diese sich noch im Laufe der Zeit ändern, da diese Blogserie laufend zur Entwicklung entsteht.

Continue reading

Posted in Code-O-Matic. Tagged with , , , , , , , .

Schön gesagt.. (2)

“Für das Können gibt es nur einen Beweis, das Tun.” – Marie von Ebner-Eschenbach

So.. gerade meinen ersten Halbmarathon absolviert :D Hat Spaß gemacht und damit ist auch gleich ein mir selbst gestecktes Ziel für dieses Jahr geschafft :) Ich dachte mir, dass ich das kann, aber nun habe ich es (mir) auch bewiesen :)

Posted in Off-Topic-O-Matic. Tagged with .

How-To: Python Scripting in Blender: (10) Objekte gruppieren

Outliner Objektgruppe

Outliner Objektgruppe

In diesem Tutorial wollen wir Objekte zu Objektgruppen zusammen fassen. Wie das How-To zum Collada Export wird dieses Tutorial so kurz, dass es eigentlich keinen “weiterlesen” Button braucht. Aber das Gruppieren von Objekten in Blender könnte noch einmal wichtig werden, also behandeln wir es eben :) Am Ende dieses Tutorials könnt ihr

  • Objekte gruppieren und
  • Objektgruppen auflösen.

Continue reading

Posted in Code-O-Matic, Graphic-O-Matic. Tagged with , , .

Schön gesagt.. (1)

“Der Einfall ist ein Schritt mit dem Siebenmeilenstiefel, die Ausführung der Weg zurück zu Fuß.” – Peter Tille

Zeit für eine neue Artikelreihe :) Ich weiß nicht, wie stark das schon durchgeschimmert hat in meinen bisherigen Artikeln, aber.. ich bin ein Riesenfan von Zitaten. Lebensweisheiten, interessante Erkenntnisse, Lebensarten, kleine Schmankerl, so gewandt, schön und treffend ausgedrückt, wie ich selber es niemals könnte. Und beginnen will ich damit mit dem obigen Zitat von Peter Tille, einem deutschen Schriftsteller. Dieses Zitat drückt sooo gut aus, wie man sich doch in Forschung und Entwicklung gar zu oft fühlt :) Der Einfall, die Erkenntnis ist schnell gehabt, die Umsetzung, der Beweis zieht sich dann..

Posted in Off-Topic-O-Matic. Tagged with .

Ablauf Kaufangebot

Nachdem ich in den letzten Artikeln einige Tools / Änderungen (Zeitreihenanalyse, Nutzen von Gegenständen, Geld.., Sekretärinnenproblem mit Lösungsansätzen) zur Evaluation von Kaufangeboten zusammen getragen habe, ist es wohl mal an der Zeit, die Ergebnisse des Brainstormings zu ordnen. Unten seht ihr ein Ablaufdiagramm, wie ich mir momentan die Kaufentscheidung vorstelle.

Der Plan ist also folgender: Der NSC erhält ein Kaufangebot, hierdurch wird der ganze Prozess getriggert. Der Erhalt des Kaufangebots kann natürlich einmal wirklich ein “spontan” erhaltenes Angebot sein, aber auch ein eingeholtes Kaufangebot, weil sich für die Option “Item xy kaufen” entschieden wurde. Der NSC ermittelt dann (aus der SOM) einerseits den Nutzen des Gutes bzw. der Güter und andererseits den Nutzen des zu zahlenden Geldes. Wenn der Nutzen des Geldes überwiegt, brauchen keine weiteren Überlegungen angestellt werden -> das Angebot ist für den NSC unattraktiv und kann abgelehnt werden. Überwiegt der Nutzen des Gutes / der Güter den Nutzen des Geldes, dann ist das Angebot generell attraktiv für den NSC. Statt das Gut aber sofort zu kaufen, muss der NSC nun entscheiden, ob er das Angebot annimmt, oder (woanders) ein anderes Angebot einholt. Entsprechend wird das vorliegende Angebot dann angenommen oder abgelehnt.

Dieser Ablauf lässt sich natürlich noch verfeinern, für die Zukunft schwebt mir als erste kleine Erweiterung vor, dass der NSC handelt. Sowohl im Falle der Ablehnung eines unattraktiven Angebots, als auch im Falle eines attraktiven Angebots kann der NSC die vorhandenen Info als sehr gute Verhandlungsgrundlage nutzen. Aber das ist mal wieder Zukunftsmusik.. Aber Musik ist schließlich was Feines..

Ablauf Kaufangebot

Ablauf Kaufangebot

 

Posted in Code-O-Matic. Tagged with , , .

How-To: Python Scripting in Blender: (9) Rotation mit Eulerkoordinaten

In diesem dritten und letzten Tutorial zur Rotation im dreidimensionalen Raum wollen wir uns die Drehung mittel Eulerkoordinaten ansehen. Am Ende dieses Tutorials könnt ihr

  • Eulersche Winkel berechnen und
  • mit Eulerschen Winkeln Objekte in Blender rotieren.

Continue reading

Posted in Code-O-Matic, Graphic-O-Matic. Tagged with , , .