导航:首页 > 源码编译 > 算法导致极端化的例子

算法导致极端化的例子

发布时间:2024-07-14 20:14:25

1. 绠楁硶鍒嗘瀽锛氩备綍鍒嗘瀽涓涓绠楁硶镄勬晥鐜囧ソ鍧忥纻

褰撴垜浠璇寸畻娉曞垎鏋愮殑镞跺欐垜浠鍦ㄨ翠粈涔堬纻锛堢嫮涔夌殑鎶链灞傞溃镄勫畾涔夛级锛
绠楁硶鍒嗘瀽鎸囩殑鏄锛 瀵圭畻娉曞湪杩愯屾椂闂村拰瀛桦偍绌洪棿杩欎袱绉嶈祫婧愮殑鍒╃敤鏁堢巼杩涜岀爷绌
鍗虫椂闂存晥鐜囧拰绌洪棿鏁堢巼銆

镞堕棿鏁堢巼鎸囩畻娉曡繍琛屾湁澶氩揩锛
绌洪棿鏁堢巼鎸囩畻娉曡繍琛屾椂闇瑕佸氩皯棰濆栫殑瀛桦偍绌洪棿銆
锛堟椂闂存晥鐜囦篃鍙镞堕棿澶嶆潅搴︼绂绌洪棿鏁堢巼涔熷彨绌洪棿澶嶆潅搴︺傦级

鍦ㄨ$畻链烘椂浠f棭链燂纴镞堕棿鍜岀┖闂磋繖涓ょ嶈祫婧愰兘鏄鍙婂叾鏄傝吹镄勚备絾缁忚繃鍗娄釜澶氢笘绾镄勫彂灞曪纴璁$畻链虹殑阃熷害鍜屽瓨鍌ㄥ归噺閮藉凡缁忔彁鍗囦简濂藉嚑涓鏁伴噺绾с
鐜板湪绌洪棿鏁堢巼宸茬粡涓嶆槸鎴戜滑鍏虫敞镄勯吨镣逛简锛屼絾镞堕棿鏁堢巼镄勯吨瑕佹у苟娌℃湁鍑忓急鍒拌繖绉嶅彲浠ュ拷鐣ョ殑绋嫔害銆

镓浠ワ纴褰撴垜浠鍒嗘瀽涓涓绠楁硶镄勭殑镞跺欙纴鎴戜滑鍙鍏虫敞瀹幂殑镞堕棿鏁堢巼

褰撴垜浠阆囧埌涓涓绠楁硶镞讹纴鎴戜滑鍙浠ョ敤杩欐牱涓涓阃氱敤镄勬濊矾铡诲垎鏋愬畠锛

棣栧厛绗涓姝ヨ冭槛杩欎釜绠楁硶镄勮緭鍏ヨ勬ā鏄浠涔堬纻鍗宠緭鍏ュ弬鏁帮纴鍐嶆崲鍙ヨ瘽璇翠篃灏辨槸寰呰В鍐崇殑闂棰樻湁澶氩ぇ锛
浠庤繖閲屽叆镓嬫槸锲犱负涓涓鏄捐屾槗瑙佺殑瑙勫緥灏辨槸锛屼笉绠′娇鐢ㄤ粈涔堢畻娉曪纴 杈揿叆瑙勬ā瓒婂ぇ锛岃繍琛屾晥鐜囱偗瀹氢细镟撮暱
杈揿叆瑙勬ā镄勭‘瀹氲佹牴鎹鍏蜂綋瑕佽В鍐崇殑瀹为檯闂棰樼殑缁呜妭𨱒ュ喅瀹氾纴鐩稿悓镄勯梾棰树笉钖岀殑缁呜妭锛岃緭鍏ヨ勬ā鏄涓崭竴镙风殑銆傛瘆濡傦细涓涓𨰾煎啓妫镆ョ殑绠楁硶锛
濡傛灉绠楁硶鍏虫敞镄勬槸鍗旷嫭镄勫瓧绗︽镆ワ纴闾d箞瀛楃︾殑鏁伴噺灏辨槸杈揿叆瑙勬ā镄勫ぇ灏忥绂
濡傛灉绠楁硶鍏虫敞镄勬槸璇岖粍鎼閰岖殑妫镆ワ纴闾d箞杩欎釜杈揿叆瑙勬ā灏辫佹瘆鍗旷嫭镄勫瓧绗︽镆ョ殑杈揿叆瑙勬ā瑕佸皬锛岃繖閲岃緭鍏ヨ勬ā灏辨槸璇岖殑鏁伴噺浜嗐

鎺ヤ笅𨱒ョ浜屾ヨ冭槛杩欎釜绠楁硶镄勮繍琛屾椂闂达纴鍗宠繖涓绠楁硶杩愯屽湴蹇鎱銆
鎴戜滑鍙浠ョ亩鍗曞湴鐢ㄨ℃椂镄勬柟娉曪纴鍗虫煇涓绠楁硶杩愯屼简澶氩皯姣绉掋
浣呜繖涓鏂瑰纺链変竴涓缂洪櫡灏辨槸鍦ㄤ笉钖岃$畻链轰笂锛岀浉钖岀畻娉旷殑杩愯屾椂闂存槸涓崭竴镙凤纴锲犱负链夌殑鐢佃剳蹇链夌殑鐢佃剳鎱銆
镓浠ユ湁娌℃湁涓绉嶅害閲忔柟娉曞彲浠ユ帓闄よ繖浜涙棤鍏冲洜绱狅纻
绛旀堟槸镶瀹氱殑锛屾垜浠鍙浠ュ叧娉ㄧ畻娉曟墽琛屼简澶氩皯姝ワ纴鍗 镎崭綔镄勮繍琛屾℃暟 銆傝屼笖涓轰简绠鍖栭梾棰樻垜浠鍙闇鍏虫敞链閲嶈佺殑镎崭綔姝ラわ纴鍗虫墍璋撶殑 锘烘湰镎崭綔 锛屽洜涓哄熀链镎崭綔宸茬粡瓒冲熷彲浠ュ喅瀹氲繖涓绠楁硶镄勫搧璐ㄣ
姣斿备竴涓绠楁硶阃氩父鏄链鍐呭眰镄勫惊鐜涓鏄链璐规椂镄勬搷浣滐纴闾f垜浠灏卞彧闇瑕佹妸瀹冨惊鐜浜嗗氩皯娆′綔涓哄熀链镎崭綔杩涜岀爷绌躲

杩欓噷闇瑕佸欢浼哥殑涓镣规槸鍦ㄥぇ瑙勬ā镄勮緭鍏ユ儏鍐典笅钥冭槛镓ц屾℃暟镄勫为暱娆℃暟銆傚洜涓洪拡瀵瑰皬瑙勬ā镄勮緭鍏ワ纴鍦ㄨ繍琛屾椂闂寸殑宸鍒涓娄笉澶鏄庢樉銆傛瘆濡傚彧瀵100涓鏁板瓧杩涜屾帓搴忥纴涓岖′綘鐢ㄤ粈涔堟帓搴忕畻娉曪纴镞堕棿鏁堢巼閮藉樊涓嶅氥傚彧链夊湪杈揿叆瑙勬ā鍙桦ぇ镄勬椂鍊欙纴绠楁硶镄勫樊寮傛墠鍙桦缑镞㈡槑鏄惧张閲嶈佷简璧锋潵銆
绠鍗曟潵璇达纴
濡傛灉涓涓绠楁硶鍦ㄨ緭鍏ヨ勬ā鍙桦ぇ镞讹纴浣呜繍琛屾椂闂村钩缂揿为暱锛岄偅涔堟垜浠灏卞彲浠ヨ村畠灏辨槸涓涓鏁堢巼楂樼殑绠楁硶锛
钥屽傛灉涓涓绠楁硶鍦ㄨ緭鍏ヨ勬ā鍙桦ぇ镞讹纴瀹幂殑杩愯屾椂闂存垚鎸囨暟绾у为暱锛岄偅灏卞彲浠ヨ磋繖涓绠楁硶镄勬晥鐜囧緢宸銆
镐昏岃█涔嫔氨鏄锛屽瑰熀链镎崭綔镄勫ぇ瑙勬ā杈揿叆𨱍呭喌涓嬬殑鍙桦寲镄勭爷绌舵墠镟村叿链夋繁杩沧剰涔夈

褰撴垜浠浜呜В浜呜緭鍏ヨ勬ā瀵圭畻娉曟椂闂存晥鐜囩殑浼氢骇鐢熷奖鍝嶏纴浣嗙畻娉旷殑镓ц屾晥鐜囧嵈涓崭粎浠呭彧鍙楄緭鍏ヨ勬ā镄勫奖鍝嶏纴镆愪簺𨱍呭喌涓嬶纴绠楁硶镄勬墽琛屾晥鐜囨洿鍙栧喅浜庤緭鍏ュ弬鏁扮殑缁呜妭銆
姣斿傦细涓涓绠鍗旷殑椤哄簭镆ユ垒镄勭畻娉曪纴鍦ㄦ暟缁勯噷镆ユ垒鏁板瓧 9锛
鍦ㄦ暟缁 l1 = [1, 2, 3, 4, 5, 6, 7, 8, 9 ] 閲屾煡镓炬暟瀛 9 鍜屽湪鐩稿悓镄勮緭鍏ヨ勬ā镄勫彟涓涓鏁扮粍 l2 = [ 9 , 1, 2, 3, 4, 5, 6, 7, 8]閲屾煡镓炬暟瀛 9锛屽湪鏁扮粍 l2 镄勬墽琛屾晥鐜囱偗瀹氭洿楂樸
涓婇溃灏忎緥瀛愪腑镄勪袱涓鏁扮粍灏变綋鐜颁简涓や釜鏋佺锛 杈揿叆链浼樻儏鍐 杈揿叆链鍧忔儏鍐
鐩稿瑰簲镄勶纴
鍦ㄨ緭鍏ユ渶浼樻儏鍐典笅镄勭畻娉曞氨鍙 链浼樻晥鐜
鍦ㄨ緭鍏ユ渶鍧忔儏鍐典笅镄勭畻娉曞氨鍙 链宸鏁堢巼
鍦ㄨ繖閲屾湁涓や釜缁忛獙镐х殑瑙勫垯锛

鍦ㄧ幇瀹炴儏鍐典笅锛岃緭鍏ユ槸钬滈殢链衡濈殑锛屾棦涓崭细鏄链浼樿緭鍏ヤ篃涓崭细鏄链鍧忚緭鍏ャ傛墍浠ヨ繖閲屽张瑕佸紩鍑轰竴涓姒傚康锛屽嵆锛 骞冲潎鏁堢巼
棣栧厛鎸囧嚭锛屾垜浠缁濅笉鑳界敤钬沧渶浼樻晥鐜団濆拰钬沧渶宸鏁堢巼钬濈殑骞冲潎鏁版眰寰 骞冲潎鏁堢巼 锛屽嵆渚挎湁镞堕棿杩欎釜骞冲潎鏁板拰鐪熸g殑 骞冲潎鏁堢巼 宸у悎鍦颁竴镊淬
姝g‘镄勬ラゆ槸锛氭垜浠瑕佸硅緭鍏ヨ勬ā n 锅氢竴浜涘亣璁俱
瀵逛簬涓婇溃镄勯‘搴忔煡镓剧畻娉旷殑渚嫔瓙锛屾爣鍑嗙殑锅囱炬湁涓や釜锛

锘轰簬杩欎袱涓锅囱炬眰骞冲潎鏁堢巼鍙寰楋细

鐢辨わ纴骞冲潎鏁堢巼 C(n) = p(n+1) / 2 + n(1-p)

鐢辨ゅ彲鐭ワ纴

浠庤繖涓渚嫔瓙鍙浠ュ彂鐜帮纴骞冲潎鏁堢巼镄勭爷绌惰佹瘆链宸鏁堢巼鍜屾渶浼樻晥鐜囩殑镰旂┒锲伴毦寰埚氾细
鎴戜滑瑕佸皢杈揿叆瑙勬ā n 鍒掑垎涓哄嚑绉岖被鍨嬶纴瀵逛簬钖岀被鍨嬬殑杈揿叆锛屼娇寰楃畻娉旷殑镓ц屾℃暟鏄鐩稿悓镄勚

绠楁硶鏄璁$畻链虹戝︾殑锘虹锛屼互钖庝细缁х画镟存柊绠楁硶鐩稿叧镄勯殢绗旓纴瀵圭畻娉曟劅鍏磋叮镄勬湅鍙嬫㈣繋鍏虫敞链鍗氩锛屼篃娆㈣繋澶у剁暀瑷璁ㄨ恒
鎴戜滑姝e勪簬澶ф暟鎹镞朵唬锛屽规暟鎹澶勭悊镒熷叴瓒g殑链嫔弸娆㈣繋镆ョ湅鍙︿竴涓绯诲垪闅忕玛锛
鍒╃敤Python杩涜屾暟鎹鍒嗘瀽 锘虹绯诲垪闅忕玛姹囨

Introction to The Design and Analysis of Algorithms, Third Edition by Anany Leitin

2. 鏋侀檺镐濇兂镄勪緥瀛愭湁鍝浜涳纻

鏋侀檺镐濇兂搴旂敤浜斾緥鍞愭案 鍒╃敤鏋侀檺镐濇兂澶勭悊镆愪簺鏁板﹂梾棰桦线寰鑳藉寲闅句负鏄撱 寮曚緥 涓や汉鍧愬湪鏂规屾梺锛岀浉缁ц疆娴佸线妗岄溃涓婂钩鏀句竴鏋氩悓镙峰ぇ灏忕殑纭甯併傚綋链钖庢岄溃涓婂彧鍓╀笅涓涓浣岖疆镞讹纴璋佹斁涓嬫渶钖庝竴鏋氾纴璋佸氨绠楄儨浜嗐傝句袱浜洪兘鏄楂樻坠锛屾槸鍏堟斁钥呰儨杩樻槸钖庢斁钥呰儨锛燂纸G路娉㈠埄浜氱О钬灭敱𨱒ュ凡涔呯殑闅鹃樷濓级 G路娉㈠埄浜氱殑绮惧阀瑙f硶鏄钬滀竴鐚滀簩璇佲濓细 鐚沧兂锛堟妸闂棰樻瀬绔鍖栵级 濡傛灉妗岄溃灏忓埌鍙鑳芥斁涓嬩竴鏋氱‖甯侊纴闾d箞鍏堟斁钥呭繀鑳溿 璇佹槑锛埚埄鐢ㄥ圭О镐э级 鐢变簬鏂规屾湁瀵圭О涓蹇冿纴鍏堟斁钥呭彲灏嗙涓鏋氱‖甯佸崰鎹妗岄溃涓蹇冿纴浠ュ悗姣忔¢兘灏嗙‖甯佹斁鍦ㄥ规柟镓鏀剧‖甯佸叧浜庢岄溃涓蹇冨圭О镄勪綅缃锛屽厛鏀捐呭繀鑳溿 浠庢尝鍒╀筜镄勭簿宸цВ娉曚腑锛屾垜浠鍙浠ョ湅鍒帮纴浠栨槸鍒╃敤鏋侀檺镄勬濇兂钥冨疗闂棰樼殑鏋佺鐘舵侊纴鎺㈢储鍑鸿В棰樻柟钖戞垨杞鍖栭斿缎銆傛瀬闄愭濇兂鏄涓绉嶉吨瑕佺殑鏁板︽濇兂锛岀伒娲诲湴鍊熷姪鏋侀檺镐濇兂锛屽彲浠ラ伩鍏嶅嶆潅杩愮畻锛屾帰绱㈣В棰樻柊镐濊矾锛岀幇涓句簲渚嬭存槑鏋侀檺镐濇兂镄勫簲鐢ㄣ 渚1 宸茬煡0<x<y<a<1锛屽垯链夛纸 锛 锛圆锛 锛圔锛 锛圕锛 锛图锛 锛02骞撮珮钥冿级鍒嗘瀽 褰 镞讹纴鐢遍樻剰 锛屾ゆ椂 锛屾晠鍙鎺挜櫎锛圆锛夈侊纸B锛夛纴褰 镞讹纴鐢遍樻剰 锛屾ゆ椂 锛屽垯 锛屾帓闄わ纸C锛夛纴鏁呴夛纸D锛 渚2 缁椤嚭涓嫔垪锲捐薄 鍏朵腑鍙鑳戒负鍑芥暟 镄勫浘璞℃槸 銆傚垎鏋 杩欓亾妯℃嫙璇曢桦缑鍒嗙巼寰堜绠锛岃稿氩︾敓锅氲繖阆挞樻椂镒熷埌镞犱粠涓嬫坠锛岄氲繃涓庨儴鍒嗗︾敓璁胯皥鐭ラ亾锛屽ぇ閮ㄥ垎瀛︾敓閮芥槸鐚沧兂缁撴灉锛岃槠铹舵湁涓浜涘︾敓𨱍冲埌姹傚嚱鏁扮殑瀵兼暟 锛屼絾浠岖劧涓岖煡濡备綍澶勭悊銆傚叾瀹烇纴杩欓亾棰樿嫢浠庢瀬闄愯掑害钥冭槛锛岄梾棰树究杩庡垉钥岃В銆傚綋 镞讹纴 镞跺浘璞℃槸涓婂崌镄勶纴鎺挜櫎鈶o纴鍐崭护a=b=c=0锛寉钬>0涓嶆槸鎭掓垚绔嬬殑锛屾帓闄も憽锛岄夆憼鈶銆 渚3 宸茬煡鏁板垪{a<sub>n</sub>}涓锛宎1=1锛屼笖瀵逛簬浠绘剰姝f暣鏁皀锛屾绘湁 锛屾槸钖﹀瓨鍦ㄥ疄鏁瘾锛宐锛岃兘浣垮缑 瀵逛簬浠绘剰姝f暣鏁皀鎭掓垚绔嬶纻鑻ュ瓨鍦锛岀粰鍑鸿瘉鏄庯绂鑻ヤ笉瀛桦湪锛岃存槑鐞嗙敱銆 鍒嗘瀽 鏋侀檺镐濇兂锛 濡傛灉杩欐牱镄 锛宐瀛桦湪镄勮瘽锛屽垯 鐢 锛 瀵 涓よ竟鍙栨瀬闄愶纴寰 锛 瑙e缑 鑻 0锛屽垯鏁板垪{ }搴旇ユ槸浠1涓洪栭”锛屼互 涓哄叕姣旂殑绛夋瘆鏁板垪銆 鍙鐭 锛 鏄剧劧锛 锛屼笉钖堥樻剰鑸嶅幓锛 鑻 锛屽皢 浠e叆 锛屽彲姹傚缑b=-3锛 姝ゆ椂 锛 钖屾牱楠岃瘉 浜﹀彲寰楀嚭鐭涚浘銆傚洜姝わ纴婊¤冻棰樻剰镄勫疄鏁 锛宐涓嶅瓨鍦ㄣ 渚4 姝d笁妫遍敟鐩搁偦涓や晶闱㈡墍鎴愮殑瑙掍负 锛屽垯 镄勫彇鍊艰寖锲存槸锛 锛 鍒嗘瀽 濡傚浘1镓绀猴纴姝d笁妫遍敟S-ABC涓锛 鏄杩囧簳闱㈡d笁瑙掑舰ABC涓蹇冧笖鍨傜洿浜庡簳闱㈢殑鍨傜嚎娈点傚綋 镞讹纴鐩搁偦涓や釜渚ч溃镄勫す瑙掕秼杩戜簬 锛屽綋 镞讹纴姝d笁妫遍敟镞犻檺鎺ヨ繎涓涓姝d笁妫辨煴锛屾樉铹剁浉闾讳袱涓渚ч溃镄勫す瑙掓棤闄愭帴杩 锛屾晠姝d笁妫遍敟鐩搁偦涓や釜渚ч溃镓鎴愯掔殑鍙栧艰寖锲翠负锛 锛夛纴鏁呴夛纸D锛夈 渚5 宸茬煡闀挎柟褰㈢殑锲涗釜椤剁偣A锛0锛0锛夈丅锛2锛0锛夈丆锛2锛1锛夊拰D锛0锛1锛夛纴涓涓璐ㄧ偣浠峣B镄勪腑镣笔0娌夸笌AB澶硅掍负 镄勬柟钖戝皠鍒痫C涓婄殑镣笔1钖庯纴渚濇″弽灏勫埌CD銆丏A鍜孉B涓婄殑镣笔2銆丳3鍜孭4锛埚叆灏勮掔瓑浜庡弽灏勮掞级锛岃剧偣P4镄勫潗镙囦负锛坸4锛0锛夛纴鑻1<x4<2锛屽垯 镄勫彇鍊艰寖锲存槸锛 锛 鍒嗘瀽 濡傚浘2锛屾樉铹跺綋P1涓筑C涓镣规椂锛屽垯P2銆丳3鍜孭4渚濇℃槸CD銆丏A鍜孉B镄勪腑镣癸纴鏁 鏄涓涓鏋侀檺鍊硷纴阃夛纸C锛夈

3. 优化算法笔记(八)人工蜂群算法

(以下描述,均不是学术用语,仅供大家快乐的阅读)
工蜂群算法(Artificial Bee Colony Algorithm,ABC)是一种模仿蜜蜂采蜜机理而产生的群智能优化算法。其原理相对复杂,但实现较为简单,在许多领域中都有研究和应用。
人工蜂群算法中,每一个蜜源的位置代表了待求问题的一个可行解。蜂群分为采蜜蜂、观察蜂和侦查蜂。采蜜蜂与蜜源对应,一个采蜜蜂对应一个蜜源。观察蜂则会根据采蜜蜂分享的蜜源相关信息选择跟随哪个采蜜蜂去相应的蜜源,同时该观察蜂将转变为侦查蜂。侦查蜂则自由的搜索新的蜜源。每一个蜜源都有开采的限制次数,当一个蜜源被采蜜多次而达到开采限制次数时,在该蜜源采蜜的采蜜蜂将转变为侦查蜂。每个侦查蜂将随机寻找一个新蜜源进行开采,并转变成为采蜜蜂。

下面是我的实现方式(我的答案):
1. 三种蜜蜂之间可以相互转化。
采蜜蜂->观察蜂:有观察蜂在采蜜过程中发现了比当前采蜜蜂更好的蜜源,则采蜜蜂放弃当前蜜源转而变成观察蜂跟随优质蜜源,同时该观察蜂转变为采蜜蜂。
采蜜蜂->观察蜂:当该采蜜蜂所发现的蜜源被开采完后,它会转变为观察蜂去跟随其他采蜜蜂。
采蜜蜂->侦查蜂:当所有的采蜜蜂发现的蜜源都被开采完后,采蜜蜂将会变为侦查蜂,观察蜂也会变成侦查蜂,因为大家都无蜜可采。
侦查蜂->采蜜蜂、观察蜂:侦查蜂随机搜索蜜源,选择较好的数个蜜源位置的蜜蜂为采蜜蜂,其他蜜蜂为观察蜂。

2.蜜源的数量上限
蜜源的数量上限等于采蜜蜂的数量上限。初始化时所有蜜蜂都是侦查蜂,在这些侦查蜂所搜索到的蜜源中选出数个较优的蜜源,发现这些蜜源的侦查蜂变为采蜜蜂,其他蜜蜂变为观察蜂。直到所有的蜜源都被开采完之前,蜜源的数量不会增加,因为这个过程中没有产生侦查蜂。所有的蜜源都被开采完后,所有的蜜蜂再次全部转化为侦查蜂,新的一轮蜜源搜索开始。也可以在一个蜜源开采完时马上产生一个新的蜜源补充,保证在整个开采过程中蜜源数量恒定不变。

蜜源的开采实际上就是观察蜂跟随采蜜蜂飞向蜜源的过程。得到的下一代的位置公式如下:

表示第i只观察蜂在第t代时随机选择第r只采蜜蜂飞行一段距离,其中R为(-1,1)的随机数。

一只观察蜂在一次迭代过程中只能选择一只采蜜蜂跟随,它需要从众多的采蜜蜂中选择一只来进行跟随。观察蜂选择的策略很简单,随机跟随一只采蜜蜂,该采蜜蜂发现的蜜源越优,则选择它的概率越大。
是不是很像轮盘赌,对,这就是轮盘赌,同时我们也可以稍作修改,比如将勤劳的小蜜蜂改为懒惰的小蜜蜂,小蜜蜂会根据蜜源的优劣和距离以及开采程度等因素综合来选择跟随哪只采蜜蜂(虽然影响不大,但聊胜于无)。
忘记了轮盘赌的小伙伴可以看一下 优化算法笔记(六)遗传算法 。
下面是我的人工蜂群算法流程图

又到了实验环节,参数实验较多,全部给出将会占用太多篇幅,仅将结果进行汇总展示。

实验1:参数如下

上图分别为采蜜蜂上限为10%总数和50%总数的情况,可以看出当采蜜蜂上限为10%总群数时,种群收敛的速度较快,但是到最后有一个点死活不动,这是因为该点作为一个蜜源,但由于适应度值太差,使用轮盘赌被选择到的概率太小从而没有得到更佳的蜜源位置,而因未开采完,采蜜蜂又不能放弃该蜜源。
看了看采蜜蜂上限为50%总群数时的图,发现也有几个点不动的状态,可以看出,这时不动的点的数量明显多于上限为10%总数的图,原因很简单,采蜜蜂太多,“先富”的人太多,而“后富”的人较少,没有带动“后富者”的“先富者”也得不到发展。
看看结果

嗯,感觉结果并没有什么差别,可能由于问题较简单,迭代次数较少,无法体现出采蜜蜂数对于结果的影响,也可能由于蜜源的搜索次数为60较大,总群一共只能对最多20*50/60=16个蜜源进行搜索。我们将最大迭代次数调大至200代再看看结果

当最大迭代次数为200时,人工蜂群算法的结果如上图,我们可以明显的看出,随着采蜜蜂上限的上升,算法结果的精度在不断的下降,这也印证了之前的结果,由于蜜源搜索次数较大(即搜索深度较深)采蜜蜂数量越多(搜索广度越多),结果的精度越低。不过影响也不算太大,下面我们再来看看蜜源最大开采次数对结果的影响。
实验2:参数如下

上图分别是蜜源开采限度为1,20和4000的实验。
当蜜源开采上限为1时,即一个蜜源只能被开采一次,即此时的人工蜂群算法只有侦查蜂随机搜索的过程,没有观察蜂跟随采蜜蜂的过程,可以看出图中的蜜蜂一直在不断的随机出现在新位置不会向某个点收敛。
当蜜源开采上限为20时,我们可以看到此时种群中的蜜蜂都会向一个点飞行。在一段时间内,有数个点一动不动,这些点可能就是采蜜蜂发现的位置不怎么好的蜜源,但是在几次迭代之后,它们仍会被观察蜂开采,从而更新位置,蜜源开采上限越高,它们停顿的代数也会越长。在所有蜜蜂都收敛于一个点之后,我们可以看到仍会不断的出现其他的随机点,这些点是侦查蜂进行随机搜索产生的新的蜜源位置,这些是人工蜂群算法跳出局部最优能力的体现。
当蜜源开采上限为4000时,即不会出现侦查蜂的搜索过程,观察蜂只会开采初始化时出现的蜜源而不会采蜜蜂不会有新的蜜源产生,可以看出在蜂群收敛后没有出现新的蜜源位置。

看看最终结果,我们发现,当蜜源开采上线大于1时的结果提升,但是好像开采上限为5时结果明显好于开采次数上限为其他的结果,而且随着开采次数不断上升,结果在不断的变差。为什么会出现这样的结果呢?原因可能还是因为问题较为简单,在5次开采的限度内,观察蜂已经能找到更好的蜜源进行开采,当问题较为复杂时,我们无法知晓开采发现新蜜源的难度,蜜源开采上限应该取一个相对较大的值。当蜜源开采限度为4000时,即一个蜜源不可能被开采完(开采次数为20(种群数)*200(迭代次数)),搜索的深度有了但是其结果反而不如开采限度为几次几十次来的好,而且这样不会有侦查蜂随机搜索的过程,失去了跳出局部最优的能力。
我们应该如何选择蜜源的最大开采次数限制呢?其实,没有最佳的开采次数限制,当适应度函数较为简单时,开采次数较小时能得到比较好的结果,但是适应度函数较复杂时,经过试验,得出的结果远差于开采次数较大时。当然,前面就说过,适应度函数是一个黑盒模型,我们无法判断问题的难易。那么我们应该选择一个适中的值,个人的选择是种群数的0.5倍到总群数的2倍作为蜜源的最大开采次数,这样可以保证极端情况下,1-2个迭代周期内小蜜蜂们能将一个蜜源开采完。

人工蜂群算法算是一个困扰我比较长时间的算法,几年时间里,我根据文献实现的人工蜂群算法都有数十种,只能说人工蜂群算法的描述太过模糊,或者说太过抽象,研究者怎么实现都说的通。但是通过实现多次之后发现虽然实现细节大不相同,但效果相差不多,所以我们可以认为人工蜂群算法的稳定性比较强,只要实现其主要思想即可,细节对于结果的影响不太大。
对于人工蜂群算法影响最大的因素还是蜜源的开采次数限制,开采次数限制越大,对同一蜜源的开发力度越大,但是分配给其他蜜源的搜索力度会相对减少,也会降低蜂群算法的跳出局部最优能力。可以动态修改蜜源的开采次数限制来实现对算法的改进,不过效果不显着。
其次对于人工蜂群算法影响是三类蜜蜂的搜索行为,我们可以重新设计蜂群的搜索方式来对算法进行改进,比如采蜜蜂在开采蜜源时是随机飞向其他蜜源,而观察蜂向所选的蜜源靠近。这样改进有一定效果但是在高维问题上效果仍不明显。
以下指标纯属个人yy,仅供参考

目录
上一篇 优化算法笔记(七)差分进化算法
下一篇 优化算法笔记(九)杜鹃搜索算法

优化算法matlab实现(八)人工蜂群算法matlab实现

4. 链変竴涓鍏锋湁涓ら亾浣滀笟镄勬壒澶勭悊绯荤粺锛屼綔涓氲皟搴﹂噰鐢ㄧ煭浣滀笟浼桦厛璋冨害绠楁硶锛岃繘绋嬭皟搴﹂噰鐢ㄤ互浼桦厛鏁颁负锘虹镄勬姠鍗犲纺

链棰树腑镄勭郴缁熸槸涓ら亾浣滀笟绯荤粺锛屽洜姝ゆ疮娆″彧鑳芥湁涓や釜浣滀笟杩涘叆绯荤粺锛屼綔涓氲皟搴﹂噰

鐢ㄧ煭浣滀笟浼桦厛绠楁硶锛屽彧链夎皟搴﹁繘鍏ョ郴缁熺殑杩涚▼鏂硅兘鍙备笌杩涚▼璋冨害锛涜繘绋嬭皟搴﹂噰鐢

锘轰簬浼桦厛鏁扮殑鎶㈠崰寮忚皟搴︾畻娉曪纴楂树紭鍏堢骇镄勮繘绋嫔彲浠ユ姠鍗犵郴缁熷勭悊链恒

链棰樼殑浣滀笟鍜岃繘绋嬬殑鎺ㄨ繘杩囩▼濡备笅锛

10锛00 A浣滀笟鍒拌揪锛岃浣滀笟璋冨害绋嫔簭璋冨害杩涘叆绯荤粺锛岃杩涚▼璋冨害绋嫔簭璋冨害寮濮嬭繍琛

10锛20 A浣滀笟杩愯20鍒嗛挓锛屽墿浣20鍒嗛挓锛岀敱浜庝紭鍏堢骇浣庯纴琚杩涚▼璋冨害绋嫔簭璋冨害澶勪簬灏辩华鐘舵

B浣滀笟鍒拌揪锛岃浣滀笟璋冨害绋嫔簭璋冨害杩涘叆绯荤粺锛岀敱浜庝紭鍏堢骇楂桡纴琚杩涚▼璋冨害绋嫔簭璋冨害澶勪簬寮濮嬭繍琛岀姸镐

10锛30 A浣滀笟绛夊緟10鍒嗛挓锛屽墿浣20鍒嗛挓锛岀户缁绛夊緟

B浣滀笟杩愯10鍒嗛挓锛屽墿浣20鍒嗛挓锛岀户缁杩愯

C浣滀笟鍒拌揪锛岀瓑寰呰浣滀笟璋冨害绋嫔簭璋冨害

10锛50 A浣滀笟绛夊緟30鍒嗛挓锛屽墿浣20鍒嗛挓锛岀敱浜庝紭鍏堢骇楂桡纴琚杩涚▼璋冨害绋嫔簭璋冨害澶勪簬寮濮嬭繍琛岀姸镐

B浣滀笟杩愯30鍒嗛挓锛屼綔涓氩畬鎴愶纴缁撴潫杩愯

C浣滀笟绛夊緟20鍒嗛挓锛岀敱浜庝及璁¤繍琛屾椂闂磋缉闀匡纴浠嶆湭琚璋冨叆绯荤粺涓杩愯

D浣滀笟鍒拌揪锛岃杩涚▼璋冨害绋嫔簭璋冨害澶勪簬灏辩华鐘舵

11锛10 A浣滀笟杩愯40鍒嗛挓锛屼綔涓氩畬鎴愶纴缁撴潫杩愯

C浣滀笟绛夊緟30鍒嗛挓锛岃浣滀笟璋冨害绋嫔簭璋冨害杩涘叆绯荤粺锛岀敱浜庝紭鍏堢骇楂桡纴琚杩涚▼璋冨害绋嫔簭璋冨害澶勪簬寮濮嬭繍琛岀姸镐

D浣滀笟绛夊緟10鍒嗛挓锛岀敱浜庝紭鍏堢骇浣庯纴琚杩涚▼璋冨害绋嫔簭璋冨害澶勪簬灏辩华鐘舵

12锛00 C浣滀笟杩愯50鍒嗛挓锛屼綔涓氩畬鎴愶纴缁撴潫杩愯

D浣滀笟绛夊緟70鍒嗛挓锛岃杩涚▼璋冨害绋嫔簭璋冨害澶勪簬寮濮嬭繍琛岀姸镐

12锛20 D浣滀笟杩愯20鍒嗛挓锛屼綔涓氩畬鎴愶纴缁撴潫杩愯

钖勪綔涓氩懆杞镞堕棿涓猴细

浣滀笟A 70锛屼綔涓欱 30锛屼綔涓欳 90锛屼綔涓欴 90銆

骞冲潎浣滀笟锻ㄨ浆镞堕棿涓70鍒嗛挓銆

鍙傝1.缃戦〉阈炬帴

2.缃戦〉阈炬帴

鐣ユ敼锷ㄣ

阅读全文

与算法导致极端化的例子相关的资料

热点内容
哪个pe有bit加密功能 浏览:106
rust服务器是用什么ip 浏览:686
java随机字符串生成 浏览:549
数码宝贝编程人物 浏览:390
php多用户建站系统 浏览:624
加密防盗地上栓价位 浏览:671
比泽尔压缩机下载 浏览:420
深圳压缩机制造公司 浏览:882
如何给u盘单独文件加密码 浏览:284
恒温机故障源码 浏览:418
如何打开管家婆服务器支持者 浏览:266
安卓手机自带浏览器有什么用 浏览:532
老板咨询阿里云还是独立服务器 浏览:814
诺基亚手机app哪里下载 浏览:520
看比赛用哪个app 浏览:976
如何评价如故app 浏览:151
建立表结构的命令 浏览:581
安卓文件为什么苹果手机打不开 浏览:84
东奥轻4可以在哪个app做题 浏览:165
金融科技加密卡 浏览:837