文章 "遗传算法 - 很简单!" - 页 11

 
ivandurak:
应根据什么标准杀死多少后代 .有多少父母和后代应该取决于优化参数的数量 .从什么时代可以允许乱伦 .一般来说,还不太清楚杀死父母的原则是什么。只是不幸的是,你的劳动不太适合我的目的,但还是非常感谢你的画笔。

你不必杀死任何人。即使只有一条染色体也可以工作(与自身杂交)。因此,平均 50 条染色体足以满足所有目的。

你只是不了解算法。

算法是通用的,适用于任何用途,这就是它叫 UGA 的原因。只是有些任务可以用其他方法更快地解决。

 
ivandurak:

1.给我一个提示....

2. 用什么标准杀死多少后代 .

3.应根据需要优化的参数数量选择多少父代和子代 .

4.从哪个纪元开始允许乱伦 .

5.一般来说,杀死父母的原则并不明确 .

6.只是遗憾的是,您的劳动不太适合我的目的,但还是非常感谢您的刷子 .

1.我不太清楚您发帖的目的。如果您需要关于实现算法的建议,您需要的是细节,可以说是一个总体概念,这样才有讨论的余地。

如果问题是关于文章中描述的算法,请参阅 2、3、4、5、5。2, 3, 4, 5, 6.

2.子代不会被杀死。父代及其子代的重复序列会被删除。

3.大部分人口中的 50 个个体是最常用的含义。

4.不允许 "与自己 "杂交。但如果非常有必要(种群正在 "消亡"),则可以这样做。要多次尝试寻找合适的 "伙伴"。

5.父母不会被随机或在某些条件下 "杀死",而是被后代取代(如果种群数量已满,则正好有一半的种群被后代取代)。

6.如果问题非常 "特殊"--也许(如果可能的话)可以先尝试找到一种分析方法。

 

感谢您的及时回复。我需要遗传学来进行各种实验。在我看来,您的参考书目使用起来不是很方便,因此我正在编写自己的参考书目。 不幸的是,在网络中对整个算法的描述很差,主要只有 GA 决定子,如果您能提供描述链接(俄语),我将非常感激。下面我将描述我是如何看待这一切的,如果不难纠正的话。

1 随机创建亲本个体,不少于 50 个。

2 通过杂交和突变产生后代数量不少于 ..... 的群落。

3 寻找重复个体,去除亲本。

5 必要时,完成子代和父代的繁殖。亲本是随机产生的,后代是自然产生的。

4 通过 FF 运行所有子代。FF 位于 GA 之外。

5 对它们进行排序。排名越高,越有可能成为爸爸。

6 将所有个体分为强者和弱者,强者将在下一步成为父母。

7 从群体中挑选出一部分后代(最不适合的)。小概率情况下,我们会从父母群中剔除一部分人,就像意外死亡一样。

8 这就是时代的终结。

9 如果在 .... 期间(请注明),同一个个体持有 Rambo 标志 - 计算结束 GA 收敛,否则转到第 3 点。

 
ivandurak:
....
对不起,但我觉得你需要再重新读一遍这篇文章。
 
我花了很大力气编写了我的 GA。但它会陷入局部极端。您对如何避免这种情况有什么一般性建议吗?
 
ivandurak:
我花了很大力气编写了我的 GA。但它会陷入局部极端。你能给我一些关于如何避免它的一般性建议吗?

这不是传染病,而是一种特殊的 "遗传 "魔法。:)

您使用什么函数作为 FF?

我建议使用专门设计的函数来 测试、校准和调试优化算法。

Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
  • www.mql5.com
Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
 
请原谅我的冒昧,但这是一个原则问题。我从您的文章中选取了一个例子,并编写了一个脚本 进行检查。答案与示例不符,要么是滑雪板没有移动,要么是椅子和键盘之间的衬垫出了问题。如果像小猫一样戳一下不难的话,第二天我就找不到错误了。致敬
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("解决方案 1 可能是正确的 = ",y) ;
//-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("解决方案 2 是我的 = ",y) ;
  }
 
ivandurak:
请原谅我的冒昧,但这是一个原则问题。我从您的文章中选取了一个例子,并编写了一个脚本进行检查。答案与示例不符,要么是滑雪板没有移动,要么是椅子和键盘之间的衬垫出了问题。如果像小猫一样戳一下不难的话,第二天我就找不到错误了。衷心感谢
没错,必须更换垫圈。对不起。
 
ivandurak:
请原谅我的冒昧,但这是一个原则问题。我从您的文章中选取了一个例子,并编写了一个脚本进行检查。答案与示例不符,要么是滑雪板没有移动,要么是椅子和键盘之间的衬垫出了问题。如果像小猫一样戳一下不难的话,第二天我就找不到错误了。衷心感谢

如果对 FF 本身没有信心,即不确定极值是否如此,可以在测试器中运行该函数,测试器 GA 在这个意义上相当不错,可以找到相当精确的解决方案,但仅限于少量参数(1,2)。

一般来说,应该理解的是,GA 找到的不是精确解,而是稳健解。也就是说,与所有可能的解决方案相比,它是一个相当不错的解决方案。

 
ivandurak:
请原谅我的冒昧,但这是一个原则问题。我从您的文章中选取了一个例子,并编写了一个脚本进行检查。答案与示例不符,要么是滑雪板没有移动,要么是椅子和键盘之间的衬垫出了问题。如果像小猫一样戳一下不难的话,第二天我就找不到错误了。请注意。
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("解决方案 1 正确 = ",y) ;
   //-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("决定 2. 错误 = ",y) ;
  }
我有一个匹配的原因。可能是因为我使用了文章中的功能。