麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

世界robocode機器人的四大運動方式分析

2019-11-18 13:12:10
字體:
來源:轉載
供稿:網友


  前言
  Robocode在短短的時間內風靡全球,全世界的robocode愛好者設計出了大量的優秀智能機器人,他們都擁有各自的運動方式,有的很輕易被擊中,有的卻很難射擊。設計一個好的運動方式是優秀robocode機器人取勝的要害。上屆世界中級組冠軍Fermat就是靠他讓敵人難以琢磨的運動躲過敵人一發發的子彈而取得勝利。(當然,他的優秀的瞄準射擊也是取勝的要害)怎樣的運動才能不被敵人擊中,讓敵人琢磨不透呢?這里我把常見的機器人運動方式分為4類來詳解。
  
  明顯有規律的主動運動
  剛開始玩robocode的很多都會有這種感覺,Samples里面Walls最強,誰都打不到他。Wall就是一種很典型的明顯有規律的主動運動,他總是直線繞墻走,如圖1:
  
 世界robocode機器人的四大運動方式分析(圖一)

  
圖1

  
  因為它幾乎總是在動,而Sample里面的機器人的射擊方法幾乎都是直接射擊敵人的當前位置,由于子彈到達目標需要一定的時間,當子彈飛過去的時候,Wall已經不在原來那個位置了,所以它們總是打不到它,因此在剛開始時它看起來是那么的強大。但是,Walls并不能算一個優秀的機器人,它僅是作為一個例子來介紹robocode機器人的制作方法,稍厲害一點的機器人都能很得心應手的射擊它,有的機器人甚至能槍槍必中的打它。他們大多運用了提前量的算法計算出子彈到達Walls的時候Walls大概走的距離,然后攻擊Walls下一步將要行走的地方。至于怎樣編碼實現,已經超出了這篇文章的范圍,你可以參考PRedictive targeting。
  
  采取這一類運動方式的機器人很多,它們規律很明顯,很輕易被把握,像SpinBot總是做圓周運動(圓周運動的射擊方法可以參見圓周瞄準),Corners總是躲在角落不動……你會發現它們都是很輕易對付的角色,是不是要寫出優秀的機器人就不能用這樣的策略呢?當然不是,在人眼看起來有規律的運動,機器人未必會認為有規律(這要取決于你的機器人的分析方法)。非凡是在群戰的時候,你要顧及大量的敵人,你不可能只關注一個敵人的運動,你要同時關注A或關注B的運動,因此即使A作了規律很明顯的運動,你也很難察覺。
  
  典型的例子就是David McCoy的PrairieWolf,你看它群戰的時候經常待在角落做一種繞角落往返運動,但是你卻未必能很輕易的射擊他,還有就是Paul Evans的SandboxLump,它不僅是在角落往返,而且還夾雜著很多的弧線運動,如圖2:
  
 世界robocode機器人的四大運動方式分析(圖二)

  
圖2

  
  即使是單挑的時候,你的機器人也很難分析出SandboxLump的具體規律,所以要擊中它并不輕易,確切地說那實在是太難了。這里我要重要介紹一種被廣泛采用的往返運動方式,如圖3:
  
 世界robocode機器人的四大運動方式分析(圖三)

  
圖3

  
  假如機器人R1在A,B之間作直線往返運動,某一時刻機器人R1和機器人R2在如圖所示位置,R1目前是直線運動。假如R1的擺幅小于R1到R2的距離,R2用直線提前量的射擊方法,射擊點在B點右邊的C點,它發射了子彈,但是R1運動到B點的時候忽然反向向A行駛,到達A后又返回向B行駛,如此反復,R2的子彈就總是打在A點偏左或者B點偏右的地方。這就是往返運動的迷惑性,哈哈,R1能迷惑敵人了,它很強了吧?不,假如R1的擺幅大于R1與R2的距離。如圖所顯假設R2在R2’的位置,它計算的射擊點C’在AB之間,這樣的話則可以擊中敵人,所以往返運動也不一定總能使敵人打偏,靠你比較近的敵人就顯得非常危險。還有優秀的機器人一般能識別往返運動的敵人,它能計算出你往返的距離,這樣你可能就被別人百發百中了。所以假如你要采用這樣的方法的話,可以添加一些其他因數,比如說弧線往返運動,往返運動隨機距離等等。
  
  隨機性很強的主動運動
  當你把握了對付Wall和SpinBot的射擊方法后,你是否又覺得Sample里面的Crazy也是個令人頭疼的家伙?你用分別用對付Corner,Walls和SpinBot的射擊方法跟他對戰,你會發現這三種方法都能打中他,但是命中率都沒有打Corner,Walls和SpinBot他們高,這里我做了個測試:分別用三種方法來對付Crazy,測試結果如下表1:
  
  子彈參數
  射擊方法             命中 未中 命中率
  對付Corner的當前位置射擊方法   5  40  %11.11
  對付Walls的直線提前量射擊方法   8  24  %25
  對付SpinBot的圓周提前量射擊方法  7  17  %29.16
  
  他雖然總是做弧線運動,但是這次弧線運動停止后又會開始另一個方向的弧線運動??赡苣憧戳薈razy的源代碼后你會懷疑,代碼里面一個類似Math.random()的語句都沒有,怎么稱這種運動是隨機性很強的運動呢?這里的隨機性是相對于你的機器人的運動分析程序的:由于他總是時而轉動,時而停止換一個方向,時而向前,時而向后,撞到墻又會改變方向。一般的機器人都難以分辨這種改變,所以通常也稱它為隨機的運動。
  
  雖然他的隨機性很強,但是用對付SpinBot的圓周提前量射擊方法也達到%29.16的好成績,顯然這樣的運動也不是很理想。更明顯的隨機運動是在代碼里加入了類似ahead(Math.random()*200),turnLeft(Math.random()*360)這樣的代碼,這樣隨機性就更強,連此機器人的作者也不知道它的下一步會采取怎樣的運動,你又如何提前預知呢?那么……這樣運動的機器人是否就打不中呢?你從對付Crazy的射擊命中率表可以看出,雖然我采取對付另一種有規律運動方式的的射擊策略來對付一種我不知道的運動方式是不合理的,但是我卻往往也能打中它,而且命中率并不低。為什么呢?我舉個例子吧,假設我采取對付Wall的直線提前量射擊方法射擊Crazy,如圖4:
  
 世界robocode機器人的四大運動方式分析(圖四)

  
圖4

  
 世界robocode機器人的四大運動方式分析(圖五)

  
圖5

  
  我認為它走的是直線,這顯然是錯誤的,但是在我離它比較近的時候,雖然射擊的是如圖的B’點而R1運動到了C點,考慮到機器人有一定的高寬度,R2也仍然能打到它。
  
  對于另外一種直線隨機距離往返運動的機器人(前面提到過的一個建議Random),你可以看圖5。你計算到假如你射擊B的話,子彈到達B點的時候敵人R1也恰好到達B點處,但是R1隨時都有可能改變方向返回,這取決于random()方法。假如剛開始ahead(Math.random()*200)中Math.random()返回一個很大的值,大到足以使R1運動到B點甚至超過B點,那么你將擊中敵人;假如這個返回值很小,使R1還沒到達B處就返回了,這樣你這發子彈就浪費了。所以說你仍然有機會擊中它,它并不是難以把握的,只是什么時候能擊中什么時候不能擊中,誰都說不清楚。
  
  對瞄準有干擾性的主動運動
  看了上面兩種運動方式的分析,也許在你心頭有這樣的想法,我先以一種很明顯的規律運動,等敵人誤認為我是那種方式運動后馬上改變為另一種規律,然后等敵人意識到現在的運動規律后我又改變為原來那種,這樣敵人是否就被我迷惑了呢?呵呵,的確,這樣是一種很不錯的方法,許多優秀的機器人的運動有不同程度的干擾迷惑性。我還是先舉個例子來說說吧。假如一個機器人一開始不動,你會采取怎樣的射擊方法呢?一般都會用對付Corner的當前位置射擊方法吧?但是當你發射子彈后,它又開始直線運動了,這時假如你的炮管冷卻度為0的話,你采取第二次射擊,你怎么辦?用對付Corner的當前位置射擊方法?你顯然打不中它,因為它在動,但是假如用對付Walls的直線提前量射擊方法的話,你能肯定它不會在下一個周期(滴答)停下?這是一種典型的對瞄準有干擾性的主動運動,優秀的機器人Wolverine就是采用了這種方法,它能探測敵人什么時候發彈,在敵人發彈的一瞬間改變運動方式如圖6:(具體請見躲避子彈)
  
世界robocode機器人的四大運動方式分析(圖六)

  
圖6

  
  這樣的運動方式通過代碼已經很難把握它的具體變化規律,因此在Wolverine剛出來的時候沒有幾個機器人能打敗Wolverine。后來優秀的機器人不斷進展,有的能計算敵人停留了多久就會動,動了多遠又會停止,雖然不能很精確,但是總能時而擊中它了。
  
  更先進的干擾運動有先小距離往返運動,然后走一段比較長的距離(比如xieming的CX1.33,文件名為cx.MinixHT_1.33);還有先往一個方向直線運動,估算敵人子彈快要擊中自己的時候改變運動方向,下一個子彈快擊中時又改變方向(如Glyn Davies的Mooserwirt2)等等。很多優秀的機器人都采用了類似的運動方式,怎樣才能不被干擾?怎樣才能識別干擾?沒有一種識別所有干擾的萬能方法,因此只能針對特定一種或某一類干擾進行處理,比如CX1.33的干擾,你可以記下它的較長運動距離平均(這里用L表示)是多少?當他運動距離超過了小距離往返運動的那個距離的時候,你就不要以為他還會掉頭回去或者就一直走下去,它應該大概在走了L距離后返回。對于眾多的運動方式,怎樣識別一個干擾又是一個難題,所以在射擊優秀的機器人時,命中率一般不會太高。
  
  怎樣讓別人不斷的被干擾成為設計一個優秀運動的重點,也是樂趣所在。當你設計的運動方式不斷的迷惑敵人的時候,你是否有種嬉笑歡快的感覺呢?。海?br />  
  依據對方發彈或者運動而采取的被動運動
  
  前面我們講到的Wolverine在敵人發彈后才開始運動,是否他也屬于這一類呢?的確,它的運動方式也應該同時屬于依據對方發彈或者運動而采取的被動運動。
  
  還有一些優秀的機器人很類似Wolverine,它們也是在敵人發彈后才開始運動,但是他們又有很多不同,假如

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩在线欧美在线 | 久久96国产精品久久久 | 久久久久久久久国产精品 | 136福利视频 | 成年人视频在线免费播放 | 国产精品毛片va一区二区三区 | 黄色片免费看网站 | 九九热精品视频在线 | 欧美日本日韩 | 国产精品久久久久一区二区 | 国产一区二区不卡视频 | 福利在线小视频 | 欧美亚洲国产日韩 | 黄色特级一级片 | 欧美成年人视频在线观看 | 国产一国产精品一级毛片 | 日本在线播放一区二区 | 激情综合在线观看 | 9999精品 | 一区二区三区在线观看视频 | 制服丝袜日日夜夜 | 特级黄色一级毛片 | 综合网天天色 | 91一区二区在线观看 | 九九热播视频 | av在线免费网 | 美国av片在线观看 | 狠狠干精品视频 | 国产chinesehd精品91 | 爱唯侦察 国产合集 亚洲 | 色99久久 | 一级做人爱c黑人影片 | 精品国产一区二区三区四区在线 | 国产精品视频在线观看免费 | 99精品视频99 | 天海翼无删减av三级在线观看 | 欧美精品国产综合久久 | 久久久久久久久久亚洲 | 日本免费aaa观看 | 最近国产中文字幕 | 182tv成人福利视频免费看 |