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

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

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)