TSPLIBのベンチマーク問題の読み込み関数

2006/1/31更新

既存のプログラムの流用

TSPLIBにある ベンチマーク問題のファイルなど読み込みたいファイル内のデータ形式がきまっている場合は、 その形式に従って読み込むことのできる関数を作成すればいいことになります。

自分で作成するのが面倒な場合、C言語で書かれたソースはたくさん転がっているのでそれを 使ってもいいです。 Googleで検索すればいろいろなものが見つかると思いますが、例えば、 ここの glptsp.c などを利用することも可能です。 (このソフトの使用時には、 GPLの概念を理解してから使ってください。) 同時に 関連するCソース glptsp.c glplib1a.c glplib1b.c glplib2.c glplib3.c glplib4.c と ここのヘッダ glptsp.h, glplib.h をダウンロードしておく必要があります。 glptsp.cで定義されている関数、

 tsp *tsp_read_data(char *file);
を使えば、読み取りたいファイル名 file を渡せば、glptsp.hで定義されているデータ格納用の構造体 tsp が自動的に領域が確保され、ファイルの情報を格納してくれます。 たとえば、main.c として
#include < stdio.h > #include < stdlib.h > #include "glptsp.h" // 同じディレクトリィにあるヘッダファイルの参照の仕方に注意 #include "glplib.h" // 同じディレクトリィにあるヘッダファイルの参照の仕方に注意 int main(){ struct TSP *tsp; char *file="a280.tsp"; tsp=tsp_read_data(file); }
とすれば、使用することができます。2つのヘッダファイルをインクルードしていることに 注意してください。また、ここで定義された関数の実体は、上記でダウンロードしてきた *.c 内で記載されていますので、使用するには、分割コンパイルに関して理解しておく必要 があります。 一番簡単にコンパイルするには、上記ダウンロードファイルを同じディレクトリィにおいて
% gcc -o main main.c glptsp.c glplib1a.c glplib1b.c glplib2.c glplib3.c glplib4.c
とコンパイルすることです。何度もコンパイルする場合は、Makefike の使用をお勧めします。 構造体 tsp の中身については、ヘッダファイルに説明が ありますので、それを読んで下さい。