如何在Matlab中使用TSPLIB

时间:2018-09-25 08:20:08

标签: matlab import traveling-salesman

是否有一种简单的方法可以将* .tsp文件导入Matlab?我无法找到现有的解决方案,但是由于对TSPLIB的引用过多,因此我希望已经有一个现有的解决方案。

否则: 使用Java(例如,使用正则表达式)对数据进行预处理或直接在Matlab中编写会更容易吗?

编辑: 建议使用.xml文件代替。但是,较大的实例读取非常慢。我猜想这也与文件更大有关:对于pcb3038,.tsp文件约为100kb,而.xml文件接近500 mb。

2 个答案:

答案 0 :(得分:0)

我不知道原始TSPLIB数据文件以什么结构出现,但是根据TSBLIB website,TSPLIB数据文件在XML format中也可用,例如:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<travellingSalesmanProblemInstance>

  <name>a280</name>

  <source>TSPLIB</source>

  <description>drilling problem (Ludwig)</description>

  <doublePrecision>15</doublePrecision>

  <ignoredDigits>5</ignoredDigits>

  <graph>
    <vertex>
      <edge cost="2.000000000000000e+01">1</edge>
      <edge cost="2.408318915758459e+01">2</edge>
      <edge cost="3.298484500494128e+01">3</edge>
      <edge cost="3.298484500494128e+01">4</edge>
      <edge cost="4.275511665286390e+01">5</edge>
      <edge cost="5.571355310873648e+01">6</edge>
      ...
      <edge cost="4.560701700396552e+01">275</edge>
      <edge cost="3.492849839314596e+01">276</edge>
      <edge cost="2.912043955712207e+01">277</edge>
      <edge cost="2.039607805437114e+01">278</edge>
    </vertex>
  </graph>

</travellingSalesmanProblemInstance>

您可以使用import XML files xmlread,然后使用MATLAB提供的example code解析它们。或者,您可以尝试使用FEX中的xml2struct实用程序。最后,如果您更喜欢使用python,还可以在python中使用python API(py.bs4.BeautifulSoup(...))使用BeautifulSoup

答案 1 :(得分:0)

我在Matlab中发现的最简单方法是使用fopen()打开xml文件,然后使用fgetl()逐行读取它们。 除此之外,我还使用regexp()来解释各行并采取相应的措施。

这使我可以读取+-500mb的xml文件,并将相关数据放入距离矩阵中。