产品介绍
旅行商问题(travel salesman problem,TSP)指给定一系列地点(若地点有时间窗,则为含时间窗的旅行商问题,TSPTW),求从指定点出发经过每一个地点的最短路径。本产品提供基于API形式的TSP/TSPTW问题求解服务。
欢迎留下联系方式咨询或获取免费使用权,我们将于2个工作日内与您取得联系。
单用户单日调用优化次数上限为1000次,单次优化规模上限为50个地点。如果有更大用量和规模需求,请联系我们进一步咨询与购买。
申请使用
欢迎您在下方留下咨询信息,我们将于两个工作日内与您联系

路径优化TSP/TSPTW问题API
最后更新时间:2019-07-08
协议
HTTP协议;POST请求方式;调用和返回的数据均为Json格式。
基本规范
请求地址
请联系杉数获取访问地址、令牌等信息。
公共请求参数
为保障API接口的权限及安全等要求,服务平台所有的API接口在http请求的header中均需包含如下信息:
Header参数 | 备注 | 示例 |
---|---|---|
reqTimestamp | 系统时间System.currentTimeMillis() | 1560331308386 |
key | 服务平台发给用户的key | |
keyToken | 服务平台发给用户的KeyToken | |
sign | 签名信息, 用户根据服务平台发给用户的Secret对API中的请求信息参数按规则生成签名。生成签名的规则参考下文 | |
x-access-token | 根据key+keyToken在平台上申请的令牌 | |
Content-Type | application/json | application/json |
Sign签名规则
按参数的字符串进行从小到大排序,并用“&”连接
连接后字符串的结尾拼接时间戳
最终连接后的字符串转成大写
用MD5对此字符串进行加盐加密
post参数及值按key的字符串顺序从大到小排序,如果post的json结果有多层级,只对第一层级进行排序。并按以上规则进行签名。
例如: 请求body: {"age":12,"list":[{"age":12,"name":"杉数"}],"name":"杉数","user":{"id":1,"name":"小明"}} 则签名串为: 按照第一层key进行排序,然后拼接。拼接后的待加密的明文: age=12&list=[{"name":"杉数","age":12}]&name=杉数&user={"id":1,"name":"小明"}
请求参数
参数结构/名称 | 说明 | 类型 | 必填 | 范围 | 默认值 | |
---|---|---|---|---|---|---|
params | 参数集以二级名称下为其属性 | Object | 是 | |||
isTSPTW | 是否考虑时间窗,考虑时间窗:true;不考虑时间窗:false | Boolean | 否 | true/false | false | |
isCloseLoop | 回程是否回到出发点,回到出发点:true;不回出发点:false | Boolean | 否 | true/false | false | |
mapVender | 距离矩阵提供商, 经纬度距离:euclidean | String | 否 | euclidean | euclidean | |
velocity | 平均时速单位:km/h | Double | 是 | 0-100 | ||
departureTime | 起点出发时间,格式:hhmm | String | 是 | |||
depotAddr | 起点明文地址 | String | 是 | |||
locations | 数组,以下二级名称为其数组对象中的属性 | Array<Object> | ||||
locationId | 除起点外的其他地点,地点代码不可重复,不可叫depot | String | 是 | |||
serviceTimeWindow | 地点的工作时间窗,格式:hhmm:hhmm。结束时间必须大于开始时间 | String | 否 | 0000:2400 | ||
serviceDuration | 地点的服务时长,单位:秒 | Integer | 否 | 0-100000 | 0 | |
priority | 地点优先级,1-10:优先级高到低。优化时,priority将会首先被考虑,在满足优先级的前提下,时间窗可以被打破 | Integer | 否 | 1-10 | 10 | |
locationAddr | 地点的明文地址,输入至少精确到省、市、区 | String | 是 |
参数示例: { "params": { "isTSPTW": false, "isCloseLoop": false, "mapVender": "euclidean", "velocity": 0, "departureTime": "0930", "depotAddr": "上海市杨浦区纪念路8号" }, "locations": [ { "locationId": "DD002", "serviceTimeWindow": "0000:2400", "serviceDuration": 0, "priority":10, "locationAddr": "北京市东城区歌华大厦" } ] }
请求结果说明
结果结构/名称 | 说明 | 类型 | |||
---|---|---|---|---|---|
code | 状态代码,成功为0,详见状态码说明列表 | String | |||
message | 状态描述 | String | |||
data | Object | ||||
requestId | 优化请求的唯一ID | String | |||
TSPResult | 请求结果数据 | Object | |||
startDateTime | 车次的出发时间,即输入参数中的departureTime,格式:hhmm | String | |||
endDateTime | 车次的结束时间,格式:hhmm,跨天时间输出时做格式处理 | String | |||
totalDistance | 该车次行驶的总距离, 单位:m | Integer | |||
endDateTimeDaySpan | 全部完成所需跨天数,0表示没有跨天 | Integer | |||
TSPStops | 以下为其参数,发生错误时为null | Array<Object> | |||
stopLocationId | 停靠的站点Id | String | |||
seq | 该停靠点在车次中的次序 | Integer | |||
plannedTimeOfArrival | 该停靠点的计划到达时间,格式:hhmmss,不做跨天表示处理 | String | |||
plannedTimeOfArrivalDaySpan | 该停靠点的计划时间(跨天天数),0表示没有跨天 | Integer | |||
plannedTimeOfDeparture | 该停靠点的计划离开时间,格式:hhmmss,不做跨天表示处理 | String | |||
plannedTimeOfDepartureDaySpan | 该停靠点的计划离开时间(跨天天数), 0表示没有跨天 | Integer | |||
handlingDuration | 服务时长,单位:秒 | Integer | |||
waitingDuration | 等待时长,单位:秒 | Integer | |||
distanceFromPreviousStop | 该停靠点距离前一个停靠点的行驶距离,单位:米 | Integer | |||
drivingDurationFromPreviousStop | 该停靠点距离前一个停靠点的行驶时间,单位:秒 | Integer | |||
timeWindowFulfilled | 是否满足时间窗约束 | Boolean | |||
TSPError | TSP计算错误信息 | Object | |||
params | 参数集校验结果描述 | String | |||
location | 地点列表校验结果描述 | String |
结果示例: { "code": "0", "message": "操作成功", "data": { "requestId": "20180818001001", "TSPResult": { "startDateTime": "0700", "endDateTime": "1800", "totalDistance": 98710, "endDateTimeDaySpan": 0, "TSPStops": [ { "stopLocationId": "depot", "seq": 1, "plannedTimeOfArrival": "073501", "plannedTimeOfArrivalDaySpan": 0, "plannedTimeOfDeparture": "074215", "plannedTimeOfDepartureDaySpan": 1, "handlingDuration": 300, "waitingDuration": 180, "distanceFromPreviousStop": 2556, "drivingDurationFromPreviousStop": 690, "timeWindowFulfilled": false } ] }, "TSPError": { "params": " velocity值不能为空", "location": "locationId值不能为空" } } }
状态码说明列表
状态代码 | 说明 |
---|---|
0 | 成功 |
10011000 | 签名不合法 |
11001101 | 用户公司信息失效 |
10011002 | api资源路径不存在 |
10011003 | key令牌参数为空 |
10011004 | key 令牌不合法 |
10011005 | key 令牌过期,请重新获取 |
10011006 | 时间额度已过期,请重新购买 |
10011007 | 调用次数额度已无,请重新购买 |
10011008 | 时间戳不合法 |
10011009 | key是无效的 |
110011010 | 请求超频 |
10121012 | 参数集信息错误 具体错误信息查看 TSPError.params |
10122012 | 地点列表信息错误 具体错误信息查看 TSPError.location |
10122013 | 地址解析数量超过50个限制 |