Tagebuch: GalaxyCommand

Der Sinn war natürlich dass das eben nicht passiert. Zumindest könnte ich dann bei Änderungen die Kartendaten einfach in einen neuen Spielstand übertragen und mein Raumschiff für Testzwecke behalten.
Aber dein Vorschlag ist eigentlich gar nicht so schlecht, vielleicht ist das auch erst mal zu viel tote Arbeitszeit, stattdessen konzentriere ich mich erst mal auf die rudimentäre Umsetzung der Spielelemente.

Im Vordergrund steht immer noch die Weiterentwicklung der einzelnen Techniken. Dann kommt als nächstes die Anschaffung einer Kreditkarte :smiley: Bin kein Freund von Krediten, aber anders kommt man nicht an einen Entwickleraccount bei Google, damit es hier auch mal was zum sandboxen gibt :smiley:

Ja aber ich glaub das funktioniert nur wenn das Spiel schon Recht weit ist. Und selbst dann nicht immer. So war es zumindest bei Feature Runner.

Ja mach das Mal ;). Wäre durchaus interessant :slight_smile:

So, jetzt hat das Raumschiff auch ein Schadenssystem. Wände, Böden und Bordsysteme (Antriebe, Waffen, Kühltürme, Teleporter) können jetzt also auch visuell kaputt gehen. Die Wegfindung und das Raycasting ignorieren zudem zerstörte Elemente.

Die größte Kopfnuss war aber das überarbeiten des Rotierens von Boardsystemen. Trigonometrie :sweat_smile: Besonders auch noch invers.
Das Array des Boardsystems wird nicht mehr selbst rotiert, sondern die theoretische Position auf dem rotierten Array wird invers zurück transformiert.
Ja und da war es dann auch schon halb 6 Uhr morgens :sweat_smile:

Java Programmierer hypen immer so ihre “Tests” (bin ich nicht immer so überzeugt von für jedes Hello World mindestens 3 Stück zu haben), aber das war mal so einer dieser Momente wo sich in meinen Augen der Test wirklich gelohnt hat. Insbesondere weil Android Studio die Tests auch auf dem lokalen Gerät ausführen lassen kann - war extremst hilfreich.

Oha. Ich hab ne Regel für mich: nach 22:00 mach ich nix mehr. Da ist mir die Gefahr zu groß, dass ich am nächsten Tag dann einiges fixen darf ^^.

Nun ja - es kommt halt immer drauf an, wie exzessiv man Tests schreibt. Klar, man kann versuchen jeden Edge-Case ab zu decken. Aber ich bin ein Freund von “Happy Path first”. Das reduziert die tests schon mal und man hat eine abgesicherte Basis.

Als nächstes steht an, ein automatisches Optimierungssystem einzubauen, um die Auslastung auf die einzelnen Kerne zu verwalten/zu verteilen/zu optimieren.

Dafür habe ich mich die letzten Tage mit dem (erweiterten) Kalman Filter auseinander gesetzt um die Messungen der Prozessor-Auslastung zu glätten. Ansonsten könnten kurze starke Messauschläge dafür sorgen, dass das geplante Optimierungssystem instabil wird.

Und nachdem ich jetzt das Problem der Nicht-Linearen Systemdynamik angegangen bin folgt direkt die nächste auch nicht kleine Herausforderung: Das Partitionsproblem. https://de.wikipedia.org/wiki/Partitionsproblem
Irgendwie müssen die Aufgaben (Aufgabenlast) auf n Prozessorkerne möglichst gleichmäßig verteilt werden. Es gibt Lösungen für 2 und für 3 Systeme, aber nicht für n Systeme… man darf gespannt sein wie ich das schlussendlich angehe.

EINTRAG #1

Jahre später :smiley: Und das automatische Optimierungssystem ist endlich fertig. Dafür waren teifgreifende Änderungen in der Projektstruktur notwendig um neue Abhängigkeiten zwischen den Threads und ihren Datenbanken zu ermöglichen, oder um Tomate_Salat zu zitieren:

Die Lösung sieht in etwa wie folgt aus: Es gibt einen zentralen “Kapazitäten” Markt in der alle Threads ihre Auslastung abgeben, und anschließend können die Threads bei Bedarf Kapazitäten einkaufen bezwiehungsweise Workloads dauerhaft verkaufen.
Die Auslastung aller Workload(-Gruppen) kann zu diesem Zweck einzeln überwacht werden.

Damit das ganze System nicht überschwingt oder sich gar instabil verhält, werden mehrere Kalman Filter eingesetzt, die Rauschen aus den Messwerten in Echtzeit filtern und damit verhindern dass Kapazitäten kreuz und quer, vor und zurück verkauft werden.

Die Änderung war unheimlich notwendig, und das merke ich jetzt mehr denn je wie flüssig das läuft. Vorallem beim Neustart des Programmes sind viele Aufgaben auf (später) voll ausgelasteten Threads gelandet, und das konnte nicht mehr geändert werden.


EINTRAG #2

Zudem habe ich die Schwarm-KI and das neue Multithreading Framework angepasst und die kann jetzt nicht nur größere Karten bearbeiten sondern läuft auch Thread übergreifend… schneller!? :frowning: Meine Vermutung ist dass die Threads/Kerne zusammen einen größeren Cache haben, denn Speicherlatenz ist ein großes Thema bei der Schwarm Intelligenz.


EINTRAG #3

Weiterhin hab ich die Multithreading Architektur “Context-based Threading” jetzt in “Asynchronous Context-based Threading” umbenannt für die neue Abkürzung “ACT”. Wie man mich im Chat hinwies war die alte Abkürzung bereits “in Verwendung” für etwas mit dem ich nicht identifizieren möchte.

Also jetzt mal ernsthaft, wenn ich das hier

for( int y = 0; y < arrayLength; y++ ) {
    for( int x = 0; x < arrayHeight; x++ ) {
        array[x][y] = consume(array[x][y]);
    }
}

auf 8 Threads gleichmäßig aufteile (der Code ist entsprechend angepasst) und die Ausführungszeit der Threads zusammenrechne, komme ich auf 1000-2000µs. Führe ich den Code dagegen so wie oben Singlethreaded aus, komme ich auf 15000-18000µs.
Das ist doch nicht normal? :face_with_raised_eyebrow: Wie ist das denn überhaupt möglich?

Und es wird sogar noch schlimmer, wenn ich die x und y Verschachtelung vertausche sind es sogar 600-1000ms (Singlethreaded war es bereits vertauscht). Meine ganze Erfahrung zerbricht vor meinen Augen… :pleading_face:

Da es mit dem Projekt etwas schleppend vorangeht, habe ich mich mal etwas mit dem Komponieren von Musik beschäftigt. Hier mal ein kleines Sample von mir:


Natürlich mit kräftiger Rechner-Unterstützung, schon Wahnsinn was heute alles möglich ist.

Bin mir nicht ganz sicher ob die Musik so passend für das “SciFi” Theme ist. Habe auch noch ein bisschen mit Synthesizern herumgespielt, aber das war nicht so gut.

2 Likes

Richtig schöne Hintergrundmusik!
Dachte dabei auch eher an Zelda, offene Welt und Sonnenschein.

Wie hast du sie erstellt? Mit welchem Programm/welcher Hardware? Möchte das auch gerne endlich mal angehen. =)

Ufff das ist komplizierter zu erklären, denn es gibt einen Faktor der die ganze Erklärung nochmals gänzlich durcheinander bringt. Ich bin natürlich weder Mozart noch hab ich ein Orchester. :smiley:

Das Komponieren selbst ist schon schwer genug aber man benötigt noch eine gute Composer Software und natürlich einen Synthesizer um die Musik überhaupt abzuspielen. Und die sind teuer. Ein Freund oder Bekannter mit einem kleinen Tonstudio ist von Vorteil.

Hier kommt der Faktor AIVA ins Spiel. Auch wenn es einem das Marketingmaterial auf YouTube zumuten will, AIVA ist kein Hans Zimmer. Sondern eine künstliche Intelligenz die Musikstücke komponieren kann von denen die meisten einem Katzengejammer am nächsten kommen. Aber wenn man nur genügend vielen Affen eine Schreibmaschine gibt kommt manchmal tatsächlich eine gute Anfangsmelodie heraus. Einem Anfänger wie mir gibt das einen unglaublichen Headstart an dem man basteln kann, sowie einen Einblick über den strukturellen Aufbau, von Anfang bis Ende, den Übergängen und den einzelnen Instrumenten.

AIVA kann die Musik auch direkt “Rendern”, also in hörbare Musik überführen - das ist in der Musikwelt weit weg von Selbstverständlich. Man kann die Instrumente und deren Spielart verändern und einzelne misslungene Abschnitte komplett neu generieren lassen. Ich habe relativ schnell die Tonleiter, was eine Oktave ist und den Unterschied zwischen Tremolo, Vibrato, Legato, Spiccato und weiteren kennen gelernt.

https://beta.aiva.ai/

Danach wird es aber komplizierter. Um die Musik gezielter zu komponieren, schiefe Töne zu entfernen, die Übergänge sanfter zu gestalten und das Stück allgemein auszuschmücken wird natürlich weiterhin entsprechende Composer Software und Synthesizer benötigt. Freeware gibt es dafür praktisch nicht.

Ich verwende Steinberg Nuendo. Teuer, aber zu meinem Glück ist mein früherer Mitbewohner Musikproduzent mit einem kleinen Studio. Nuendo kann natürlich auch überzeugende Musik erzeugen.

Hab die Tage mal ein bisschen die Grafik neu gezeichnet (modularisiert), inklusive dem Schadenmodell. Und die API der HiveAI hat gute Fortschritte gemacht, ist jetzt auch ein bisschen intelligenter.