我正在阅读这个引人入胜的book中的一章,内容涉及使用基因编程以交互方式演化图像。大多数功能集由简单的算术和触发函数组成(实际上是对图像进行操作并返回图像)。这些功能构成了对图像进行编码的解析树的内部节点。树的叶子或终极值是随机数和x,y坐标。

关于将复杂平面的迭代函数添加到函数集的部分,其中:

说遗传学将特定的Mandelbrot集作为节点插入
一棵浓密的树。该函数需要两个参数:mandel(cReal,cImag),处理
它们作为复平面中的实,虚坐标。如果基因组
刚好提供了像素坐标(x,y),而mandel()是根
节点,您将获得熟悉的Mset。但是cReal和cImag本身就是函数的整个分支的结果,并且有很多坐标实例
x,y散落在树叶间。进入迭代循环,轨道
绕了一会儿,最后与Mset之间有一定距离
吸引子,例如迭代次数。

我的问题是,如何将Mandelbrot集渲染器作为一个函数,该函数将复杂平面上点的真实和虚构坐标作为参数并返回Mandelbrot集的渲染?

最佳答案

我不确定这是否真的回答了您的问题,但是我对您引用的文本的理解只是说mandel函数只是可以在您的遗传程序中出现的另一个函数(如乘法,最小值,最大值,加法等)。

像乘法函数一样,mandel函数采用两个参数(in_1in_2)并返回单个值。乘法函数仅返回in_1 * in_2,而mandel函数可能会执行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
}

如果您的整个遗传程序树只由mandel函数组成,一个输入为x,另一个输入为y,则重复评估程序以获取一堆不同的(x,y)值并保存结果,将为您提供一幅完整的Mandelbrot图片组。

当然,关于基因编程的整洁之处在于,输入可能比xy更奇特。例如,如果一个输入是x而另一输入是x + 2*y,结果将是什么样?或者,如果一个输入是x而另一个输入是mandel(x,y)

关于artificial-intelligence - Mandelbrot集的遗传编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3481430/

10-10 09:22