Как использовать TSPLIB в Matlab - PullRequest
       30

Как использовать TSPLIB в Matlab

0 голосов
/ 25 сентября 2018

Есть ли простой способ импортировать * .tsp файлы в Matlab?Мне не удалось найти существующие решения, но поскольку TSPLIB упоминается так часто, я ожидаю, что уже должно быть существующее решение.

В противном случае: было бы проще предварительно обработать данные с использованием Java(например, с регулярным выражением), или напрямую писать в Matlab?

Редактировать: вместо этого было предложено использовать файлы .xml.Тем не менее, большие экземпляры читаются очень медленно.Я предполагаю, что это также связано с тем, что файл намного больше: для pcb3038 файл .tsp составляет около 100 КБ, а файл .xml - около 500 МБ.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Самый простой способ сделать это в Matlab - это открыть xml-файлы с помощью fopen (), а затем прочитать их построчно с помощью fgetl ().В дополнение к этому я использовал regexp (), чтобы интерпретировать строки и действовать соответствующим образом.

Это позволило мне прочитать XML-файл + - 500 МБ и поместить соответствующие данные в матрицу расстояний.

0 голосов
/ 25 сентября 2018

Я не знаю, в какой структуре находятся исходные файлы данных TSPLIB, но согласно веб-сайту TSBLIB , файлы данных TSPLIB также доступны в формате XML , например:

<?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>

Вы можете импортировать файлы XML , используя xmlread, а затем анализировать их, используя пример кода , предоставленный MATLAB.Кроме того, вы можете попробовать утилиту xml2struct от FEX.Наконец, если вы предпочитаете работать с python, вы также можете использовать BeautifulSoup изнутри MATLAB, используя python API (py.bs4.BeautifulSoup(...)).

...