Search very locally to find slightly better projections to polish a broader search.

search_polish(
  current,
  alpha = 0.5,
  index,
  tries,
  polish_max_tries = 30,
  cur_index = NA,
  n_sample = 100,
  polish_cooling = 1,
  ...
)

Arguments

current

the current projection basis

alpha

the angle used to search the target basis from the current basis

index

index function

tries

the counter of the outer loop of the opotimiser

polish_max_tries

maximum number of iteration before giving up

cur_index

the index value of the current basis

n_sample

number of samples to generate

polish_cooling

percentage of reduction in polish_alpha when no better basis is found

...

other arguments being passed into the search_polish()

Examples

set.seed(2020)
t1 <- save_history(flea[, 1:6], guided_tour(holes()), max = 100)
#> Converting input data to the required matrix format.
#> Value  0.740   35.5 % better  - NEW BASIS
#> Value  0.832   52.3 % better  - NEW BASIS
#> Value  0.854   2.7 % better  - NEW BASIS
#> Value  0.884   3.5 % better  - NEW BASIS
#> Value  0.891   0.9 % better  - NEW BASIS
#> Value  0.897   0.6 % better  - NEW BASIS
#> Value  0.899   0.2 % better  - NEW BASIS
#> Value  0.900   0.1 % better  - NEW BASIS
#> Value  0.901   0.1 % better  - NEW BASIS
#> Value  0.903   0.1 % better  - NEW BASIS
#> Value  0.903   0.1 % better 
#> Value  0.904   0.1 % better  - NEW BASIS
#> Value  0.904   0.1 % better 
#> Value  0.904   0.1 % better 
#> Value  0.904   0.1 % better 
#> Value  0.904   0.0 % better 
#> Value  0.904   0.1 % better 
#> Value  0.905   0.1 % better  - NEW BASIS
#> Value  0.905   0.0 % better 
#> Value  0.905   0.0 % better 
#> Value  0.906   0.2 % better  - NEW BASIS
#> Value  0.908   0.2 % better  - NEW BASIS
#> Value  0.909   0.1 % better  - NEW BASIS
#> Value  0.909   0.0 % better 
#> Value  0.910   0.1 % better 
#> Value  0.910   0.1 % better  - NEW BASIS
#> Value  0.911   0.1 % better 
#> Value  0.910   0.0 % better 
#> Value  0.910   0.0 % better 
#> Value  0.911   0.0 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better 
#> Value  0.910   0.0 % better 
#> Value  0.911   0.0 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better 
#> Value  0.910   0.0 % better 
#> Value  0.910   0.0 % better 
#> Value  0.910   0.0 % better 
#> Value  0.911   0.1 % better 
#> Value  0.911   0.1 % better  - NEW BASIS
#> Value  0.912   0.1 % better 
#> Value  0.912   0.1 % better  - NEW BASIS
#> Value  0.912   0.0 % better 
#> Value  0.912   0.0 % better 
#> Value  0.913   0.1 % better 
#> Value  0.913   0.0 % better 
#> Value  0.912   0.0 % better 
#> Value  0.913   0.1 % better  - NEW BASIS
#> Value  0.914   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.914   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.914   0.1 % better 
#> Value  0.914   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.914   0.1 % better 
#> Value  0.914   0.1 % better 
#> Value  0.914   0.0 % better 
#> Value  0.913   0.0 % better 
#> Value  0.914   0.0 % better 
#> No better bases found after 25 tries.  Giving up.
#> Final projection: 
#> -0.527  0.039  
#> -0.040  0.391  
#> -0.037  0.456  
#> 0.059  0.524  
#> -0.846  -0.007  
#> 0.027  0.602  
attr(t1, "class") <- NULL
best_proj <- t1[, , dim(t1)[3]]
animate_xy(
  flea[, 1:6],
  guided_tour(holes(),
    search_f = search_polish,
    cur_index = 0
  ),
  start = best_proj
)
#> Converting input data to the required matrix format.
#> alpha gets updated to 0.475 
#> alpha gets updated to 0.4286875 
#> alpha gets updated to 0.3675459 
#> alpha gets updated to 0.2993685 
#> alpha gets updated to 0.2316456 
#> alpha gets updated to 0.1702808 
#> alpha gets updated to 0.1189134 
#> alpha gets updated to 0.07888961 
#> better basis found, index_val =  0.9138799 
#> better basis found, index_val =  0.9142625 
#> better basis found, index_val =  0.9143806 
#> alpha gets updated to 0.04972013 
#> better basis found, index_val =  0.9150011 
#> alpha gets updated to 0.02976928 
#> better basis found, index_val =  0.9151749 
#> better basis found, index_val =  0.915217 
#> alpha gets updated to 0.01693277 
#> better basis found, index_val =  0.9152574 
#> The improvement is too small! 
#> current basis:  -0.630828 -0.04306601 -0.01484365 0.1367652 -0.7587744 0.0744156 0.0241523 0.3725548 0.4504461 0.5111922 0.1030181 0.6211181 cur_index:  0.9152574 
#> Using half_range 0.98