ʹÓÃMATLABÒÅ´«Ëã·¨¹¤¾ßʵÀý£¨Ïêϸ£© ÏÂÔر¾ÎÄ

ÉèÖòúÉúµÄÊä³öÐÅÏ¢Èçͼ8.23Ëùʾ¡£

ͼ8.23 ÒÅ´«Ëã·¨ÔËÐÐʱ¸ü¸ÄÁ˲ÎÊýÉèÖÃ

8.3.1.4 ÔÝÍ£ºÍÍ£Ö¹ÔËËã

ÒÅ´«Ëã·¨µÄÔÝÍ£ºÍÍ£Ö¹ÔËÐУ¬¿ÉÒÔͨ¹ýÏÂÃæ²Ù×÷¼ÌÐøÔËÐУº

? µ¥»÷°´Å¥¡°Pause£¨ÔÝÍ££©¡±£¬Ëã·¨ÔÝÍ£ÔËÐС£¸Ã°´Å¥ÉϵÄÎÄ×Ö±äΪ¡°Resume£¨»Ö¸´£©¡±¡£µ¥»÷Õâ¸ö¡°Resume¡± °´Å¥£¬¼´»Ö¸´ÒÅ´«Ëã·¨¼ÌÐøÔËÐС£

? µ¥»÷°´Å¥¡°Stop¡±£¬Ë㷨ֹͣÔËÐС£¡°Status and results¡±´°¿ÚÏÔʾֹͣÔËÐÐʱµ±Ç°´ú×î¼ÑµãµÄÊÊÓ¦¶Èº¯ÊýÖµ¡£

×¢Ò⣺Èç¹ûµ¥»÷°´Å¥¡°Stop¡±£¬È»ºóͨ¹ýµ¥»÷°´Å¥¡°Start¡±ÔÙ´ÎÔËÐÐʱ£¬ÒÅ´«Ëã·¨½«ÒÔеÄËæ»ú³õʼÖÖȺ»òÔÚ¡°Initial population£¨³õʼÖÖȺ£©¡±Îı¾¿òÖÐרÃÅÖ¸¶¨µÄÖÖȺÔËÐС£Èç¹ûÐèÒªÔÚË㷨ֹͣºóÄÜÔٴλָ´ÔËÐУ¬Ôò¿ÉÒÔͨ¹ý½»ÌæµØµ¥»÷°´Å¥¡°Pause¡±ºÍ¡°Resume¡±À´¿ØÖÆËã·¨ÔÝÍ£»ò¼ÌÐøÔËÐС£

ÒÅ´«Ëã·¨µÄÍ£Ö¹ÔËÐг£³£ÊÇͨ¹ýÉèÖÃË㷨ֹͣ׼ÔòÀ´½øÐпØÖƵġ£Ê¹ÓÃÍ£Ö¹×¼Ôò£¬ÉèÖÃÍ£Ö¹×¼Ôò²ÎÊý£¬¿ÉÒÔ½â¾öÒÅ´«Ëã·¨ÔÚºÎʱֹͣÔËÐеĿØÖÆÎÊÌâ¡£ÕâÑù£¬Ò²¾Í²»ÓÃͨ¹ýµ¥»÷¡°Stop¡± °´Å¥À´ÈËΪµØ¿ØÖÆËã·¨ÔËÐеÄÍ£Ö¹¡£ÒÅ´«Ëã·¨ÓÐÎå¸öÍ£Ö¹×¼Ôò»òÌõ¼þ£¬ÆäÖÐÈκÎÒ»¸öÌõ¼þÂú×㣬Ëã·¨¼´Í£Ö¹ÔËÐС£ÕâЩֹͣ׼ÔòÊÇ£º

? ´úÊý¡ª¡ªËã·¨ÔËÐе½¹æ¶¨µÄ´úÊý¡£ ? ʱÏÞ¡ª¡ªËã·¨ÔËÐе½¹æ¶¨µÄʱ¼ä¡£

? ÊÊÓ¦¶ÈÏÞ¡ª¡ªµ±Ç°´úµÄ×î¼ÑÊÊÓ¦¶ÈֵСÓÚ»òµÈÓڹ涨µÄÖµ¡£ ? Í£ÖÍ´úÊý¡ª¡ªÊÊÓ¦¶Èº¯ÊýÖµÔÚÔËÐй涨µÄ´úÊýºóûÓиĽø¡£ ? Í£ÖÍʱÏÞ¡ª¡ªÊÊÓ¦¶Èº¯ÊýÖµÔÚÔËÐй涨ʱ¼äºóûÓиĽø¡£

Èç¹ûÏëʹËã·¨Ò»Ö±ÔËÐе½°´Ï°´Å¥¡°Pause¡±»ò¡°Stop¡±Ê±²ÅÍ£ÏÂÀ´£¬¿ÉÒԸıäÕâЩֹͣ׼ÔòµÄ²ÎÊýÖµ£º

? ÉèÖá°Generations£¨´úÊý£©¡±Îª Inf¡£ ? ÉèÖá°Time¡±Îª Inf¡£

? ÉèÖá°Fitness limit¡±Îª ¨CInf¡£ ? ÉèÖá°Stall generations¡±Îª Inf¡£ ? ÉèÖá°Stall time limit¡±Îª Inf¡£ ͼ8.24ÏÔʾÁËÕâЩ¸ü¸ÄºóµÄÉèÖá£

153

ͼ8.24 ¸Ä±äÍ£Ö¹×¼Ôò²ÎÊý

×¢Ò⣺ÔÚÃüÁîÐÐÖе÷ÓÃÒÅ´«Ëã·¨º¯Êýgaʱ£¬²¢²»Ê¹ÓÃÕâЩ²ÎÊýÉèÖ㬾ͺÃÏñÊDz»°´Ï ¡°Ctrl + C¡±¼ü£¬º¯Êý¾Í»áÓÀÔ¶ÔËÐжø²»»áÍ£Ö¹¡£ÆäʵÏà·´£¬¿ÉÒÔÉèÖá°Generations¡±»òÕß¡°Time¡±×öΪÏÞÖµÀ´¿ØÖÆË㷨ֹͣÔËÐС£ 8.3.1.5 ͼÐÎÏÔʾ

ͼ8.25Ϊ¡°Plots£¨»æͼ£©¡±´°¸ñ£¬¿ÉÒÔÓÃÀ´¿ØÖÆÏÔʾÒÅ´«Ëã·¨ÔËÐнá¹û±ä»¯µÄͼÐΡ£

ͼ8.25 ÔÚ»æͼ´°¸ñÑ¡ÔñÊä³öÏî

Ñ¡ÔñËùÒªÏÔʾµÄͼÐβÎÊýµÄ¸´Ñ¡¿ò¡£ÀýÈ磬Èç¹ûÑ¡Ôñ¡°Best Fitness£¨×î¼ÑÊÊÓ¦¶È£©¡±ºÍ¡°Best individual£¨×î¼Ñ¸öÌ壩¡±£¬ÔËÐÐÀý×Ó¡°Rastrigin º¯Êý¡±£¬ÆäÏÔʾÊä³öÈçͼ8.26Ëùʾ¡£

154

ͼ8.26 Rastriginº¯Êý×î¼ÑÊÊÓ¦¶ÈÓë×î¼Ñ¸öÌå

ͼ8.28Éϲ¿ÀëÉ¢µãΪÿһ´úµÄ×î¼ÑÊÊÓ¦¶ÈÖµºÍƽ¾ùÊÊÓ¦¶ÈÖµ£¬Ï²¿ÖùÐÍͼ±íʾµ±Ç°´ú×î¼ÑÊÊÓ¦¶ÈÖµ¶ÔÓ¦µÄµãµÄ×ø±ê¡£

×¢Ò⣺µ±ÒªÏëÏÔʾÁ½¸öÒÔÉϲÎÊýÏîµÄͼÐÎʱ£¬¿ÉÑ¡ÔñÏàÓ¦²ÎÊýÏîµÄ¸´Ñ¡¿ò£¬µ¥¶À´ò¿ªÒ»¸ö½Ï´óµÄͼÐδ°¿Ú¼´¿É¡£

8.3.1.6 ¾ÙÀý¡ª¡ª´´½¨Óû§»æͼº¯Êý

Èç¹û¹¤¾ßÏäÖÐûÓзûºÏÏëÒªÊä³öͼÐεĻæͼº¯Êý£¬Óû§¿ÉÒÔ±àд×Ô¼ºµÄ»æͼº¯Êý¡£ÒÅ´«Ëã·¨ÔÚÿ´ÎÔËÐÐʱµ÷ÓÃÕâ¸öº¯Êý£¬»­³öͼÐΡ£ÕâÀï¾ÙÀý˵Ã÷ÔõÑù´´½¨Ò»¸öÓû§»æͼº¯ÊýÀ´ÏÔʾ´ÓÇ°Ò»´úµ½µ±Ç°´ú×î¼ÑÊÊÓ¦¶ÈÖµµÄ±ä»¯ÇéÐΣ¬ÄÚÈÝ°üÀ¨£º´´½¨»æͼº¯Êý£¬Ê¹Óûæͼº¯Êý£¬»æͼº¯ÊýÈçºÎ×÷Óá£

£¨1£©´´½¨»æͼº¯Êý

ΪÁË´´½¨»æͼº¯Êý£¬ÔÚMATLAB±à¼­Æ÷Öи´ÖÆ¡¢Õ³ÌùÏÂÁдúÂëµ½Ò»¸öеÄMÎļþ¡£

Function state = gaplotchange(options, state, flag)

% GAPLOTCHANGE Plots the change in the best score from the % previous generation.

persistent last_best % Best score in the previous generation if (strcmp(flag,'init')) % Set up the plot

set(gca,'xlim',[1, options.Generations],'Yscale'£¬'log'); hold on;

xlabel Generation

title('Change in Best Fitness Value') end

best = min(state.Score)£» % Best score in the current generation if state.Generation == 0 % Set last_best to best¡£

155

last_best = best£» else

change = last_best - best£»% Change in best score last_best = best£»

plot(state.Generation,change,'.r')£» title(['Change in Best Fitness Value'])

end

È»ºóÔÚMATLAB ·¾¶Ï½«Æä´æΪMÎļþgaplotchange.m¡£ £¨2£©Ê¹Óûæͼº¯Êý

ΪÁËʹÓÃÓû§»æͼº¯Êý£¬ÔÚ¡±»æͼ£¨Plots£©¡±´°¸ñÖÐÑ¡Ôñ¡°Custom function£¨¶¨Öƺ¯Êý£©¡±£¬²¢ÇÒÔÚÆäÓұߵÄÎı¾¿òÖÐÊäÈ뺯ÊýÃû@gaplotchange¡£ÎªÁ˶ÔÓû§»æͼº¯ÊýÊä³öµÄ×î¼ÑÊÊÓ¦¶ÈֵͼÐνøÐбȽϣ¬ÔÚÕâÀïҲѡÔñ¡°Best Fitness¡±¡£ÏÖÔÚ£¬Èç¹ûÔËÐÐÀý×Óº¯ÊýRastrigin£¬ÏÔʾ³öÀ´µÄͼÐÎÈçͼ8.27Ëùʾ¡£

×î¼ÑÖµ 0.0021904 ƽ¾ùÖµ 0.49832 ×î¼ÑÊÊÓ¦¶ÈÖµµÄ±ä»¯

ͼ8.27 Óû§»æͼº¯ÊýÊä³öµÄRastriginº¯ÊýÔËÐнá¹û

×¢Ò⣺ÒòΪͼÖÐÏ°벿µÄy-ÖáΪ¶ÔÊý¿Ì¶È£¬ËùÒÔͼÐÎÖеÄÀëÉ¢µã½ö½öÏÔʾ´óÓÚÁãµÄµã¡£¶ÔÊý¿Ì¶ÈÄÜÏÔʾÊÊÓ¦¶Èº¯ÊýµÄ΢С±ä»¯£¬¶øÉÏÃæµÄͼÐÎÔò²»ÄÜÏÔʾ³ö΢С±ä»¯¡£

£¨3£©»æͼº¯ÊýÈçºÎ×÷ÓÃ

»æͼº¯ÊýʹÓðüº¬ÔÚÏÂÃæ½á¹¹ÌåÖеÄÐÅÏ¢£¬ËüÃÇÓÉÒÅ´«Ëã·¨´«µÝ¸ø»æͼº¯Êý×÷ΪÊäÈë²ÎÊý£º

? options£¨²ÎÊý£©¡ª µ±Ç°²ÎÊýÉèÖᣠ? state£¨×´Ì¬£©¡ª ¹ØÓÚµ±Ç°´úµÄÐÅÏ¢¡£

? flag£¨ÇúÏß±êÖ¾£©¡ª ÇúÏß±íʾΪ¶ÔÊýµÈµÄµ±Ç°×´Ì¬¡£ »æͼº¯ÊýµÄÖ÷Òª×÷ÓÿÉÒÔÃèÊöÈçÏ£º

persistent last_best

Éú³ÉÓÀ¾Ã±äÁ¿last_best ¡ª¡ª¼´Ç°Ò»´úµÄ×î¼ÑÖµ¡£ÓÀ¾Ã±äÁ¿±£´æ×ŶàÖÖͼÐκ¯Êýµ÷ÓÃÀàÐÍ¡£

156