volesti vs hitandrun - GeomScale/volesti GitHub Wiki
In this topic we compare volesti with CRAN package hitandrun. We sample uniformly distributed points from convex polytopes and compare run-times. hitandrun supports only Random Directions Hit and Run (RDHR) and thus we use the same random walk from volesti. The following R script generates a random polytope for each dimension and samples 10000 points (walk length = 10) with both packages.
library(volesti)
library(hitandrun)
library(ggplot2)
N=1000
times_volesti = c()
times_hnr = c()
for (d in seq(from=10,to=100,by=10)) {
  
  P = gen_cube(d, 'H')
  tim = system.time({ sample_points(P, n=N, random_walk = list("walk" = "RDHR", "walk_length"=5)) })
  times_volesti = c(times_volesti, as.numeric(tim)[3])
  
  constr <- list(constr = P$A, dir=rep('<=', 2*d), rhs=P$b)
  tim = system.time({ hitandrun(constr, n.samples=N, thin=5) })
  times_hnr = c(times_hnr, as.numeric(tim)[3])
}
The following Table reports the run-times.
| dimension | volesti time | hitandrun time | 
|---|---|---|
| 10 | 0.017 | 0.102 | 
| 20 | 0.024 | 0.157 | 
| 30 | 0.031 | 0.593 | 
| 40 | 0.043 | 1.471 | 
| 50 | 0.055 | 3.311 | 
| 60 | 0.069 | 6.460 | 
| 70 | 0.089 | 11.481 | 
| 80 | 0.108 | 19.056 | 
| 90 | 0.132 | 33.651 | 
| 100 | 0.156 | 50.482 | 
The following figure illustrates the asymptotic in the dimension difference in run-time between volesti and hitandrun.
