基于蟻群算法的機(jī)械臂打孔路徑規(guī)劃(附源代碼)

問(wèn)題描述

??該問(wèn)題來(lái)源于參加某知名外企的校招面試。根據(jù)面試官描述,一塊木板有數(shù)百個(gè)小孔(坐標(biāo)已知)稠通,現(xiàn)在需要通過(guò)機(jī)械臂在木板上鉆孔,要求對(duì)打孔路徑進(jìn)行規(guī)劃买猖,力求使打孔總路徑最短改橘,這對(duì)于提高機(jī)械臂打孔的生產(chǎn)效能、降低生產(chǎn)成本具有重要的意義玉控。

數(shù)學(xué)模型建立

問(wèn)題分析

??機(jī)械臂打孔生產(chǎn)效能主要取決于以下三個(gè)方面:

  1. 單個(gè)孔的鉆孔作業(yè)時(shí)間飞主,這是由生產(chǎn)工藝所決定的,不在優(yōu)化范圍內(nèi)高诺,本文假定對(duì)于同一孔型鉆孔的作業(yè)時(shí)間是相同的碌识。
  2. 打孔機(jī)在加工作業(yè)時(shí),鉆頭的行進(jìn)時(shí)間虱而。
  3. 針對(duì)不同孔型加工作業(yè)時(shí)間筏餐,刀具的轉(zhuǎn)換時(shí)間。

??在機(jī)械臂打孔生產(chǎn)效能的三個(gè)重要因素中牡拇,單孔作業(yè)時(shí)間因生產(chǎn)工藝無(wú)法優(yōu)化魁瞪,刀具切換時(shí)間因生產(chǎn)流程無(wú)法優(yōu)化穆律,所以可優(yōu)化的主要是機(jī)械臂行進(jìn)時(shí)間,這直接受到打孔路徑規(guī)劃的影響导俘,并與路徑長(zhǎng)度正相關(guān)峦耘,所以設(shè)計(jì)出合理的較短的打孔路徑,對(duì)于提高機(jī)械臂打孔的生成效能具有重要意義旅薄。
??打孔的路徑規(guī)劃問(wèn)題辅髓,可以轉(zhuǎn)換為旅行商問(wèn)題TSP(一個(gè)旅行商人要拜訪n個(gè)城市,他必須選擇所要走的路徑赋秀,路徑的限制是每個(gè)城市只能拜訪一次利朵,而且最后回到原來(lái)出發(fā)的城市)來(lái)分析求解律想。
??在實(shí)際應(yīng)用中猎莲,因?yàn)闄C(jī)械臂連續(xù)作業(yè),那么一塊木板打孔完畢后技即,機(jī)械臂是否回到起始點(diǎn)需要對(duì)TSP進(jìn)行改造著洼。

最佳規(guī)劃路徑

??采用0-1變量來(lái)確定規(guī)劃路徑上兩點(diǎn)的情況,即


??那么刀具行進(jìn)時(shí)間為

??其中而叼,n為所有的打孔數(shù)目身笤,(xi,xj)和(yi,yj) 為任意兩孔,v為刀具行進(jìn)的速度,假設(shè)兩點(diǎn)距離采用歐氏距離公式葵陵。

算法選型

??TSP問(wèn)題是非常典型的NP(Nondeterministic Polynomial)難問(wèn)題液荸,對(duì)于大規(guī)模的TSP問(wèn)題,目前沒(méi)有完美的解法脱篙,所有的智能算法只能在一定程度上近似逼近最優(yōu)結(jié)果娇钱。其中常用的算法有遺傳算法、模擬退火算法绊困、蟻群算法等文搂。
??由文獻(xiàn)可以得到,==蟻群算法適用于緩慢地精確的求解場(chǎng)合秤朗;模擬退火算法適用于快速較精確地求解煤蹭;遺傳算法適用于快速地求解,但是準(zhǔn)確度不高==取视。所以硝皂,本文在保證精確度的要求下,以蟻群算法為基礎(chǔ)作谭,探討打孔路徑規(guī)劃的問(wèn)題吧彪。
??蟻群算法(Ant Colony Algorithm,ACA)丢早,最初是由意大利學(xué)者Dorigo M.博士于1991年首次提出姨裸,其本質(zhì)是一個(gè)復(fù)雜的智能系統(tǒng)秧倾,且具有較強(qiáng)的魯棒性,優(yōu)良的分布式計(jì)算機(jī)制等優(yōu)點(diǎn)傀缩。該算法經(jīng)過(guò)十多年的發(fā)展那先,已被廣大的科學(xué)研究人員應(yīng)用于各種問(wèn)題的研究,如旅行商問(wèn)題赡艰,二次規(guī)劃問(wèn)題售淡,生產(chǎn)調(diào)度問(wèn)題等。
??針對(duì)多孔的全局路徑規(guī)劃問(wèn)題慷垮,改進(jìn)的蟻群算法可以描述為:



??信息素更新:為了避免殘留信息素過(guò)多引起殘留信息淹沒(méi)啟發(fā)信息揖闸,在每只螞蟻?zhàn)咄暌徊交蛘咄瓿蓪?duì)所有 n個(gè)任務(wù)點(diǎn)的遍歷后,要對(duì)殘留信息進(jìn)行更新處理料身。


算法設(shè)計(jì)

??結(jié)合實(shí)際應(yīng)用場(chǎng)景汤纸,本文主要在蟻群算法的基礎(chǔ)上,考慮傳統(tǒng)旅行商問(wèn)題芹血,不回起始點(diǎn)的遍歷路徑贮泞,融入高度信息的三維情形等三種情形考慮。

二維路徑計(jì)算

??考慮到機(jī)械臂的運(yùn)動(dòng)狀態(tài)幔烛,如機(jī)械臂可能任意角度的斜線啃擦,或者只可以走固定角度的路線(比如3D打印機(jī)),所以本文定義兩種計(jì)算兩點(diǎn)之間距離的方法饿悬。

  1. 曼哈頓距離:即兩點(diǎn)在南北方向上的距離加上在東西方向上的距離令蛉。
    H(n) = D * (abs(n.x – goal.x ) + abs(n.y – goal.y ) )
  2. 歐幾里得距離:
    H(n) = D * sqrt((n.x-goal.x)^2 + (n.y-goal.y)^2)

??補(bǔ)充知識(shí):曼哈頓距離,歐式距離狡恬,明式距離珠叔,切比雪夫距離區(qū)別

三維路徑計(jì)算

??為適應(yīng)應(yīng)用場(chǎng)景的復(fù)雜性,本文簡(jiǎn)單討論在凹凸不平的木板上打孔的路徑規(guī)劃問(wèn)題傲宜,木板網(wǎng)格化后每一個(gè)網(wǎng)格的高度已知且不同运杭,那么設(shè)計(jì)可以不碰撞模板的安全路徑。
??針對(duì)多個(gè)3D任務(wù)孔函卒,首先設(shè)計(jì)啟發(fā)函數(shù)辆憔,利用A*算法得到單孔與單孔之間的無(wú)碰撞最短路徑作為兩點(diǎn)之間的路徑,然后應(yīng)用蟻群算法报嵌,得到遍歷所有孔的最短無(wú)碰撞路徑虱咧。
??三維多任務(wù)孔的路徑規(guī)劃可以抽象為網(wǎng)絡(luò)最短路徑問(wèn)題,從抽象的數(shù)學(xué)觀點(diǎn)來(lái)看锚国,網(wǎng)絡(luò)實(shí)質(zhì)上是一個(gè)有權(quán)值的有向圖腕巡,它由節(jié)點(diǎn)和連接這些節(jié)點(diǎn)的弧及其方向組成。如下圖所示血筑,在復(fù)雜任務(wù)應(yīng)用場(chǎng)景下绘沉,節(jié)點(diǎn)是指起始點(diǎn)煎楣、目標(biāo)點(diǎn)和任務(wù)點(diǎn),節(jié)點(diǎn)之間的弧是指節(jié)點(diǎn)之間的路徑车伞,兩點(diǎn)之間的路徑長(zhǎng)度可以作為弧的權(quán)值择懂,因?yàn)楣?jié)點(diǎn)與節(jié)點(diǎn)之間可以互相抵達(dá),方向是雙向的另玖,所以求多任務(wù)孔間的最短路徑就是在網(wǎng)絡(luò)圖中尋求航行代價(jià)和最小的路徑困曙。

求遍歷所有節(jié)點(diǎn)的最短路徑

??根據(jù)應(yīng)用場(chǎng)景,假設(shè)對(duì)多個(gè)木板執(zhí)行一樣的打孔操作谦去,那么當(dāng)對(duì)一塊模板完成任務(wù)后不需要再返回起始點(diǎn)慷丽,可以逆著規(guī)劃航路直接打孔,回到起始點(diǎn)后可以再完成下一木板的打孔操作鳄哭,提高應(yīng)用效率要糊。這種應(yīng)用情形和TSP問(wèn)題不一樣的地方是路徑不閉環(huán),最后不需要直接回到起始點(diǎn)窃诉。
??基本蟻群算法最早是用來(lái)求網(wǎng)絡(luò)中的最短回路的杨耙,因此可以通過(guò)增加一個(gè)連接網(wǎng)絡(luò)輸入節(jié)點(diǎn)與輸出節(jié)點(diǎn)的虛邊赤套,在搜索過(guò)程中規(guī)定必須經(jīng)過(guò)虛邊飘痛,變遍歷所有節(jié)點(diǎn)的最短路徑問(wèn)題為最短回路問(wèn)題。根據(jù)蟻群算法的搜索原理容握,設(shè)虛邊的權(quán)小于或等于網(wǎng)絡(luò)所有邊權(quán)的最小值即可符合上述要求宣脉。
??本文引入出發(fā)點(diǎn)和目標(biāo)點(diǎn)間的虛邊,在搜索過(guò)程中要求必須經(jīng)過(guò)虛邊剔氏,變遍歷所有節(jié)點(diǎn)的最短路徑問(wèn)題為最短回路問(wèn)題塑猖,設(shè)虛邊的權(quán)小于或等于網(wǎng)絡(luò)所有邊權(quán)的最小值。

算法實(shí)現(xiàn)流程


可行性分析

??為客觀地驗(yàn)證多任務(wù)孔的路徑規(guī)劃系統(tǒng)的有效性谈跛,評(píng)價(jià)路徑規(guī)劃系統(tǒng)中算法的性能和優(yōu)缺點(diǎn)羊苟,本文針對(duì)路徑規(guī)劃系統(tǒng)的環(huán)境模型、兩孔之間的路徑規(guī)劃和多任務(wù)孔間的路徑規(guī)劃算法進(jìn)行驗(yàn)證感憾。
??本文主要使用Python語(yǔ)言對(duì)算法進(jìn)行快速實(shí)現(xiàn)蜡励,Python語(yǔ)言開發(fā)效率優(yōu)于C++語(yǔ)言,可以快速實(shí)現(xiàn)和驗(yàn)證算法的優(yōu)缺點(diǎn)阻桅,但是Python是解釋型語(yǔ)言凉倚,運(yùn)行效率慢。C++語(yǔ)言一般是Python運(yùn)行效率的5~10倍嫂沉,所以Python語(yǔ)言的運(yùn)行時(shí)間除以5稽寒,一般不小于C++語(yǔ)言的實(shí)現(xiàn)時(shí)間。

傳統(tǒng)旅行商問(wèn)題仿真結(jié)果


遍歷所有節(jié)點(diǎn)的最短路徑仿真結(jié)果


3維的最短路徑仿真結(jié)果



??本文提供上述仿真的源代碼趟章,因?yàn)槟壳皩?shí)現(xiàn)的代碼是一種比較理想的場(chǎng)景杏糙,和實(shí)際應(yīng)用場(chǎng)景仍有比較大的差距慎王,希望提出建議,共同完善宏侍!附github上的源代碼

下一步優(yōu)化

??在路徑規(guī)劃問(wèn)題抽象模型基礎(chǔ)上柬祠,本文利用蟻群算法求解遍歷所有任務(wù)孔的最短路徑「河螅基本蟻群算法在處理該類問(wèn)題時(shí)會(huì)出現(xiàn)收斂速度慢且容易陷入局部最優(yōu)解的缺陷,下一步可以對(duì)信息素和信息素?fù)]發(fā)系數(shù)進(jìn)行了改進(jìn),采用一種動(dòng)態(tài)自適應(yīng)調(diào)整信息素和揮發(fā)因子的蟻群算法,以求在路徑規(guī)劃方面獲得更好的效果漫蛔。
??在“改進(jìn)的智能蟻群算法在TSP問(wèn)題中的應(yīng)用”文獻(xiàn)中,動(dòng)態(tài)自適應(yīng)調(diào)整信息素和揮發(fā)因子的策略可以描述為:傳統(tǒng)蟻群算法中旧蛾,往往會(huì)出現(xiàn)信息素分布過(guò)度集中在某一條路徑莽龟,使得大多數(shù)螞蟻僅通過(guò)此一條路徑,導(dǎo)致早熟的現(xiàn)象;或者是信息素分布過(guò)度分散到各個(gè)路徑中锨天,使得螞蟻搜索最優(yōu)路徑耗時(shí)相對(duì)較長(zhǎng)而減緩收斂速度毯盈。本文采用自適應(yīng)的信息素調(diào)節(jié)機(jī)制,使得信息素分布相對(duì)均勻病袄,從而使算法跳離局部最優(yōu)解搂赋。另外,信息素?fù)]發(fā)系數(shù)直接關(guān)系到蟻群算法的全局搜索能力及其收斂速度益缠,動(dòng)態(tài)調(diào)整它具有很明顯優(yōu)勢(shì)脑奠,不僅可以加快收斂速度,而且能夠提高搜索質(zhì)量幅慌。
??在三維路徑規(guī)劃中宋欺,點(diǎn)與點(diǎn)之間的最短路徑實(shí)現(xiàn)效率相對(duì)較低,可以優(yōu)化啟發(fā)式函數(shù)胰伍,采用C++語(yǔ)言實(shí)現(xiàn)齿诞,提高運(yùn)算速度。


??寫作不易骂租,若有幫助祷杈,感謝贊賞!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渗饮,隨后出現(xiàn)的幾起案子但汞,更是在濱河造成了極大的恐慌,老刑警劉巖抽米,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件特占,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡云茸,警方通過(guò)查閱死者的電腦和手機(jī)是目,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)标捺,“玉大人懊纳,你說(shuō)我怎么就攤上這事揉抵。” “怎么了嗤疯?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵冤今,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我茂缚,道長(zhǎng)戏罢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任脚囊,我火速辦了婚禮龟糕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悔耘。我一直安慰自己讲岁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布衬以。 她就那樣靜靜地躺著缓艳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪看峻。 梳的紋絲不亂的頭發(fā)上阶淘,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音备籽,去河邊找鬼舶治。 笑死分井,一個(gè)胖子當(dāng)著我的面吹牛车猬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尺锚,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼珠闰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瘫辩?” 一聲冷哼從身側(cè)響起伏嗜,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伐厌,沒(méi)想到半個(gè)月后承绸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挣轨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年军熏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卷扮。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荡澎,死狀恐怖均践,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摩幔,我是刑警寧澤彤委,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站或衡,受9級(jí)特大地震影響焦影,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜封断,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一偷办、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澄港,春花似錦椒涯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至狱意,卻和暖如春湖苞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背详囤。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工财骨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人藏姐。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓隆箩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親羔杨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捌臊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 螞蟻幾乎沒(méi)有視力理澎,但他們卻能夠在黑暗的世界中找到食物,而且能夠找到一條從洞穴到食物的最短路徑曙寡。它們是如何做到的呢糠爬?...
    大閑人柴毛毛閱讀 5,219評(píng)論 2 9
  • 姓名:彭帥 學(xué)號(hào):17021210850 【嵌牛導(dǎo)讀】:蟻群算法(ACO)是受自然界中螞蟻搜索食物行為的啟發(fā),是一...
    重露成涓滴閱讀 38,596評(píng)論 0 8
  • 參見貪心算法——最短路徑Dijkstra算法參見動(dòng)態(tài)規(guī)劃 目錄 0.最短路徑問(wèn)題0.1 最短路徑問(wèn)題描述?0.1....
    王偵閱讀 4,812評(píng)論 1 9
  • 偏函數(shù)用法是指創(chuàng)建一個(gè)調(diào)用另外一個(gè)部分—參數(shù)或變量已經(jīng)預(yù)置的函數(shù)—的函數(shù)的用法举庶。這句話相對(duì)較為拗口执隧,下面我們以實(shí)例...
    Gaolex閱讀 693評(píng)論 0 0
  • 我耳聾了。 雖然我耳朵聾了,但我依然很清醒殴玛!一如往常非常清醒捅膘,就連半夜兩三點(diǎn)都清醒地閉不上眼。雖然有很多人把這個(gè)叫...
    桃李之言閱讀 323評(píng)論 0 1