图8.16 在迭代60, 80, 95, 100次时的种群
随着代数的增加,种群中的个体靠近在一起,且逼近最小值点[0,0]。 8.2.5.7 算法的停止条件
遗传算法使用下列5个条件来确定何时停止:
? Generations(代数)——当产生的代的数目达到规定的代数的值时,算法停止。
? Time limit(时限)——在运行时间的秒数等于时限时,算法停止。
149
? Fitness limit(适应度限)——当适应度函数的值对于当前种群的最佳点小于或等于适应度限时,算法停止。
? Stall generations(停滞代数)——在连续繁殖的时间序列中,若长时间不繁殖新代,亦即目标函数无改进,到达停滞代数规定的代数时,则算法停止。
? Stall time limit(停滞时限)——在秒数等于停滞时限的时间间隔期间,若目标函数无改进,则算法停止。
若这5个条件中任何一个条件一旦满足,则该算法停止。我们可以在遗传算法工具的“Stopping criteria(停止标准)”选项中指定这些标准的值。它们的缺省值如图8.17所示。
图8.17 停止标准的缺省值
当运行遗传算法时,“Status(状态)”面板显示这些导致算法停止的标准。
“Time limit(时限)”选项与“Stall time limit”选项可以用来防止算法运行过长的时间。如果算法由于这两个条件之一而停止,则可以通过相应增加“Time limit”或“Stall time limit”的值来改善运行的结果。
8.3 使用遗传算法工具求解问题
本节首先概括使用遗传算法工具GUI的一般步骤,然后介绍如何从命令行使用遗传算法工具,最后通过例子,详细说明如何使用遗传算法工具来求解优化问题。
8.3.1 使用遗传算法GUI
在前面一章,已经介绍了使用遗传算法工具的初步知识。本节将简要归纳使用遗传算法工具GUI来求解优化问题的一般步骤,内容包括:打开遗传算法工具;在遗传算法工具中定义问题;运行遗传算法;暂停和停止运算;图形显示;创建用户图形函数;复现运行结果;设置选项参数;输入输出参数及问题;从最后种群继续运行遗传算法。 8.3.1.1 打开遗传算法工具
在MATLAB窗口中输入gatool,打开、进入遗传算法工具,初启时的界面显示如图8.18所示。
150
图8.18 遗传算法工具初启时的界面
8.3.1.2 在遗传算法工具中定义问题
在下列两个文本框中定义所要解决的问题:
(1) 适应度函数——求解的问题是求目标函数的最小值。输入一个计算适应度函数的M文件函数的句柄。
(2) 变量个数——适应度函数的独立变量个数。
注意:当运行遗传算法工具时不要用“Editor/Debugger(编辑/调试)”功能来调试目标函数的M文件,而要从命令行直接调用目标函数或把M文件输入到遗传算法函数ga。为了方便调试,可以在遗传算法工具中把问题输出到MATLAB工作窗中。
如图8.19所示,输入前面章节所介绍的Rastrigin函数或my_fun函数作为适配度函数,它们的变量个数为2。
图8.19 输入适应度函数与变量个数
8.3.1.3 运行遗传算法
151
要运行遗传算法,在“ Run solver(运行求解器)”中单击Start按纽,如图8.20所示。
图8.20 单击Start按钮
这时,在“Current generation(当前代)”文本框中显示当前代的数目,在Status and results”窗格显示“GA running”等信息,如图8.23所示。
图8.21 当前代数和状态与结果窗格
当遗传算法停止时,“Status and results”窗格显示: ? “GA terminated(GA终止)”信息。 ? 最后一代最佳个体的适应度函数值。 ? 算法停止的原因。 ? 最终点的坐标。
图8.22显示当运行例子“Rastrigin 函数”遗传算法停止时的信息。
图8.22 Rastrigin函数的遗传算法运行结果
在遗传算法工具中,当遗传算法运行时可以更改多个参数设置。所做的改变将被应用到下一代,即在下一代将按照新设置的参数运行。在下一代开始但尚未应用改变的参数之前,在“Status and results”窗格显示信息“Changes pending”。而在下一代开始且应用了改变的参数时,在“Status and results”窗格显示信息“Changes applied”。这样在遗传算法运行时更改了参数
152