Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

23.09.2012, 11:35

Schwarmintelligenz - wie bewegen sich Punkte in einem Bezier?

Hallo Community

Dies ist einerseits eine Projektvorstellung von mir aber auch ein "Hilfeschrei":)
Ich habe seit geraumer Zeit angefangen eine einigermassen intelligente Schwarmintelligenz auf die Beine zu stellen. Im moment bin ich noch am Anfang.
Den Code könnt ihr mit einem Vermerk gerne weiterverwenden. Aber jetzt zu meinem Problem:

Ein "Blob" ist standardmässig auf Futtersuche. Dies funktioniert so, dass er sich immer eine Randomposition auf der Welt generiert und dort hin geht. Sobald er dort ankommt generiert er eine neue Randomposition. Bei diesem Wechsel entsteht ein abrupter Richtungswechsel, was ich nicht will. Der/das Blob soll seine Richtung in einer geschmeidigen Kurve ändern. Ich dachte zuerst an eine Bézierkurve und habe auch danach gegoogelt. Daraufhin habe ich diesen schönen Artikel gefunden: Bezier. Für die Umsetzung könnte ich diese Methode benutzen, jedoch habe ich dazu ein paar Fragen. Als Parameter wird t mitgegeben was nacher einen Punkt auf der Bezierkurve darstellt. Wie soll ich dieses t realisieren? Soll jeder Blob ein eigenes t bekommen damit er weiss an welcher Position in der Bézierkurve ist? Wäre eig. möglich jedoch, jetzt kommt das nächste Problem, will ich, dass der Blob mit der eigenen Geschwindigkeit diese Bézierkurve abfährt.

Jetzt zu meiner Projektvorstellung^^
Wie ihr oben lesen konntet, bin ich an diesem Projekt dran. Was ich während der Entwicklung gemerkt habe waren folgende emotionale Phasen^^: Am Anfang war ich voll überzeugt, dass dies ein cooles Projekt abgeben würde doch mit der Zeit vermisste ich die Interaktion zum Zuschauer. Nachfolgend findet ihr meine nächsten geplanten Arbeitsschritte:
//suche in einem Radius nach Futter
//bringe es zum Stamm zurück
//gehe wieder hin, falls es keine hat wieder random
//schau ob es der nachbar weiss wo es Futter hat
//halte dich von jedem mindestens x Pixel fern
//schau wo der Schwarm ist
//Nimm die geschwindigkeit und richtung des Nachbars
//pflanze dich fort
//kille kleinere Gegner
//Next Step: Beziekurve, Schwänzchen hinzufügen |||
Muss nicht verständlich sein, will euch nur zeigen wo mein eigentliches Ziel war. Jetzt kommt ihr zum Zug:)
Ich hätte gerne allg. Kritik. Wahrscheinlich betrifft es den Code. Ich habe extra js ausgewählt, da ich dort am schnellsten ein Ergebniss sehe. Wahrscheinlich werde ich es irgendwann noch umschreiben.
Doch was ich lieber hätte wären Ideen wie ich die Simulation in ein Spiel umwandeln könnte. Ein Idee von mir wäre wenn jeder(ja Multiplayer) seinen eigenen Schwarm hat und mit ihm gewinnen muss...irgendwie.

Ich hoffe ihr könnt mir helfen. Falls jemand am Projekt weiterentwickeln will, kann das gerne tun. Gerne würde ich in diesem Fall was davon erfahren:)

Hier noch der Link: DerLink

MitgliedXYZ

Alter Hase

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

2

23.09.2012, 11:51

Klingt irgendwie nach AntMe! 2.0...
Ich denke aber das kanntest du schon: http://www.antme.net

3

23.09.2012, 11:59

Klingt irgendwie nach AntMe! 2.0...
Ich denke aber das kanntest du schon: http://www.antme.net

Ne kannte ich noch garnicht:) Inspiration holte ich mir von diesem Projekt: http://swarms.cc/projects/Stocos/

MrZylox1998

Treue Seele

Beiträge: 186

Wohnort: Bayern

Beruf: Schüler(9.Klasse)

  • Private Nachricht senden

4

23.09.2012, 12:21

Hört sich ziemlich interessant an :)
Ich kann dir leider nicht weiterhelfen,
aber halte uns auf dem laufenden :D
Das packst du^^

Mr 8) Zylox
Jetzt -- ist schon vorbei.

Rechtschreibfehler sind Spezialeffekte meiner Tastatur!

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

23.09.2012, 12:32

Ich würd da nicht unbedingt was in mit Bézierkurven machen. Wenn du schon ein Spline verwenden willst, dann würd sich imo ein kubisch hermitsches Spline anbieten.
Ich denk es gibt aber wesentlich einfachere Lösungen. Eine Möglichkeit wär z.B.: Gib deinem Agenten einfach zusätzlich zur Position auch noch einen Richtungsvektor, der die aktuelle Blickrichtung repräsentiert. Der Agent bewegt sich dann immer in Richtung dieses Richtungsvektors. In jedem Zeitschritt addierst du einen Anteil des Vektors, der von der aktuellen Position in Richtung Ziel zeigt, zu diesem Bewegungsrichtungsvektor und renormalisierst. Ich denk, das sollte genau das von dir gewünschte Verhalten erzeugen. Je größer der Anteil, desto schneller dreht der Agent sich zum Ziel...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (23.09.2012, 12:37)


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

23.09.2012, 13:00

Ich mache dir mal einen alternativen Vorschlag zu deiner Idee. Du willst ja dass dein Blob nach Nahrung sucht. Deine Idee ist da ja eigentlich Mittel zum Zweck gewesen. Schöner wäre es aber vielleicht doch, wenn dein Blob umherwandern würde und so immer weiter nach Nahrung suchen würde. Über dieses und auch mehrere Probleme wurden sich schon Gedanken gemacht. Das ganze nennt sich "Steering Behavior". Dazu findest du hier einige Erklärungen. Das Verhaltung was du zur Nahrungssuche suchst, wäre "Wander". Du kannst dieses Verhalten dann mit anderen verbinden. Anbieten würde sich ein Zustandsautomat. Hört sich komplizierter an als es ist. Dein Blob ist am Anfang im Zustand "Suche Nahrung". Dabei läuft er Umher und sucht Nahrung. Das würdest du dann durch "Wander" umsetzen. Sobald dein Blob Nahrung sieht oder nah genug an Nahrung ist, wechselt er in den Zustand "Gehe zu Nahrung". Dafür gäbe es dann bei den Steering Behaviors auch ein paar Nette Ideen. Dafür könntest du dir mal "Arrival" angucken. Dann würde dein Blob den Zustand wechseln und die Nahrung zum Stamm bringen. Das könntest du auch über Arrival umsetzen. Wenn möchtest, dass die Richtungswechsel jetzt runder werden, gibt es dazu bessere Ansätze. Du könntest die Punkte die du ablaufen möchtest zu einem Pfad verbinden und diesen Pfad zum beispiel smoothen. Dabei machst du einfach immer kleinere Einteilungen, welche zueinander gedreht werden. Ansonsten könntest du deinem Blob einen Wert geben um den er maximal in einem Schritt rotieren kann. Dann lässt du ihn schon anfangen zu rotieren, bevor du an deinem Wegpunkt bist und zwar in die Richtung des nächsten Wegpunktes. Dadurch läuft dein Blob einen Bogen.
Da du jetzt ja noch dein Schwarmverhalten einbauen möchtest, kannst du das auch mit den Steering Behaviors lösen. Auf der Seite oben ist es unter "Flocking" zusammengefasst. Dieses setzt sich eigentlich aus 3 Verhalten zusammen. Da kannst du ja gucken ob du alle 3 benötigst oder wie du es umsetzen möchtest.
Diese Grundlegenden Verhaltensweisen kannst du nun kombinieren um so komplexes Verhalten zu erzeugen.
Wenn dich das ganze ein wenig mehr interessiert, empfehle ich dir dieses Buch. Da werden auch noch viele andere Sachen wie Graphen, Wegsuche, ein wenig Fuzzy Logic, Zustandsautomaten, Zielgetriebene KI etc besprochen. Als Einstiegswerk fand ich es sehr hilfreich in das Thema.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

7

23.09.2012, 13:37

[...]
Boah..Schorsch ich bin dir sehr sehr dankbar:)! Diese Seite ist eigentlich genau das was ich suche. Kannst du da mehr Sachen zu diesem Thema posten?
Jetzt bin ich mir unsicher was aus diesem Projekt wird.(Spiel oder Simulation) Gerne hätte ich vielleicht noch ein paar Spielideen. Da können alle mitmachen:)

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

23.09.2012, 16:56

Wie gesagt das oben genannte Buch ist ein wirklich guter Einstieg. Es gibt zu allem Codebeispiele. Ist halt alles C++. Den Code kann man natürlich auf andere Sprachen übertragen. Für die Codebeispiele solltest du also schon gute C++ Kenntnisse haben. Ansonsten lässt sich die Logik natürlich auch ohne weiteres auf andere Sprachen übertragen. Natürlich könnte ich dir jetzt einiges zu dem Thema schreiben, das würde aber mächtig viel Zeit fressen. Wenn du bestimmte Fragen hast, kannst du sie ja hier im Forum posten. Bin sicherlich nicht der Einzige der sich hier mit künstlicher Intelligenz beschäftigt hat. Ansonsten lohnt sich wie gesagt das Buch. Gibt auch viele andere Bücher zu diesen Themen. Englischkenntnisse solltest du schon haben.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige