天天看點

The ONE 運作

The ONE 指令行cmd 運作: ./one.bat [-b runcount] [conf-files]

  1. 不帶任何參數(./one.bat)

    使用預設配置檔案(default_settings.txt),圖形視窗運作一次

  2. 帶參數(./one.bat [-b runcount] )

    -b 表示批量運作,runcount表示運作次數,使用預設配置檔案 如果配置檔案中變量是不變的,則生成的報告檔案會複寫。

  3. 帶參數(./one.bat [-b runcount] [conf-files] ) conf-files 表示自定義配置檔案,針對相同的值設定,會覆寫預設配置檔案default_settings.txt中設定的值。結合批量運作可以一次運作得到想要的對比。

    例如可以設定Group.route為: Group.router

    =[EpidemicRouter;DirectDeliveryRouter;FirstContactRouter;SprayAndWaitRouter;ProphetRouter]

    就可以考量在其他條件不變的情況下,不同路由方法的性能差異

  4. 運作中遇到的疑問:自定義了配置檔案,想通過設定變量一次運作多個對比。 例如設定路由方法、緩存大小、網絡規模(節點個數)等。但在運作中發現,路由方法、緩存大小可以一次性設定,運作可以出正确數目的報告檔案;但網絡規模出現了問題,因為後邊設定消息産生模式時,消息産生節點牽涉到節點編号,這樣節點數目在一次運作中隻能使用一個數值,否則運作會因為找不到相應的節點而報錯。不知道自己這樣的了解是不是正确?有同樣研究的可以讨論。

    又遇到了新的問題:嘗試運作的時候設定無線緩沖區,查找資料,提供的解決方式是:因為程式中有對buffersize的初始化(一個很大的值),是以隻需要在配置檔案中将對buffersize的指派部分删除或注釋掉。但在運作時,提示找不到關于Group.bufferSize的設定,不知道原因是什麼,是以還是采用設定成一個很大值的方法更靠譜。

  5. 運作ProphetRouter遇到的問題:報錯如下

    Running simulation ‘default_scenario-ProphetRouter’ Exception in thread “main” java.lang.IllegalArgumentException: Comparison method

    violates its general contract!

    at java.util.TimSort.mergeHi(Unknown Source)

    at java.util.TimSort.mergeAt(Unknown Source)

    at java.util.TimSort.mergeForceCollapse(Unknown Source)

    at java.util.TimSort.sort(Unknown Source)

    at java.util.Arrays.sort(Unknown Source)

    at java.util.ArrayList.sort(Unknown Source)

    at java.util.Collections.sort(Unknown Source)

    at routing.ProphetRouter.tryOtherMessages(ProphetRouter.java:241)

    at routing.ProphetRouter.update(ProphetRouter.java:201)

    at core.DTNHost.update(DTNHost.java:330)

    at core.World.updateHosts(World.java:217)

    at core.World.update(World.java:186)

    at ui.DTNSimTextUI.runSim(DTNSimTextUI.java:29)

    at ui.DTNSimUI.start(DTNSimUI.java:77)

    at core.DTNSim.main(DTNSim.java:85) 去查找了一下,說是因為高版本的jdk和低版本jdk對于Comparable接口的實作不同,導緻抛出異常。提供兩種解決方法:

    1、在主函數,即main函數中加入一行代碼:System.setProperty(“java.util.Arrays.useLegacyMergeSort”, “true”);

    2、設定JVM參數-Djava.util.Arrays.useLegacyMergeSort=true來相容JDK6的代碼。

    我是通過第一種方法解決的,第二種方法不知道如何操作,感興趣的可以參考操作

    有疑問的地方:在前邊的運作中并沒有出現ProphetRouter抛異常的情況,不知道為什麼突然就出現問題了,難道這個還是機率性的?

繼續閱讀