完整错误提示:Can not find executables for concorde or linkern.Please install the executables or set path manually.
问题:
在使用R语言的tspmeta包的run_solver()函数时,调用参数method='concorde'时 或者TSP包的concode_path()和concorde_help()函数时,出现的错误。
原因:
查看源代码里出现这句错误语句的地方
## path
concorde_path <- local({
.path <- NULL
function(path){
if(missing(path)) {
if(!is.null(.path)) return(.path)
else {
## find concorde and/or linkern
p <- dirname(Sys.which("concorde"))
if(p == "") p <- dirname(Sys.which("linkern"))
if(p == "") stop("Can not find executables for concorde or linkern. Please install the executables or set path manually.")
return(p)
}
} else {
if(!is.null(path)) {
path <- normalizePath(path) ### translate all special characters
ex <- c(list.files(path, pattern = "concorde",
ignore.case = TRUE),
list.files(path, pattern = "linkern",
ignore.case = TRUE))
if(length(ex) < 1)
stop(paste("no executable (concorde and/or linkern) found in",
path))
cat("found:", ex, "\n")
}
.path <<- path
invisible(.path)
}
}
})
可以看到是 Sys.which('concorde')或者Sys.which(c('concorde'))返回为空即""。
解决:
推荐使用WSL Windows内置Linux(当然,Windows下使用Cygwin也可以,ps:自从有了WSL就放弃Cygwin了,现在坐等WSL2和Terminal,Microsoft Opensource Yes)
Ubuntu下安装Concorde--最先进的精确TSP求解器网址
就是简单的wget下载,然后解压,然后./configure和make命令(详细参考Concorde README和安装指南)
mkdir -p ~/src
cd ~/src
wget http://www.math.uwaterloo.ca/tsp/concorde/downloads/codes/src/co031219.tgz
tar xf co031219.tgz
cd co031219
./configure
make
其他:Windows方法
然后,将Concorde在Linux下的环境路径指向concorde_path。
concorde_path(path = '/usr/bin/concorde')
备注:
想使用Windows下WSL的Linux环境,但同时还想在Windows下开发,那就R语言工程化实践:RStudio Server环境快速配置教程