matlab中omega,TSPLIB数据集简介与MATLAB读取

数据格式:

NAME : eil51

COMMENT : 51-city problem (Christofides/Eilon)

TYPE : TSP

DIMENSION : 51

EDGE_WEIGHT_TYPE : EUC_2D

NODE_COORD_SECTION

1 37 52

2 49 49

3 52 64

4 20 26

5 40 30

50 56 37

51 30 40

EOF

NAME就是该文件的名字。

COMMENT是对这个问题的附加说明。

TYPE描述了问题的类型,因为TSPLIB中还包含了一些其他类型的问题,但是这里我们只关注TSP类型。

DIMENSION描述了城市的数量。

EDGE_WEIGHT_TYPE 描述了两个城市间cost的类型,这里是我们最为熟悉的2D欧几里得距离。

NODE_COORD_SECTION描述了各个城市的2D欧几里得坐标。每一行按照城市编号,X坐标,Y坐标的顺序。

但是需要注意的是,EDGE_WEIGHT_TYPE并不是只有EUC_2D一种,而是有13种之多。各种类型有对应的距离计算方法,如曼哈顿距离,地理距离等,这里我就不一一列举了,论文中有详细的叙述。这里我只单独提一下出现最多的一种类型EXPLICIT,这种类型和其他的区别较大,城市间的距离是显式给出的,无需再计算。

MATLAB读取代码:

MATLAB

function [n_citys,city_position] = Read(filename)

fid = fopen(filename,'rt');

location=[];

A = [1 2];

tline = fgetl(fid);

while ischar(tline)

if(strcmp(tline,'NODE_COORD_SECTION'))

while ~isempty(A)

A=fscanf(fid,'%f',[3,1]);

if isempty(A)

break;

end

location=[location;A(2:3)'];

end

end

tline = fgetl(fid);

if strcmp(tline,'EOF')

break;

end

end

[m,n]=size(location);

n_citys = m;

city_position=location;

fclose(fid);

end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

function[n_citys,city_position]=Read(filename)

fid=fopen(filename,'rt');

location=[];

A=[12];

tline=fgetl(fid);

whileischar(tline)

if(strcmp(tline,'NODE_COORD_SECTION'))

while~isempty(A)

A=fscanf(fid,'%f',[3,1]);

ifisempty(A)

break;

end

location=[location;A(2:3)'];

end

end

tline = fgetl(fid);

if strcmp(tline,'EOF')

break;

end

end

[m,n]=size(location);

n_citys=m;

city_position=location;

fclose(fid);

end

相关文章:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值