Jump to content
Unity Insider Forum

MarcoMeter

Members
  • Posts

    540
  • Joined

  • Last visited

  • Days Won

    12

MarcoMeter last won the day on March 8 2017

MarcoMeter had the most liked content!

About MarcoMeter

  • Birthday 03/16/1991

Contact Methods

  • Website URL
    http://www.devbeyond.de

Profile Information

  • Gender
    Male
  • Location
    Niederrhein
  • Interests
    Game Design und vor allem der technisch wie auch logische Bereich

Recent Profile Visitors

6,611 profile views

MarcoMeter's Achievements

Advanced Member

Advanced Member (3/3)

122

Reputation

  1. Die Balanace muss jeder für sich selber entscheiden. Beispielsweise könnte man so weit gehen und sagen, dass man auf eine fertige Game Engine verzichtet. Ich bin froh, dass es so gut optimierte Libraries/APIs wie beispielsweise TensorFlow und numpy gibt. Von solchen Implementierungen kann man auch viel lernen und für die eigenen Problemlösungen verwerten. Eine gewisse Grundlage (oder auch Abhängigkeiten) sind nicht verkehrt um produktiver zu sein. So kann ich zum einen schnell Umwelten (Prototypen) bauen und zum anderen kann ich mich auf die Algorithmen konzentrieren. Ein hochwertiges Python Interface oder eine umfangreiche neuronale Netz Library zu implementieren würde mich zeitlich weit zurückwerfen. Dann sind schon die neuesten Trends und Entdeckungen in anderen etablierten Angeboten bereits vorhanden. Das Ballabyrinth hat schon zu weiteren Erkenntnissen geführt. Das ursprünglich vorgesehene Curriculum Learning geht so nicht auf. Der Agent schafft es zwar so bis zur 6. Lektion zu kommen, aber "vergisst" dann seine früheren positiven Erfahrungen. Das liegt daran, dass entsprechende Erfahrungen aus dem Buffer, der zum Training genutzt wird, ersetzt werden. Da das neuronale Netz stetisch von neuen Daten lernt wird entsprechend das Modell überschrieben. Ansätze zum Lösen des Problems habe ich schon. Derzeit lasse ich 12 Agenten gleichzeitig trainieren. Dabei belegt je ein Agent eine Position. Dies könnte man noch optimieren, in dem alle 12 Agenten das Curriculum wie vorgesehen durchlaufen, aber min. ein Agent muss auf der durchlaufenen Lektion verbleiben, so das am Ende alle 12 Positionen besetzt sind. Das könnte den zeitlichen Aufwand reduzieren. Eine weitere interessante Lösung wäre für jede Lektion einen Buffer mit Trainingsdaten anzulegen, so kann das neuronale Netz auf das Vergangene weiterhin zugreifen und überschreibt das nicht. In Kürze werde ich noch Frame Stacking an dem Beispiel ausprobieren, damit ich auf numerische Inputs komplett verzichten kann.
  2. Hallo zusammen, seit knapp einem halben Jahr führt Unity einen AI Blog. In diesem Rahmen wurde die Unity ML Agents API veröffentlicht. Diese enthält unter anderem ein Interface zu Python um etablierte Deep Reinforcement Learning Algorithmen anzuwenden. Ich arbeite derzeit an einer Vielzahl von Beispielen für diese API, welche sich auf Github (Unity ML Environments) finden lässt. Deep Reinforcement Learning ist schon länger Thema bei mir wie z.B. bei meinem Projekt BRO. Reinforcement Learning werde ich noch über meinen Master hinaus bis zum Doktor intensiv verfolgen. Eine lernende KI für BRO scheiterte erstmal daran, dass es keine geeignete Library für Neuronale Netze gab. Mit den Unity ML Agents ist das nun möglich und steht auch künftig auf meiner Agenda, um das entsprechend zu lösen. In Deep Reinforcement Learning gibt es einige Herausforderungen, welche ich durch geeignete Beispiele als Anschauungsmaterial veröffentlichen möchte. Zu den Herausforderungen zählen: Kontinuierliche und diskrete Aktionsmöglichkeiten eines Agents Pixelinput (z.B. durch Kamera) Curriculum Learning Imitation Learning Multiple kompetitive Agenten (z.B. Use-Case BRO) Multiple kooperative Agenten Pixelinput durch mehrere Beobachtungen Darüber hinaus gibt es folgende Probleme zu bewältigen: Trainingsdauer und Skalierbarkeit Blackbox Verhalten und Debugging Exploration-Exploitation Dilemma Die ganze Thematik ist Inhalt meiner Forschungsaktivitäten. Aktuell arbeite ich an einer Environment, welche dem BRIO Labyrinth nach empfunden ist. Ziel ist es, dass der orangene Ball in das rote Zielloch kullert ohne vom Spielbrett zu fallen oder durch das falsche Loch zu schlüfen. Der Agent ist in diesem Fall das Spielbrett, welches in zwei Dimensionen bis zu einem bestimmten Grad rotiert werden kann. Als Input erhält der Agent eine senkrechte Beobachtung auf das Spielbrett. Zusätzlich kennt der Agent die Geschwindikeit des Balls. In dieser Umwelt findet auch noch Curriculum Learning statt. Das heißt, dass der Agent immer schwerer werdende Probleme löst. In diesem Fall fängt die erste Lernstunde mit einer sehr einfachen Position des Balles an. Je besser der Agent wird, desto weiter wird die Kugel vom Ziel weg verschoben. Die einzelnen Lektionen lassne sich wie folgt illustrieren: Noch arbeite ich an einer erfolgreichen Umsetzung, um den Agent durch die Beobachtung lernen zu lassen. Parallel versuche ich diese Umwelt mittels numerischen Input zu lösen. Beispielsweise gehen vom Ball Raycasts aus, um die Distanz zu Wänden zu bestimmen. Sobald ich ansprechende Resultate habe werde ich auch mal das Spielbrett ausgestalten, damit ich als Programmierer auch mal etwas ästhetisches aufzeigen kann. Wäre super mal zu erfahren wer sich hier für Machine Learning in Unity interessiert. Vielleicht hat ja auch jemand noch ein paar interessante Use-Cases zum Ausprobieren.
  3. Hier mal ein Update: Über das vergangene Sommersemester wurden keine erfolgreichen Resultate bzgl. einer autonom lernenden KI erzielt. Hauptsächlich auf Grund von Performanceproblemen war der umgesetzte DQN Algorithmus innerhlab der ConvNetSharp Library nicht umsetzbar. Jetzt wo die ML Agents von Unity veröffentlicht wurden, was im grunde eine Pythonschnittstelle ist, liegen ganz andere Möglichkeiten offen, welche den gewünschten Erfolg erzielen sollen. Noch habe ich die Arbeit bzgl. einer KI für BRO nicht wieder aufgenommen, aber ich arbeite schon mit den ML Agents und erstelle einige beispielhafte Use Cases. Mehr dazu hier. edit: Ich habe vergessen zu erwähnen, dass ich BRO auf GitHub veröffentlicht habe. Leider hat es Exit Games noch immer nocht geschafft die kostenfreie Version von Photon Bolt zu veröffentlichen. Denn Bolt wird zur Lauffähigkeit benötigt.
  4. Gibt es nicht vielleicht ein Tutorial welches pfiffige Tipps auf Lager hat um ziemlich flott Game Assets zu erstellen? Immer wenn ich anfange irgendwas vermeintlich einfaches zu machen, dann endet das in 4h Aufwand ohne Resultat. Beispiel: Partikelsystem für Blutspritzer

    1. Show previous comments  2 more
    2. Thariel

      Thariel

      Das ist leider so. Wenn man etwas "entwickeln" will, dann ist das ganze meistens ein "Problemlösungsprozess". Es gibt sicher viele Leute, die mögen das nicht, Steine aus dem Weg zu räumen. Aber mit der Zeit kommt man immer öfters ins Flow und die Steine werde immer kleiner.

    3. MarcoMeter

      MarcoMeter

      Ich denke, dass man das so nicht verallgemeinern kann. Meine Expertise liegt komplett auf dem Logischen. Alle Probleme/Herausforderungen die sich da auf tun sind mir wunederbar willkommen. Da will ich auch bleiben.

       

      Nur blöd, dass ein Spiel mehr als nur Logik ist. Und nur mit Platzhaltern zu arbeiten macht weniger Spaß.

    4. Sascha

      Sascha

      ...Ãœbung. Jahrelange Ãœbung.

  5. Hier ist mal ein frisches Gameplay Video (Work In Progress) Seit dem letzten Video ist das Kamehameha implementiert. Der Boden hat eine Normalmap erhalten. Es gibt nun einen Loading Screen mit Tipps. Achja, ein paar inoffizielle Sounds sind auch drin.
  6. Endlich Ich hab 15min die Kugel sausen lassen. Es macht einen sehr sehr runden Eindruck. Für mich kommt so ein Flippergefühl rüber wie das bei dem Teil zur Zeit von Win98. So richtig blicke ich noch nicht durch bei den Missionen, sieht aber alles authentisch aus. Mir fehlt nur noch etwas Menü (Spiel neustarten, beenden...) und ich frage mich, wie ich mit einem Gamepad meinen Namen zum Score eintragen kann. Mit meinem 3770k und meiner GTX 980 gab's nie einen Framedrop. Alles konstant im Vsync bei 60fps.
  7. Hallo zusammen, hier mal ein Update. Die Entwicklung und Dokumentation des AI Frameworks ist abgeschlossen. Was das Framework bietet habe ich in diesem Video festgehalten. Ganz einfach gesagt braucht man erst eine Klasse die von AIBase erbt. Diese trägt Sorge dafür, dass Metadaten über die KI angelegt werden und dass die Komponenten mit der KI Logik an das GameObject des Spielers angehangen werden. Der GameState wird über ein Singleton verfügbar gemacht. Die Informationen über den kontrollierten Spieler und dessen Aktionen wird in der Klasse AIBehaviour verfügbar gemacht. AIBehaviour erbt von Monobehaviour. Auf dem Ganzen ist dann noch ein AIEventListener gesattelt, der Methoden zum Überschreiben anbietet, die durch Events aufgeurfen werden. Die KI Logik wird dann in min. einer Klasse geschrieben die entweder von Monobehaviour, AIBehaviour oder von AIEventListener erbt. Es sind jetzt nur noch Lizenzhürden (u.a. eigene Modelle für Spieler und Biest organisieren) zu nehmen, bis das Projekt quelloffen publiziert werden kann. Die Entwicklung geht noch weiter. Einerseits geht es noch um das Gameplay und andererseits um Features für das Implementieren von lernender KI. Dazu zähl vor allem das Automatisieren von einzelnen Matches.
  8. Dazu hatte ich auch schon Gedanken. Derzeit hat der KI-Entwickler quasi Macht über alles, schließlich führt der Host/Server den KI-Code aus. Es ist alles Open Source (noch kann ich das Projekt nicht publizieren) und es ist alles im selben Scope. Ich arbeite nun an gesonderten Klassen, um den GameState, die Aktionen und Events geeignet verfügbar zu machen. Um vor "Mogeln" geschützt zu werden, müsste man das Spiel und die KI-Entwicklung von einander strickt trennen. Das wäre für einen KI Wettbewerb von Vorteil, aber das hat dann auch Nachteile für die Entwicklung von Learning AI. Gerade für Learning AI möchte ich alle Türen offen halten. Das betrifft die Intention des Forschens oder des Lernens. Als ich mit der Brood War API gearbeitet habe, habe ich mir gewünscht auch Kontrolle über den Source Code des Spiels zu haben um an mehr Informationen zu kommen. Wenn ich beabsichtigen würde, dass man das Spiel so "modden" soll, dann wäre das sicherlich zu viel Macht, die vermutlich ausgenutzt wird und dann den Spielspaß unter Umständen verdirbt. Dafür sind dann einzelne Matches zu kurz und man muss auch nicht die KI wieder einsetzen. Mal abwarten ob ich in Zukunft an einer Lösung arbeiten werde. Im Moment liegen die Prioritäten wo anders. Beispielsweise würde ich nun auch gerne, wie für StarCraft 2, visuelle Abstraktionsebenen erstellen für Convolutional Neural Networks. edit: Eine Idee hätte ich da noch. Der Compiler für die Assembly der KI könnte ich die enthaltenen Klassen auf bestimmte Inhalte prüfen. Wenn die Prüfung ohne Beanstandungen durchlaufen wurde, dann ist die KI zulässig für den Wettbewerb. Beispielsweise würde ich dann nach solchen Aufrufen suchen lassen: "gameState.players.lifes =".
  9. N'Abend, ich habe einen Fortschritt zu vermelden. Der Prozess um KI zur Laufzeit zu injizieren ist abgeschlossen. Um KI zu entwickeln beginnt der Nutzer folgende Klasse zu erstellen: using BRO.AI; using UnityEngine; namespace ExampleAI.Test { public class ExmapleAI : AIBase { #region Instructions!!! // Instructions for developing a new AI: // // First of all you have to create a class which derives from AIBaseClass. // This abstract class makes sure that on run-time your AI can be found with its distinct information and logic. // These information describe your AI. This information has to be supplied using GetAIInformation(). // The logic for your AI has to be referenced in AddAIComponent(GameObject). // This functions is in charge of adding the AI logic to the player's GameObject. // For the sake of ease, you can add these information as member variables like below. // You may use this example as a blueprint. #endregion #region Member Fields private const string m_name = "Example AI"; private const string m_author = "Marco Pleines"; private const string m_affinity = "Hochschule Rhein-Waal"; private const string m_description = "This example AI portrays the procedure of implementing AI for BRO. "; private const AITag m_tag = AITag.Teaching; private const string m_version = "1.0"; private const string m_date = "November 2016"; private const string m_pictureFileName = "noImage.jpg"; #endregion #region Abstract Functions /// <summary> /// Makes an instance of the stored AI information. /// </summary> /// <returns>Returns the information of this particular AI instance.</returns> public override AIInformation GetAIInformation() { return new AIInformation(m_name, m_author, m_affinity, m_description, m_tag, m_version, m_date, m_pictureFileName); } /// <summary> /// Adds the Monobehaviors containing the AI logic to the player's GameObject. /// </summary> /// <param name="go">GameObject of the Player.</param> public override void AddAIComponents(GameObject go) { go.AddComponent<AiEngine>(); } #endregion } } Nachdem die Klasse, die von AIBase erbt, erstellt wurde, kann der Entwickler beginnen MonoBehavior Klassen zu schreiben, welche über die KI Logik verfügen. Diese Klassen werden dann via AddComponent<T> innerhalb der AddAIComponents(GameObject go) hinzugefügt. Sobald es dann in den PlayMode geht, kann der Nutzer schon die KI im Menü auswählen und hinzufügen. Die referenzierten MonoBehaviors werden im Spiel dann dem GameObject des jeweiligen Spielers hinzugefügt. Sobald die Entwicklungsarbeit abgeschlossen wurde, kann der Entwickler den Ordner mit seiner AiBase und den anderen MonoBehaviors zu einer Assembly kompilieren und anderen Leuten, welche vielleicht nur den Build haben, schicken. Die nutzbaren KIs werden in einem speziellen Ordner hinterlegt und werden zur Laufzeit des Spiels geladen (egal ob Build oder Editor). Nun gilt es in intuitiver und komfortabler Weise die möglichen Aktionen und den GameState in einem Framework zu verpacken, damit dies vom Nutzer einfach genutzt werden kann.
  10. Hier ein paar Neuigkeiten zum weiteren Vorgehen: Aktuell ersetze ich manch ein Asset, damit das Projekt nacher quelloffen sein kann. Die Modelle für die Spieler und das Biest werden derzeit als Themen für Bachelorarbeiten angeboten. Nach dem neuen Mesh für das Kampffeld (siehe Screenshot) muss ich jetzt noch Alternativen für 3 Partikeleffekte basteln, da ich für diese bisher Particle Playground und ein Preset aus dem Asset Store verwendet habe. Für dieses Semester ist es geplant, dass Code für KI-Spieler zur Laufzeit injiziert und und ausgeführt wird. Dabei entsteht ein Prozess zum Entwickeln von KI für dieses Spielprojekt. Das wird ungefähr so aussehen, dass der Entwickler eine Klasse, welche von AiBase erbt, erstellen muss mit nötigen Daten über den KI-Spieler und Referenzen zu dessen Logik, welche sich in beliebig vielen Monobehavior Scripts tummelt. In einem seperaten Ordner sollen alle Klassen für die KI gesammelt werden. Mittels eines kleinen Compilers kann man innerhalb des Editors den Inhalt dieses Ordners kompilieren lassen. Die fertige Assembly soll dann in einen spezifischen Ordner des Builds eingefügt werden, um diese dann zur Laufzeit verfügbar zu machen. Zur Laufzeit des Spiels werden alle AiBase Objekte instanziiert und verfügbar gemacht. Zum Start des eigentlichen Matches erhalten dann die gespawnten KI-Spieler, die in AiBase referenzierten, Monobehaviors. Zur Vereinfachung der Implementation von KI wird noch für das Spiel ein spezifisches Framework angelegt um Informationen, Events und Aktionen in gescheiter Form verfügbar zu machen. Neben diesem Prozess wird noch ein funktioneller Prototyp gebaut um eine Sequenz zum Automatisieren von unterschiedlichen Matches zu erstellen. Je nachdem wie diese beiden Dinge voran kommen, arbeite ich noch an Gameplay Features. An für sich soll es im nächsten Semester schon möglich sein an konkreten Fragestellungen bzgl. Learning Ai zu arbeiten.
  11. Hey Skee, soweit ich weiß wird Monte Carlo Tree Search bei Kartenspielen o. Ä. eingesetzt. Vielleicht hilft dir das weiter.
  12. Hallo zusammen, für mein KI-Forschungsprojekt sollen Leute auch KI entwickeln und exportieren können und da ist es eine Anforderung, dass man diese individuellen Werke einfach zum Build des Spiels hinzufügen kann. Aus dieser Intention heraus habe ich ein MenuItem gebastelt, welches die CSharp Quelldateien innerhalb eines Ordners (und dessen Unterordner) zu einer Assembly kompiliert. Diese Assembly kann dann einfach im Editor zum Projekt hinzugefügt oder zur Lauftzeit geladen und ausgeführt werden. Die Quelldateien stelle ich in diesem Gist auf Github zur Verfügung. Anzumerken ist, dass in den PlayerSettings die .net Version auf 2.0 gesetzt werden muss. Hier noch eine Referenz zu einem Blog, welcher das Vorgehen schildert, wenn man innerhalb eines Builds eine Assembly Kompilieren möchte: Arcturus Collective
  13. Im Discord-Chat hat Mark eine Referenz zu codingame.com fallen gelassen. Das geht in abstrakter Weise schon in die Richtung, die ich auch gehen wollen würde. Mein erster Eindruck ist, dass es dort eine webbasierte IDE eingesetzt wird. Da Frage ich mich, ob man da überhaupt Machine Learning betreiben kann, aus Gründen von Persitenz und Leistung.
×
×
  • Create New...