3

Je lis un chapitre de ce fascinant book sur l'utilisation de la programmation génétique pour faire évoluer les images de façon interactive. La plupart des fonctions sont composées de fonctions arithmétiques et trigonométriques simples (qui fonctionnent réellement sur et retournent des images). Ces fonctions constituent les nœuds internes des arbres d'analyse qui encodent nos images. Les feuilles de l'arbre, ou les valeurs terminales, sont des nombres aléatoires et des coordonnées x, y.Programmation génétique avec l'ensemble Mandelbrot

Il y a une section sur l'ajout de fonctions itératives du plan complexe à l'ensemble de la fonction:

Dites la génétique insère un Mandelbrot particulier défini comme un nœud quelque part dans un arbre touffu. La fonction attend deux arguments: mandel (cReal, cImag), en traitant comme des coordonnées réelles et imaginaires dans le plan complexe. Si le génome venait de fournir les coordonnées de pixels (x, y) et mandel() étaient le nœud racine , vous obtiendriez le Mset familier. Mais les chances sont que cReal et cImag sont eux-mêmes le résultat de branches entières de fonctions, avec de nombreuses instances de coordonnées x, y dispersées parmi les feuilles. Entrez la boucle d'itération, orbite autour pendant un moment, et finalement échapper avec une certaine mesure de la distance à l'attracteur Mset , comme le nombre d'itérations.

Ma question est comment voulez-vous faire un ensemble de Mandelbrot en fonction renderer qui prend les coordonnées réelles et imaginaires d'un point sur le plan complexe comme arguments et renvoie un rendu de l'ensemble de Mandelbrot?

Répondre

1

Je ne sais pas si cela répond effectivement à votre question, mais ma compréhension du texte que vous avez cité dit simplement que la fonction mandelest juste une autre fonction (comme la multiplication, min, max, addition, etc.) qui peuvent apparaître dans votre programme génétique.

La fonction mandel prend, comme la fonction de multiplication, deux arguments (in_1 et in_2) et renvoie une seule valeur. Alors que la fonction de multiplication retourne juste in_1 * in_2, la fonction mandel peut faire something like this:

int mandel(int in_1, int in_2) { 
    x = 0 
    y = 0 
    iteration = 0 
    max_iteration = 1000 

    while(x*x + y*y <= (2*2) && iteration < max_iteration) { 
    xtemp = x*x - y*y + in_1 
    y = 2*x*y + in_2 
    x = xtemp 

    ++iteration 
    } 

    if(iteration == max_iteration) return 0 
    else return iteration 
} 

Si votre arbre de programme génétique tout se compose de rien d'autre que la fonction mandel avec une entrée comme x et l'autre entrée comme y, puis évaluer à plusieurs reprises votre programme pour un tas de valeurs (x,y) différentes et l'enregistrement du résultat vous donnera une belle image de l'ensemble Mandelbrot.

Bien sûr, la chose intéressante à propos de la programmation génétique est que les entrées peuvent être plus fantaisistes que juste x et y. Par exemple, à quoi ressemblerait le résultat si une entrée était x et l'autre entrée était x + 2*y? Ou si une entrée était x et l'autre était mandel(x,y)?

Questions connexes