• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      使用動(dòng)態(tài)規(guī)劃解決旅行商問(wèn)題

      2016-05-30 23:52:40申永康
      科技與企業(yè) 2016年3期
      關(guān)鍵詞:動(dòng)態(tài)規(guī)劃算法

      【摘要】旅行商問(wèn)題是指給定一組城市和道路,求一條從指定城市出發(fā)、通過(guò)所有其它城市一次、再返回出發(fā)城市的代價(jià)最小的路徑。旅行商問(wèn)題是一個(gè)經(jīng)典的NP完全問(wèn)題,其傳統(tǒng)的求解算法為窮舉法,按所有可能的路徑計(jì)算一遍,比較所有的計(jì)算結(jié)果,選擇其中的最短路徑。

      【關(guān)鍵詞】動(dòng)態(tài)規(guī)劃;旅行商;算法

      二、動(dòng)態(tài)規(guī)劃求解策略

      動(dòng)態(tài)規(guī)劃算法通常用于求解具有某種最優(yōu)性質(zhì)的問(wèn)題。在這類(lèi)問(wèn)題中,可能會(huì)有許多可行解。每一個(gè)解都對(duì)應(yīng)于一個(gè)值,希望找到具有最優(yōu)解的那個(gè)解。一個(gè)動(dòng)態(tài)規(guī)劃算法通??砂匆韵聨讉€(gè)步驟進(jìn)行:

      (1) 找出最優(yōu)解的性質(zhì),并刻畫(huà)其結(jié)構(gòu)

      (2) 遞歸定義最優(yōu)值的求解公式

      (3) 以自底向上的方式計(jì)算最優(yōu)值

      (4) 根據(jù)計(jì)算時(shí)得到的信息,構(gòu)造一個(gè)最優(yōu)解

      三、旅行商問(wèn)題的動(dòng)態(tài)規(guī)劃實(shí)現(xiàn)算法

      用程序來(lái)模仿動(dòng)態(tài)規(guī)劃算法,最重要的是一個(gè)分段過(guò)程,它與傳統(tǒng)算法的區(qū)別是“以自底向上的方式計(jì)算出最優(yōu)值”,我們以這一條準(zhǔn)則分段。

      在第一次遍歷所有的城市流時(shí),每相鄰的兩個(gè)城市流,前三個(gè)字符相同的,我們判斷一下最后兩個(gè)字符決定的路徑長(zhǎng)度,刪除路徑較長(zhǎng)的城市流,保存路徑較短的城市流,由于刪除了一個(gè)城市流,所以我們需要從當(dāng)前的城市流重新比較一次(反映在一個(gè)循環(huán)中,就應(yīng)該是當(dāng)前的index減1)。當(dāng)然,在這個(gè)比較過(guò)程中,我們把計(jì)算出的每一個(gè)長(zhǎng)度都保存起來(lái),這樣,我就能避免很多重復(fù)計(jì)算,這也正是使用動(dòng)態(tài)規(guī)劃的益處!反映到程序當(dāng)中,這需要一個(gè)包含循環(huán)的迭代函數(shù)來(lái)描述:

      private void guihua(int temp) {

      if (list.size() == 1) {

      this.firnalRoad = list.get(0);

      this.min = this.store.get(list.get(0)) + "";

      return;

      }

      for (int i = 0; i < (list.size() - 1); i++) {

      int next = (i + 1);

      if (list.get(i).substring(0, temp

      * this.lengthOfLength).equals(list.get(next).substring(0, temp * this.lengthOfLength))) {

      double iValue = 0;

      double nextValue = 0;

      iValue = this.dArray[temp][Integer.parseInt(list.get(i).substring(temp, temp + this.lengthOfLength))] +

      store.get(list.get(i).substring((temp + 1)

      * this.lengthOfLength));

      nextValue = this.dArray[temp][Integer.parseInt(list.get(next).substring(

      temp, temp + this.lengthOfLength))] +

      store.get(list.get(next).substring((temp + 1)

      * this.lengthOfLength));

      this.store.put(list.get(i).substring(temp

      * this.lengthOfLength), iValue);

      this.store.put(list.get(next).substring(

      temp * this.lengthOfLength), nextValue);

      if (iValue >= nextValue) {

      list.remove(i);

      } else {

      list.remove(next);

      }

      i--;

      }

      }

      this.guihua(temp - 1);

      }

      4.測(cè)試實(shí)例

      (1) first為{{0, 1, 2, 3}, {3, 0, 4, 6}, {4, 2, 0, 8}, {4, 3, 9, 0}};

      運(yùn)行結(jié)果為:

      路徑是:3201

      城市順序:0->3->1->2->0

      最小值:14.0

      生成所有合法城市流用時(shí):15毫秒

      動(dòng)態(tài)規(guī)劃求解過(guò)程用時(shí):0毫秒

      (2) first為{{0,2,1,3,4}, {1,0,4,4,2}, {5,4,0,2,2}, {5,2,2,0,3}, {4,2,4,2,0}};

      運(yùn)行結(jié)果為:

      路徑是:20413

      城市順序:0->2->4->3->1->0

      最小值:8.0

      生成所有合法城市流用時(shí):62毫秒

      動(dòng)態(tài)規(guī)劃求解過(guò)程用時(shí):0毫秒

      看第2個(gè)例子,輸出城市順序是“0->2->4->3->1->0”,由于我們是從0開(kāi)始計(jì)數(shù)的,所以與上面數(shù)學(xué)計(jì)算中輸出的城市順序相同,并且最小值為8.0,也是正確的??梢杂脭?shù)學(xué)計(jì)算方法驗(yàn)證一下,以上例子的輸出都是正確的。

      四、結(jié)束語(yǔ)

      動(dòng)態(tài)規(guī)劃法是一種有著廣泛應(yīng)用的算法,它的優(yōu)越性在于省略了很多重復(fù)計(jì)算,所以在數(shù)學(xué)計(jì)算中應(yīng)用較多。但隨著城市數(shù)量的增多,動(dòng)態(tài)規(guī)劃算法求解問(wèn)題的時(shí)間還是保持很大的增長(zhǎng)率,所以動(dòng)態(tài)規(guī)劃雖然提供了一種問(wèn)題的求解辦法,但并不完美。

      作者簡(jiǎn)介

      申永康(1997),男,漢族,山東日照,高中生,山東省日照一中。

      猜你喜歡
      動(dòng)態(tài)規(guī)劃算法
      基于MapReduce的改進(jìn)Eclat算法
      Travellng thg World Full—time for Rree
      進(jìn)位加法的兩種算法
      算法初步兩點(diǎn)追蹤
      基于增強(qiáng)隨機(jī)搜索的OECI-ELM算法
      ACM—ICPC競(jìng)賽趣味學(xué)習(xí)系統(tǒng)設(shè)計(jì)
      大學(xué)生經(jīng)濟(jì)旅游優(yōu)化設(shè)計(jì)模型研究
      一種改進(jìn)的整周模糊度去相關(guān)算法
      動(dòng)態(tài)規(guī)劃最優(yōu)控制在非線性系統(tǒng)中的應(yīng)用
      動(dòng)態(tài)規(guī)劃案例教學(xué)設(shè)計(jì)
      修武县| 麦盖提县| 丰城市| 普兰县| 泗阳县| 龙海市| 资阳市| 三门县| 西畴县| 贵溪市| 南靖县| 华蓥市| 晋江市| 江源县| 通道| 平乐县| 岚皋县| 乌兰浩特市| 宁德市| 大化| 仲巴县| 驻马店市| 琼海市| 黔江区| 湟中县| 滦南县| 霍林郭勒市| 威远县| 黑龙江省| 汨罗市| 马鞍山市| 海盐县| 清新县| 新巴尔虎左旗| 达州市| 凤阳县| 达孜县| 平邑县| 皮山县| 二连浩特市| 阜城县|