J'ai récemment posé cette question et la conclusion semble être que l'utilisation de la programmation génétique ( GP ) pour la création de contenu de jeu procédural n'a pas vraiment été faite. Je veux changer cela.
Je suis assez certain que le GP pourrait être déployé pour aider à trouver un nouveau générateur de terrain. La question que je me pose est de savoir comment cela pourrait être réalisé?
Tous les médecins généralistes ont quelques éléments de base qui peuvent être généralisés pour tous les médecins généralistes (sélection des parents, recombinaison, mutation, survie). Je peux les comprendre par moi-même. Le problème se pose dans les parties spécifiques du problème. Voici comment vous représentez le problème dans le code (cela utilise généralement un arbre) et comment vous évaluez la qualité d'un générateur (cela peut être une ou plusieurs valeurs).
Les questions en bref:
Comment représenteriez-vous un générateur de terrain d'une manière qui peut être analysée dans un arbre?
Quel type de terrain cela devrait-il générer? (carte des hauteurs, graphe des sommets, ...)
Moins cela est basé sur une carte verticale, mieux c'est.
Que serait utilisé pour évaluer l'aptitude d'une solution?
ex: nous voulons un terrain intéressant afin que nous puissions avoir l'une des valeurs comme la variation moyenne des normales pour chaque sommet du terrain.
la source
Réponses:
Vous aurez peut-être de la chance avec une approche similaire aux images génétiques de Karl Sims .
Il utilise un simple ensemble d'opérateurs dans un langage de type LISP de sorte que la sortie de n'importe quel opérateur puisse être utilisée pour influencer l'image, de la même manière que dans certains langages de shader (c'est-à-dire qu'un scalaire serait une valeur d'échelle de gris, un
vector3
seraitRGB
, etc.). ).Bien que je suppose que ce sont des éléments d'implémentation, ce que vous voulez probablement, ce sont ses mots-clés, qui (iirc) contiennent toutes les bases:
sin, cos, tan
, etc.)x, y
)sqrt, pow, abs, inverse
)fBm, noise2, noise3
)mandelbrot, julia
)lerp, quad, step, smoothstep
)(Certains des éléments ci-dessus peuvent ne pas être dans son implémentation; j'ai trouvé son travail il y a longtemps et j'ai en fait fait quelques tentatives dans ce que vous décrivez au fil des ans - donc les souvenirs peuvent fuir :)
Le garder intéressant (et rapide)
J'ai eu un peu de chance avec une approche multicouche qui a massivement réduit le nombre d'évolutions mortes.
Pourtant...
Maintenant que j'ai commodément sauté l' algorithme de fitness , j'ai surtout utilisé l'approche de Karl Sims de la "sélection non naturelle" où vous voyez la génération actuelle au milieu d'un tas de progénitures (popularisé par les outils électriques de Kai à l'époque - voici une image de ce que je veux dire ) ..
Cependant, vous pourriez probablement avoir un ensemble d'images d'entraînement, peut-être des images satellite et quelques images artificielles avec des qualités particulières, puis utiliser une analyse en ondelettes ou FFT 2D par rapport au terrain que vous testez?
C'est un sujet intéressant, mais je doute que vous ayez besoin d'une réponse :)
EDIT: ahh. a dû supprimer un tas de liens parce que je suis un nouvel utilisateur: - |
la source
Je ne suis pas sûr que vous puissiez répondre à cette question, mais je pense qu'une explication de la raison pourrait être une réponse suffisamment utile. Donc, les réponses en bref:
Les algorithmes génétiques sont généralement utilisés pour résoudre un problème connu où vous pouvez définir l'environnement via des règles. Ensuite, vous pouvez créer des ensembles de données qui représentent différentes propriétés qui affectent la façon dont les choses réagissent aux règles. L'ordinateur joue ensuite un «tour» avec l'ensemble de données initial, sélectionne le numéro X supérieur, mélange leurs valeurs après les avoir appariés et fait un autre tour. Un exemple courant de ceci est «l'élevage d'un meilleur troll» (faire l'élevage pour trouver un ensemble de valeurs où le troll fait généralement très bien dans son environnement (est capable de chasser et de manger, de tuer ou de rester à l'écart des villageois, peut collecter du butin et amasser tous les objets brillants qu'il désire, etc.).
Je ne suis tout simplement pas sûr que ce que vous essayez d'accomplir soit applicable dans le domaine de la génération de terrain. La seule chose que je peux trouver serait des sortes d'évaluations de contenu de jeu où vous ne vouliez pas planifier un monde mais vouliez en faire un dans lequel le cheminement de l'IA peut être calculé correctement ou quelque chose comme ça. Même avec cela, cependant, vous recherchez un univers unique ou au moins limité.
la source
Certainement un graphique de sommet (un maillage), il est compact en termes de stockage et peut être tramé (tesselé) à la demande.
Automates cellulaires. Je peux penser à deux implémentations:
Automates à jeu de règles, peut-être avec des éléments d'automates finis (lorsque l'état actuel, comme le compteur de tentatives ou le temps d'inactivité, est pris en compte).
L'ensemble de règles lui-même peut être représenté comme un arbre de décision de branchement ou un simple lot de commandes (je ne sais pas si cela fonctionnera)
Ce n'est qu'un ensemble de règles pour chaque nœud
Constructeurs du monde. Au lieu d'appliquer un solveur pour chaque nœud, vous pouvez en créer juste un groupe et leur permettre de naviguer dans le maillage.
Pourtant, j'ai peur que la deuxième approche doive être soutenue par la première: le caractère aléatoire initial doit être lissé et je ne sais pas si les constructeurs peuvent faire l'affaire. Après tout, chaque cellule vivante a des mitochondries.
L'intégrité du terrain résultant - il ne devrait pas ressembler à un méli-mélo. Et la diversité - en général, nous voulons que le plus grand nombre possible de variantes disponibles soient représentées (la friche plate d'un bord à l'autre n'est pas drôle). Peut-être quelque chose de plus complexe comme la façon dont les nœuds voisins s'emboîtent (toundra au milieu du désert, quoi?)
Je dois l'essayer par moi-même avec mon générateur de maillage quand / si j'ai du temps libre =)
la source