8.3.2.3 ʹÓÃÒÅ´«Ëã·¨¹¤¾ßµÄ²ÎÊýºÍÎÊÌâ½á¹¹
ÀûÓú¯Êýgaoptimset´´½¨Ò»¸ö²ÎÊý½á¹¹Ì壬ÔÚÒÅ´«Ëã·¨¹¤¾ßÖÐÉèÖòÎÊýµÄÖµ£¬È»ºóÔÚMATLAB¹¤×÷´°ÖÐÊä³ö²ÎÊý¸ø½á¹¹Ìå¡£Èç¹ûÏëÔÚÒÅ´«Ëã·¨¹¤¾ßÖÐÊä³öȱʡֵ£¬Ôòµ¼³öµÄ½á¹¹ÌåµÄ²ÎÊýÓëÓÉÃüÁîÐеõ½µÄȱʡ½á¹¹ÌåµÄ²ÎÊýÒ»Ö¡£
options = gaoptimset
Èç¹ûÏë´ÓÒÅ´«Ëã·¨¹¤¾ßÊä³öÒ»¸öÎÊÌâ½á¹¹Ìåga_problem£¬¿ÉÓÃÏÂÃæµÄÓï¾äµ÷Óú¯Êýga
[x fval] = ga(ga_problem)
ÎÊÌâ½á¹¹Ìå°üº¬£º
? fitnessfcn ¡ª ÊÊÓ¦¶Èº¯Êý¡£ ? nvars ¡ª ÎÊÌâµÄ±äÁ¿Êý¡£ ? options ¡ª ²ÎÊý½á¹¹Ìå¡£ 8.3.2.4 ¸´ÏÖÔËÐнá¹û
ÒòΪÒÅ´«Ëã·¨ÊÇËæ»úÐÔ·½·¨£¬Ò²¾ÍÊÇ˵£¬²úÉúËæ»ú»úÂÊ£¬¼´Ã¿´ÎÔËÐÐÒÅ´«Ëã·¨µÃµ½µÄ½á¹û¶¼»áÂÔÓв»Í¬¡£Ëã·¨ÀûÓÃMATLABËæ»úÊý²úÉúÆ÷º¯ÊýrandºÍrandn£¬ÔÚÿһ´Îµü´úÖУ¬²úÉúËæ»ú»úÂÊ¡£Ã¿Ò»´Îº¯Êýgaµ÷ÓÃrandºÍrandn£¬ËüÃǵÄ״̬¶¼¿ÉÄÜ·¢Éú¸Ä±ä£¬ÒÔ±ãÏÂÒ»´ÎÔÙ±»µ÷ÓÃʱ£¬ËüÃÇ·µ»Ø²»Í¬µÄËæ»úÊý¡£Õâ¾ÍÊÇΪʲôÿ´ÎÔËÐкógaÊä³öµÄ½á¹û»áÂÔÓв»Í¬¡£
Èç¹ûÐèҪ׼ȷ¸´ÏÖÔËÐнá¹û£¬¿ÉÒÔÔÚµ÷Óú¯Êýgaʱ°üº¬randºÍrandnµÄµ±Ç°×´Ì¬¡£ÔÚÓÖÒ»´ÎÔËÐÐga֮ǰ£¬ÖØÐÂÉèÖÃÕâЩֵµÄ״̬¡£ÀýÈ磬Ҫ¸´ÏÖRastriginº¯ÊýµÄgaµÄÊä³ö£¬¿ÉÒÔÀûÓÃÏÂÃæµÄÓï¾äµ÷ÓÃga
[x fval reason output] = ga(@rastriginsfcn,2)£»
¼ÙÉèij´ÎÔËÐеķµ»Ø½á¹ûΪ
x =
0.0027 -0.0052 fval =
0.0068
ÔòËæ»úº¯ÊýrandºÍrandnÁ½ÕßµÄ״̬±»±£´æÔÚoutput½á¹¹ÖС£
output =
randstate£º [35x1 double] randnstate£º [2x1 double] generations£º 100 funccount£º 2000
message£º [1x64 char]
È»ºó£¬ÖØÐÂÉèÖÃ״̬£¬ÊäÈë
rand('state',output.randstate)£» randn('state',output.randnstate)£»
Èç¹ûÏÖÔÚÔÙ´ÎÔËÐÐga£¬¾Í»áµÃµ½ÏàͬµÄ½á¹û¡£
×¢Ò⣺Èç¹ûûÓбØÒª¸´ÏÖÔËÐнá¹û£¬×îºÃ²»ÒªÉèÖÃrandºÍrandnµÄ״̬£¬ÒÔ±ãÄܹ»µÃµ½ÒÅ´«Ëã·¨Ëæ»úËÑË÷µÄÒæ´¦¡£
8.3.2.5 ÒÔǰһ´ÎÔËÐеÄ×îºóÖÖÈºÖØÐµ÷Óú¯Êýga
ȱʡÇé¿öÏ£¬Ã¿´ÎÔËÐÐgaʱ¶¼Éú³ÉÒ»¸ö³õʼÖÖȺ¡£È»¶ø£¬¿ÉÒÔ½«Ç°Ò»´ÎÔËÐеõ½µÄ×îºóÖÖȺ×÷ΪÏÂÒ»´ÎÔËÐеijõʼÖÖȺ£¬ÕâÑù×öÄܹ»µÃµ½¸üºÃµÄ½á¹û¡£Õâ¿ÉÒÔÀûÓÃÏÂÃæÓï¾äʵÏÖ£º
[x,fval,reason,output,final_pop] = ga(@fitnessfcn,nvars)£»
×îºóÒ»¸öÊä³ö±äÁ¿final_pop·µ»ØµÄ¾ÍÊDZ¾´ÎÔËÐеõ½µÄ×îºóÖÖȺ¡£½«final_popÔÙ×÷Ϊ³õʼÖÖȺÔËÐÐga£¬Óï¾äΪ£º
165
options = gaoptimset('InitialPop',final_pop)£»
[x,fval,reason,output,final_pop2] = ga(@fitnessfcn,nvars)£»
»¹¿ÉÒÔ½«µÚ¶þ´ÎÔËÐÐgaµÃµ½µÄ×îºóÖÖȺfinal_pop2×÷ΪµÚÈý´ÎÔËÐÐgaµÄ³õʼÖÖȺ¡£ 8.3.2.6 ´ÓMÎļþÔËÐÐga
ÀûÓÃÃüÁîÐпÉÒÔÔËÐÐÒÅ´«Ëã·¨¡£Ê¹ÓÃMÎļþ¿ÉÒÔÓв»Í¬µÄ²ÎÊýÉèÖá£ÀýÈ磬¿ÉÒÔÉèÖò»Í¬µÄ½»²æ¸ÅÂÊÀ´ÔËÐÐÒÅ´«Ëã·¨£¬¹Û²ì¡¢±È½Ïÿ´ÎÔËÐеĽá¹û¡£ÏÂÃæµÄ´úÂëÊÇÔËÐÐgaº¯Êý21´Î£¬±äÁ¿options.CrossoverFraction´Ó0µ½1£¬¼ä¸ôΪ0.05£¬Ëù¼Ç¼µÄÔËÐнá¹û¡£
options = gaoptimset('Generations',300)£»
rand('state',71)£» % These two commands are only included to randn('state',59)£» % make the results reproducible. record=[ ]£» for n=0 : .05 : 1
options = gaoptimset(options,'CrossoverFraction',n)£» [x fval]=ga(@rastriginsfcn,10,options)£» record = [record£»fval]£» end
¿ÉÒÔÀûÓÃÏÂÁÐÓï¾ä£¬ÒÔ²»Í¬¸ÅÂÊ»³öfvalÖµµÄÇúÏßͼÐΣº
plot(0 : .05 : 1,record)£»
xlabel('Crossover Fraction')£» ylabel('fval')
ÏÔʾ½á¹û²Î¼ûͼ8.34Ëùʾ¡£
ͼ8.34 ´ÓMÎļþÔËÐÐÒÅ´«Ë㷨ʱfvalÖµµÄÇúÏßͼÐÎ
´ÓͼÐÎÏÔʾ¿ÉÒÔ¿´³ö£¬options.CrossoverFractionµÄֵΪ0.6~ 0.95ʱ£¬¿ÉµÃµ½×îºÃ½á¹û¡£ ȡÿ´ÎÔËÐеõ½µÄfvalµÄƽ¾ùÖµ£¬¾Í¿ÉÒÔ»³öfvalµÄ¹â»¬ÇúÏߣ¬Èçͼ8.35Ëùʾ¡£
166
ͼ8.35 ´ÓMÎļþÔËÐÐÒÅ´«Ë㷨ʱfvalƽ¾ùÖµµÄÇúÏßͼÐÎ
ÇúÏß×î°¼µÄ²¿·Ö¶ÔÓ¦options.CrossoverFractionµÄֵΪ0.7~ 0.9¡£
8.3.3 ÒÅ´«Ëã·¨¾ÙÀý
ΪÁ˵õ½ÒÅ´«Ëã·¨µÄ×îºÃ½á¹û£¬Ò»°ãÐèÒªÒÔ²»Í¬µÄ²ÎÊýʵÑ顣ͨ¹ý²»¶ÏʵÑ飬ѡÔñÕë¶ÔÎÊÌâµÄ×î¼Ñ²ÎÊý¡£ÓÐЧ²ÎÊýµÄÍêÕûÃèÊö¿É²Î¼û ¡°8.4.1 ÒÅ´«Ëã·¨²ÎÊý¡±Ò»½Ú¡£
±¾½Ú½éÉܼ¸ÖÖÄܹ»Ìá¸ßÔËËãЧ¹ûµÄ²ÎÊý¸Ä±ä·½·¨£¬ÄÚÈݰüÀ¨£ºÖÖȺ¶àÑùÐÔ£»ÊÊÓ¦¶È²âÁ¿£»Ñ¡Ôñ£»¸´ÖƲÎÊý£»±äÒìÓë½»²æ£»ÉèÖñäÒì´óС£»ÉèÖý»²æ¸ÅÂÊ£»Ïà¶ÔÓÚÈ«¾ÖµÄ¾Ö²¿×îСֵ£»Ê¹ÓûìºÏº¯Êý£»ÉèÖÃ×î´ó´úÊý£»ÏòÁ¿»¯ÊÊÓ¦¶Èº¯Êý¡£ 8.3.3.1 ÖÖȺµÄ¶àÑùÐÔ
¾ö¶¨ÒÅ´«Ëã·¨µÄÒ»¸öÖØÒªÐÔÄÜÊÇÖÖȺµÄ¶àÑùÐÔ¡£¸öÌåÖ®¼äµÄ¾àÀëÔ½´ó£¬Ôò¶àÑùÐÔÔ½¸ß£»·´Ö®£¬¸öÌåÖ®¼äµÄ¾àÀëԽС£¬Ôò¶àÑùÐÔÔ½µÍ¡£ÓÉÊÔÑéµÃµ½ÖÖȺµÄÊʵ±¶àÑùÐÔ¡£Èç¹û¶àÑùÐÔ¹ý¸ß»òÕß¹ýµÍ£¬ÒÅ´«Ëã·¨¶¼¿ÉÄÜÔËÐв»ºÃ¡£ÕâÀï½éÉÜÈçºÎÉèÖÃÖÖȺµÄ³õʼ·¶Î§À´¿ØÖÆÖÖȺµÄ¶àÑùÐÔ£¬²¢½éÉÜÈçºÎÉèÖÃÖÖȺ³ß¶È¡£
? ¾ÙÀý¡ª¡ªÉèÖóõʼ·¶Î§
ÒÅ´«Ëã·¨¹¤¾ßÔÚĬÈÏÇé¿öÏÂÀûÓÃÉú³Éº¯ÊýËæ»úÉú³ÉÒ»¸ö³õʼÖÖȺ¡£Ê¹ÓÃÕß¿ÉÒÔÔÚ¡°Population¡±µÄ¡°Initial range¡±Îı¾¿òÖÐÖ¸¶¨³õʼÖÖȺµÄÏòÁ¿·¶Î§¡£
×¢Ò⣺³õʼ·¶Î§½ö½öÏÞÖÆÔÚ³õʼÖÖȺÖеĵãµÄ·¶Î§¡£ºóÐø¸÷´ú°üº¬µÄµã¿ÉÒÔ²»ÔÚ³õʼÖÖȺµÄ·¶Î§Ö®ÄÚ¡£
Èç¹ûÖªµÀÎÊÌâ½âµÄ´ó¸Å·¶Î§£¬¼ÆËãʱ¾Í¿ÉÒÔÖ¸¶¨°üº¬ÎÊÌâ½âµÄ³õʼ·¶Î§¡£µ«ÊÇ£¬¼ÙÉèÖÖȺ¾ßÓÐ×ã¹»µÄ¶àÑùÐÔ£¬ÒÅ´«Ëã·¨¾Í¿ÉÒÔÕÒµ½²»ÔÚ³õʼ·¶Î§µÄ½â¡£ÏÂÃæµÄÀý×ÓÏÔʾ³õʼ·¶Î§¶ÔÒÅ´«Ëã·¨ÐÔÄܵÄÓ°Ïì¡£Õâ¸öÀý×ÓÀûÓÃRastriginº¯Êý£¬º¯ÊýÔÚÔµãÈ¡µÃ×îСֵΪ0¡£ÔËÐÐ֮ǰÔÚÒÅ´«Ëã·¨¹¤¾ßÖÐÉèÖÃÏÂÁвÎÊý£º
? ÉèÖÃÊÊÓ¦¶Èº¯ÊýΪ @Rastriginsfcn¡£
167
? ÉèÖá°Number of variables¡±Îª 2¡£
? ÔÚ¡°Plots¡±´°¸ñÑ¡Ôñ¡°Best fitness£¨×î¼ÑÊÊÓ¦¶È£©¡±¡£ ? ÔÚ¡°Plots¡±´°¸ñÑ¡Ôñ¡°Range¡±¡£ ? ÉèÖá°Initial range¡±Îª [1£»1.1]¡£
È»ºó£¬µ¥»÷Start°´Å¥¡£ÒÅ´«Ëã·¨·µ»Ø×î¼ÑÊÊÓ¦¶ÈֵΪ2£¬ÆäÏÔʾͼÐÎÈçͼ8.36Ëùʾ¡£
ͼ8.36 ³õʼ·¶Î§Îª[1; 1.1]ʱ×î¼ÑÊÊÓ¦¶ÈÖµºÍƽ¾ù¾àÀë
ͼ8.38ÉÏÃæÎªÃ¿´ú×î¼ÑÊÊÓ¦¶ÈÖµ±ä»¯Í¼£¬ÏÂÃæÎªÃ¿´ú¸öÌåÖ®¼äƽ¾ù¾àÀëͼ£¬Ëü¿ÉÒԺܺõØÓÃÀ´ºâÁ¿ÖÖȺµÄ¶àÑùÐÔ¡£¶ÔÓÚ³õʼ·¶Î§µÄÉèÖã¬ÓÉÓÚ¶àÑùÐÔ̫С£¬Ëã·¨½øÕ¹ºÜС¡£
µÚ¶þ´Î£¬³¢ÊÔÉèÖá°Initial range¡±Îª [1; 100] £¬ÔËÐÐËã·¨£¬µÃµ½×î¼ÑÊÊÓ¦¶ÈÖµ´óԼΪ3.9£¬Èçͼͼ8.37Ëùʾ¡£
168