Generieren Sie zufällige Personen mit demografischen Merkmalen

8

Ich hätte gerne zufällige Leute mit Präferenzen für ein wirtschaftliches Strategiespiel. Nehmen wir zur Vereinfachung an, jede Person hat Alter (Anzahl), Heimatgebiet und Typ (Stadt, Dorf, ...) und Vorlieben (wie Eiscreme, ..).

Das Problem ist, wenn ich eine einheitliche Zufallsgenerierung verwenden würde (wählen Sie zufälliges Alter, Zuhause und Präferenz), wären alle Menschen ... gleichmäßig verteilt und es gäbe keine demografischen Daten, die der Spieler entdecken könnte. Mit Merkmalen meine ich zum Beispiel, dass junge Leute wie Soda, zusätzlich Leute, die im Dorf leben, dazu neigen, rot gefärbte Verpackungen zu bevorzugen (=> Spieler, die es mit verschiedenen Verpackungen nach Land versenden, verkaufen mehr). Ich möchte, dass die Personen so generiert werden, dass in den Daten immer einige demografische Besonderheiten vorhanden sind (die dem Spiel selbst nicht bekannt sein müssen).

Die Funktionen müssen und sollten nicht denen der realen Welt ähneln. Der Algorithmus sollte funktionieren, ohne dass Datenbanken von Drittanbietern erforderlich sind. Häuser für Menschen werden als Input aus dem Schritt der vorherigen Generation als Array von Tupeln mit Siedlungs-ID und Kapazität (also auch Typ) angegeben.
Was könnte ein allgemeines Verfahren für diese Art der Verfahrensgenerierung sein?

wondra
quelle

Antworten:

5

Generieren Sie Ihre Demografie mit gewichteter Zufallsverteilung . Bevor Sie die Statistiken für einzelne Personen erstellen, legen Sie die gewichteten Statistiken für Ihre Gruppen fest (z. B. Altersgruppen, Standort usw.). Wenn Sie eine Person generieren, rufen Sie zuerst ihre Gruppeninformationen ab (entweder zufällig oder auf eine andere Weise, um Personen Gruppen zuzuweisen). Verwenden Sie dann die Gruppeninformationen einer Person, um die Statistiken ihrer Präferenzen zu gewichten.

Alternativ können Sie die Personen in Phasen generieren. Generieren Sie alles nach dem Zufallsprinzip und ändern Sie dann über mehrere Iterationen hinweg die Präferenzen der Benutzer, um sich auf Einheitlichkeit zu konzentrieren. Wenn beispielsweise in Region A junge Menschen, die "Soda" anstelle von "Pop" sagen, über mehrere Iterationen, die zu Blei führen, etwas höher sind, würde "Soda" die dominierende Phrase sein, die für Zuckerwasser verwendet wird.

Sie können sogar noch einen Schritt weiter gehen und zulassen, dass die Umgebung je nach Einheitlichkeit ihrer Präferenz Einfluss nimmt. Wenn zum Beispiel in Ihren Iterationen eine große Mehrheit der Menschen eine Präferenz gegenüber einer anderen hat, kann sich dieser Einfluss auf die Umgebung ausbreiten.

Stellen Sie sich vor, Sie haben ein Attribut mit zwei Auswahlmöglichkeiten: Soda oder Pop. Wenn Sie diese Informationen mit Ihren Standortdaten in einem Raster mit Schwarzweiß visualisieren würden, würde dies wie weißes Rauschen aussehen. Völlig zufällig. Jetzt starten Sie einen im Wesentlichen zellularen Automaten. Attribute ändern sich abhängig von der Häufigkeit der Attribute um sie herum. Zum Beispiel ändert sich eine Soda-Auswahl, die von 3 Pop-Optionen umgeben ist, in Pop. Nach mehreren Iterationen erhalten Sie lokalisierte Regionen, in denen jede Auswahl Soda oder Pop ist. Diese Regionen werden wachsen und schließlich wird Ihr weißes Rauschen in Schwarz-Weiß-Inseln umgewandelt. Mit mehr Auswahlmöglichkeiten könnte es etwas wie dieses Video aussehen, das jemand von einem Pokémon-Kampf erstellt hat ( mehr hier zu diesem Experiment ).

MichaelHouse
quelle
Die erste Option ist die, für die ich mich am Ende entschieden habe, da sie im Voraus die wenigsten Informationen erfordert (möglicherweise wird sie später für eine komplexere Lösung geändert, aber zum Testen passt sie am besten zu mir). Könnten Sie auch das iterative Verfahren genauer beschreiben? Ich bin mir nicht sicher, ob ich es bis zu einem Punkt verstehe, an dem ich es implementieren könnte.
Wondra
1
@wondra Ich habe einen weiteren Absatz und ein visuelles Beispiel hinzugefügt.
MichaelHouse
3

Sie scheinen eine Reihe sichtbarer Attribute zu haben, die selbst keinen Gameplay-Effekt haben (Alter, Ort ...), aber einen Hinweis auf die unsichtbaren, Gameplay-bezogenen Attribute (ihre Vorlieben) bieten.

Was Sie tun können, ist, die sichtbaren Attribute zuerst zufällig zu generieren und sie dann beim Generieren der spielbezogenen Attribute abhängig von den sichtbaren Attributen zu beeinflussen.

Zum Beispiel könnte die Formel für die Süße-Präferenz sein random(0, 100) - random(0, age). Dies macht einen Senior, der Süßigkeiten mag, weniger wahrscheinlich als ein Kind, das Süßigkeiten mag.


Eine andere Möglichkeit wäre, einige Charakterstereotypen (Kind, älterer Mann, Geschäftsfrau, Hipster, Punk ...) zu definieren und ihnen Standardwerte zuzuweisen.

Wenn Sie einen neuen Charakter erstellen, wählen Sie ein Stereotyp. Wenn Sie dann für die Zeichenattribute würfeln, würfeln Sie mehrere Zufallszahlen und wählen Sie den Wert aus, der dem Standardwert des Stereotyps für dieses Attribut am nächsten kommt. Auf diese Weise wird die Mehrheit Ihrer Charaktere dazu neigen, ihrem Stereotyp zu entsprechen, aber es kann und wird Ausreißer geben. Je mehr Rollen Sie machen, desto weniger Ausreißer haben Sie.

Wenn eine Reihe vorgegebener Stereotypen für Sie nicht prozedural genug ist, können Sie die Menge der Stereotypen und ihre Standardattribute sogar zufällig generieren. Ihre Spieler können dann weiterhin Korrelationen zwischen Charakteren erkennen, die auf demselben zufälligen Stereotyp basieren. Zum Beispiel mögen Leute, die Soda mögen, auch rote Verpackungen, weil es (dem Spieler unbekannt) ein Stereotyp gibt, das sowohl eine hohe Standard-Soda-Präferenz als auch eine hohe Standard-Rot-Präferenz hat und alle davon stammen.

Philipp
quelle