inst/doc/TSP.R

### R code from vignette source 'TSP.Rnw'

###################################################
### code chunk number 1: TSP.Rnw:81-84
###################################################
options(width = 75, useFancyQuotes=FALSE, prompt="R> ")
### for sampling
set.seed(1234)


###################################################
### code chunk number 2: TSP.Rnw:645-648
###################################################
library("TSP")
data("USCA50")
USCA50


###################################################
### code chunk number 3: TSP.Rnw:661-662
###################################################
set.seed(1234)


###################################################
### code chunk number 4: dotchart_USCA50
###################################################
methods <- c("nearest_insertion", "farthest_insertion", "cheapest_insertion",
    "arbitrary_insertion", "nn", "repetitive_nn", "two_opt")

tours <- sapply(methods, FUN = function(m) solve_TSP(USCA50, method = m),
                simplify = FALSE)
## tours$concorde  <- solve_TSP(tsp, method = "concorde")

tours[[1]]

dotchart(sort(c(sapply(tours, tour_length), optimal = 14497)),
xlab = "tour length", xlim = c(0, 20000))


###################################################
### code chunk number 5: TSP.Rnw:703-704
###################################################
set.seed(1234)


###################################################
### code chunk number 6: TSP.Rnw:707-711
###################################################
library("TSP")
data("USCA312")
tsp <- insert_dummy(USCA312, label = "cut")
tsp


###################################################
### code chunk number 7: TSP.Rnw:717-719
###################################################
tour <- solve_TSP(tsp, method="farthest_insertion")
tour


###################################################
### code chunk number 8: TSP.Rnw:728-731
###################################################
path <- cut_tour(tour, "cut")
head(labels(path))
tail(labels(path))


###################################################
### code chunk number 9: map1
###################################################
if(require(maps)) {
  library("maps")

  data("USCA312_GPS")

  plot_path <- function(path) {
    plot((USCA312_GPS[, c("long", "lat")]), cex = .3, col = "red")
    map("world", col = "gray", add = TRUE)
    lines(USCA312_GPS[, c("long", "lat")][path,], col = "black")
    points(USCA312_GPS[c(head(path, 1), tail(path, 1)),  c("long", "lat")], pch = 19, col = "black")
  }

  plot_path(path)

} else {
    plot(NA, xlim= c(0,1), ylim = c(0,1))
    text(.5, .5, "Suggested packages not available")
}


###################################################
### code chunk number 10: TSP.Rnw:792-793
###################################################
set.seed(1234)


###################################################
### code chunk number 11: TSP.Rnw:796-807
###################################################
atsp <- as.ATSP(USCA312)
ny <- which(labels(USCA312) == "New York, NY")
atsp[, ny] <- 0
initial_tour <- solve_TSP(atsp, method="nn")
initial_tour
tour <- solve_TSP(atsp, method ="two_opt", control = list(tour = initial_tour))
tour
path <- cut_tour(tour, ny, exclude_cut = FALSE)

head(labels(path))
tail(labels(path))


###################################################
### code chunk number 12: map2
###################################################
plot_path(path)


###################################################
### code chunk number 13: TSP.Rnw:831-833
###################################################
tsp <- reformulate_ATSP_as_TSP(atsp)
tsp


###################################################
### code chunk number 14: TSP.Rnw:845-847 (eval = FALSE)
###################################################
## tour <- solve_TSP(tsp, method = "concorde")
## tour <- as.TOUR(tour[tour <= n_of_cities(atsp)])


###################################################
### code chunk number 15: TSP.Rnw:869-870
###################################################
set.seed(1234)


###################################################
### code chunk number 16: TSP.Rnw:873-883
###################################################
m <- as.matrix(USCA312)
ny <- which(labels(USCA312) == "New York, NY")
la <- which(labels(USCA312) == "Los Angeles, CA")

atsp <- ATSP(m[-c(ny,la), -c(ny,la)])
atsp <- insert_dummy(atsp, label = "LA/NY")

la_ny <- which(labels(atsp) == "LA/NY")
atsp[la_ny, ] <- c(m[-c(ny,la), ny], 0)
atsp[, la_ny] <- c(m[la, -c(ny,la)], 0)


###################################################
### code chunk number 17: TSP.Rnw:888-897
###################################################
tour <- solve_TSP(atsp, method ="nearest_insertion")
tour

path_labels <- c("New York, NY",
    labels(cut_tour(tour, la_ny)), "Los Angeles, CA")
path_ids <- match(path_labels, labels(USCA312))

head(path_labels)
tail(path_labels)


###################################################
### code chunk number 18: map3
###################################################
plot_path(path_ids)


###################################################
### code chunk number 19: TSP.Rnw:941-942
###################################################
set.seed(4444)


###################################################
### code chunk number 20: TSP.Rnw:944-948
###################################################
data("iris")
tsp <- TSP(dist(iris[-5]), labels = iris[, "Species"])
tsp_dummy <- insert_dummy(tsp, n = 3, label = "boundary")
tour <- solve_TSP(tsp_dummy)


###################################################
### code chunk number 21: clustering
###################################################
## plot the distance matrix
image(tsp_dummy, tour, xlab = "objects", ylab ="objects")

## draw lines where the dummy cities are located
abline(h = which(labels(tour)=="boundary"), col = "red")
abline(v = which(labels(tour)=="boundary"), col = "red")


###################################################
### code chunk number 22: TSP.Rnw:986-990
###################################################
out <- rle(labels(tour))
data.frame(Species = out$values,
           Lenghts = out$lengths,
           Pos = cumsum(out$lengths))


###################################################
### code chunk number 23: clustering2
###################################################
prc <- prcomp(iris[1:4])
plot(prc$x, pch = as.numeric(iris[,5]), col =  as.numeric(iris[,5]))

paths <- cut_tour(tour, cut = "boundary")
for(p in paths) lines(prc$x[p, ])

Try the TSP package in your browser

Any scripts or data that you put into this service are public.

TSP documentation built on April 4, 2023, 5:13 p.m.