第五章 結論與未來展望
5.2 未來展望
以能量的觀點套用在螞蟻演算法上,讓演算法能有除了距離以外的搜 尋目標,同時藉由代入不同能量的參考條件,能使得此演算法有廣泛的延 伸性,實作演算法之所使用 javascript 的方式撰寫,網頁的方式呈現,便是 期望能更容易地被應用各種場合,而不侷限於特殊帄台、特殊編譯環境。
本論文的期望未來能夠加入更多各種不同因素,加強能量預估的精準 性,例如電池的健康條件、電池內耗因素,或針對路況因素,加入各種比 較,例如紅綠燈的時間長短、路面的帄滑程度,期望能提升預測的準確度,
以應用在未來的電動車上,除了能量最佳路徑外,為其提供電動車充電站 的路徑指引,又或者應用在多車輛派遣的規劃,達到真正智能車的目的。
參考文獻
[1] Janet Heine Barnett, Early writings on graph theory: Euler circuits and the Königsberg bridge problem, Colorado State University Pueblo, 2005.
[2] Dijkstra, E. W., A note on two problems in connexion with graphs, Numerische Mathematik, 1959.
[3] I. Chabini and S. Lan, “Adaptations of the A* algorithm for the computation of fastest paths in deterministic discrete-time dynamic networks,” IEEE Transactions on Intelligent Transportation Systems, vol. 3, no. 1, pp.60-74, Mar. 2002.
[4]張傑,
“
以改良的 A*演算法規劃較佳導引路徑之研究”,大同大學 資訊工程研究所,碩士論文,2009。[5] Eiben, Agoston E., P-E. Raue, and Zs Ruttkay., “Genetic algorithms with multi-parent recombination," Parallel Problem Solving from Nature—PPSN III, Springer Berlin Heidelberg, 1994, pp. 78-87.
[6]曹家瑞,
“
物流業配送系統之車輛指派與路徑規劃”,國立台北科技大學 生產系統工程與管理研究所,碩士論文,1999。[7] Dorigo, Marco, Vittorio Maniezzo, and Alberto Colorni, “Ant System:
Optimization by a Colony of Cooperating Agents,” IEEE Transactions On System, Man, And Cybernetics-Part B Cybernetics, vol. 26, no. 1, 1996.
[8] Flood, Merrill M., “The traveling-salesman problem,” Operations Research, 1956, pp, 61-75.
[9]江冠慶,
“
蟻拓優化演算法應用於多型態零工式生產排程問題”,國立臺 灣大學工業工程學研究所,碩士論文,2013。[10] Marco Dorigo, Senior Member, IEEE, and Luca Maria Gambardella, Member,
IEEE, “Ant Colony System: A Cooperative Learning Approach to the Traveling
Salesman Problem,” Evolutionary Computation, IEEE Transactions, vol. 1.1, pp.
53-66, 1997.
[11] Duc-Hien Nguyen and Jyh-Ching Juang, “A Refined Ant Colony algorithm for Optimal Path Planning,” Proceedings of 2011 International Conference on System Science and Engineering, China, 2011, pp. 125.
[12] E.Bonabeau, M.Dorigo, G.Theraulaz, “Swarm Intelligence: From natural to artificial systems, ” New York: Oxford University Press. 1999.
[13] B. Bullnheimer, R.F. Hartl and C. Strauss, “A new rank-based version of the ant system: A computational study, ” Central European Journal of
Operations Research and Economics 7, pp. 25-38, 1999.
[14] Zhang, Y., Wang, H., Zhang, Y., & Chen, Y., “Best-worst ant system,” In Advanced Computer Control, 2011 3rd International Conference on IEEE, pp.
392-395, 2011.
[15]林裕勝,
“
細菌演化模糊控制器及其在兩輪移動載具控制上之應用研 究”,國立臺灣師範大學應用電子科技學系,碩士論文,2013。[16]溫彥侯,
“
兩輪式自我帄衡車之控制器設計與實現”,國立臺灣師範大 學應用電子科技學系,碩士論文,2013。[17] Lee, J. W., Choy, Y. I., Sugisakaz, M., & Lee, J. J, “Study of novel heterogene- ous ant colony optimization algorithm for global path planning,” In Industrial Electronics, IEEE International Symposium, 2010, pp. 1961-1966.
[18] JI, Xiaogang, LI, Nan. “ACO-Based multiple geometric elements measure path planning for CMM,” In Computer Application and System Modeling, 2010
International Conference on IEEE, 2010, pp. V14-539-V14-544.
[19] Lee, J. W., Kim, J. J., Choi, B. S., & Lee, J. J., “Improved Ant Colony
Humanoid Robots 8th IEEE-RAS International Conference on IEEE, 2008, pp.
[24]Zehua Zhang, Xuejie Zhang, “Realization of open cloud computing federation based on mobile agent,” Intelligent Computing and Intelligent Systems IEEE Inte- rnational Conference, 2009, pp. 642-646.
[25] Kai Lei, Yining Ma, Zhi Tan, “Performance Comparison and Evaluation of Web Development Technologies in PHP, Python, and Node.js,” Computational Science and Engineering IEEE 17th International Conference, 2014.
[26] Tilkov, S., Vinoski, S., “Node.js: Using JavaScript to Build High-Performance Network Programs,” Internet Computing IEEE, 2010, pp. 80- 83.
[27] Jaramillo, D., Nguyen Van Duy, Newhook, R., “Real-time experience techniques for collaborative tools on mobile,” SOUTHEASTCON IEEE, 2014, pp. 1-6.
[28] Hausladen, J., Pohn, B., Horauer, M., “A cloud-based integrated development environment for embedded systems,” Mechatronic and Embedded Systems and Appl- ications IEEE/ASME 10th International Conference, 2014, pp. 1-5.
[29] Zhiqiang You, Huaiyu Xu, Jihui Xu, Jinfeng Xu, Dayu Shi, “Micro-Blogging
gence and Communication Networks Fourth International Conference, 2012, pp.
150-153.
[30] Hao Zhang, Manchun Li, Zhenjie Chen, Zhiliang Bao, Qiuhao Huang, Dong Cai,
“Land use information release system based on Google Maps API and XML,” Geo- informatics 18th International Conference, 2010, pp. 1-4.
.
附錄
13. ClassACO.prototype.initial=function(){
14. this.initial_pheromone_value=Math.random() 15. this.pheromones=[];
16. this.points=[];
17. }
18. ClassACO.prototype.removeElement=function (arr){
19. var what, a = arguments, L = a.length, ax;
28. ClassACO.prototype.randomTarget = function(ant){
29. var index=this.getIndOfPoint(ant.nowAt);
30. var dests=[];
31. var dest_probs=[];
32. var p_sum=0;
34. var _this = this;
35. _thisP[index].forEach(function(val,ind){
36. dests.push(val.dest);
37. });
38. ant.trail.forEach(function(text,ind){
39. _this.removeElement(dests,text);
40. });
41. if (!dests.length)return 0;
42. //console.log(ant.preAt);
43. dests.forEach(function(val,ind){
44. _thisP[index].forEach(function(v,i){
45. if(v.dest==val){
53. if(ant.preAt)energyInverse = 0.001/_this.calEnergy(ant.nowAt,v.dest,ant .preAt)
54. var property = Math.pow(v.pheromone_val,alpha)*Math.pow(energyInverse,b eta);
63. if(dest_probs[d].pheromone_val>rand)return dest_probs[d].dest;
64. } 65. }
66. ClassACO.prototype.antMove = function(ant){
67. var newDest=this.randomTarget(ant);
68. var pre = ant.trail.slice(-2)[0];
69. if(newDest==0)return 0; // went to dead road
70. else if(newDest==this.end){ // to the end
71. ant.energy+=this.calEnergy(ant.nowAt,newDest,pre);
72. ant.distance+=this.calDistance(ant.nowAt,newDest);
73. ant.trail.push(this.end);
79. ant.energy+=this.calEnergy(ant.nowAt,newDest,pre);
80. ant.distance+=this.calDistance(ant.nowAt,newDest);
81. ant.trail.push(newDest);
87. ClassACO.prototype.antsMove = function(number){
88. var Ants=[];
103. ClassACO.prototype.disPh= function(){
104. var dis_para=0.3;
105. var _this=this;
106. _this.pheromones.forEach(function(phForm , i){
107. phForm.forEach(function(phTo,j){
108. phTo.pheromone_val*=dis_para 109. })
110. }) 111. }
112. ClassACO.prototype.leavePHForAnts = function (Ants){
113. var _this = this;
114. var bestNumber = Math.floor(Ants.length*0.6) 115. var ants = Ants.slice(0,bestNumber)
116. Ants.forEach(function(ant,ind){
117. if (ant.nowAt==_this.end){
118. _this.leavePh(ant);
119. } 120. });
121. }
122. ClassACO.prototype.leavePh=function(ant){
123. var p=ant.trail.slice(0);
124. var p_ini=p.shift();
125. var p_to;
126. while (p_to=p.shift()){
127. if(this.mode>0)
128. this.addPh(p_ini,p_to,59.76*this.directDistance/(ant.energy*ant.trail.len gth));
129. else
130. this.addPh(p_ini,p_to,this.directDistance/(ant.distance*ant.trail.length) );
131. p_ini=p_to;
132. } 133. }
134. ClassACO.prototype.addPh=function(src,dest,val){
135. src=this.getIndOfPoint(src);
136. this.pheromones[src].forEach(function(v,i){
137. if(v.dest==dest){
138. v.pheromone_val=v.pheromone_val+val;
139. } 140. });
141. }
142. ClassACO.prototype.getIndOfPoint=function(v){
143. var op="";
144. this.points.forEach(function( point , key ) { 145. if(v==point.text)op=key;
146. });
147. return op;
148. }
149. ClassACO.prototype.getDistance = function( lat1, lng1, lat2, lng2){
150. var rad = function(d){
157. var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)
*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
158. s = s * 6378.137; //EARTH_RADIUS;
159. s = Math.round(s * 10000) / 10000;
160. return s;
161. }
162. ClassACO.prototype.calDistance=function(src,dest){
163. src = this.getIndOfPoint(src);
164. dest= this.getIndOfPoint(dest);
165. var length = this.getDistance(this.points[src].x,this.points[src].y,this.poin ts[dest].x,this.points[dest].y);
166. return length;
167. }
168. ClassACO.prototype.calEnergy=function(src,dest,pre){
169. var degEnergy = function(deg){
170. if(deg<(-6))return 0.3;
171. else if(deg<0)return 1-0.0194*Math.pow(-deg,2);
172. else if(deg<10)return 1+0.15*Math.pow(deg,1.7);
173. else return 9;
174. }
175. src = this.getIndOfPoint(src);
176. dest= this.getIndOfPoint(dest);
177. pre = this.getIndOfPoint(pre)
178. var dh=this.points[dest].h-this.points[src].h;
179. var length = this.getDistance(this.points[src].x,this.points[src].y,this.poin ts[dest].x,this.points[dest].y);
180. var deg=Math.atan(dh/length)*360/3.14;
181. var v2x = this.points[dest].x-this.points[src].x 182. var v2y = this.points[dest].y-this.points[src].y 183. var v1x = this.points[src].x-this.points[pre].x 184. var v1y = this.points[src].y-this.points[pre].y 185. var ACorssB = v1x *v2y - v1y* v2x
186. var left = ACorssB < 0
187. var lengthAC = this.getDistance(this.points[dest].x,this.points[dest].y,this.
points[pre].x,this.points[pre].y)
188. var lengthAB = this.getDistance(this.points[src].x,this.points[src].y,this.po ints[pre].x,this.points[pre].y)
189. var lengthBC = length
190. var theta = lengthAB*lengthAB +lengthBC*lengthBC - lengthAC*lengthAC 191. theta = theta/ (2*lengthAB*lengthBC)
192. theta = Math.acos(theta) *180/Math.PI 193. theta = 180 - theta
194. var ret = 0;
195. if(pre==src)ret+=0// // start
196. else if(theta<20)ret+=0;//0.15 // straigt 197. else ret+=(left?0.6:0.35)
198. ret = ret + 59.76*length*degEnergy(deg); //where 59.76 is the energy per met er
199. return ret 200. }
自傳
經過不斷的努力與加強,我才勉強從廣大的電子領域中,吸收到一點 皮毛,順利完成所有學業課程,期間的過程,披星戴月,過關斬將,對我 而言,有過之而無不及。所幸,有失必有所得,儘管我是"時"倍功半,但 花下大把時間後,我對電子領域的收穫,不僅僅是一個學分的 PASS 而已。
即將完成碩士的學業,踏入職場,也代表人生要將進入新的旅程,過 往二十多年求學的成果,將在此刻得到驗收,不論結果是肯定還是挫折,
我都將以最謙卑的心,配上十二萬分努力的精神,以及活到老學到老的精 神,為未來人生創造屬於自己的一片天。