func direcbetween(from, to *optim.Point, m optim.Mesh) []int { d := make([]int, from.Len()) step := m.Step() for i, x0 := range from.Pos { d[i] = int((to.Pos[i] - x0) / step) } return d }
func genPollPoints(from *optim.Point, span Spanner, m optim.Mesh) []*optim.Point { ndim := from.Len() dirs := span.Span(ndim) polls := make([]*optim.Point, 0, len(dirs)) for _, d := range dirs { polls = append(polls, pointFromDirec(from, d, m)) } return polls }
func pointFromDirec(from *optim.Point, direc []int, m optim.Mesh) *optim.Point { pos := make([]float64, from.Len()) step := m.Step() for i, x0 := range from.Pos { pos[i] = x0 + float64(direc[i])*step } return &optim.Point{m.Nearest(pos), math.Inf(1)} }
func New(start *optim.Point, opts ...Option) *Method { m := &Method{ Curr: start, ev: optim.SerialEvaler{}, Poller: &Poller{Nkeep: start.Len() / 4, SkipEps: 1e-10}, Searcher: NullSearcher{}, NsuccessGrow: -1, StepMult: 1.0 / 1.7, } for _, opt := range opts { opt(m) } m.initdb() return m }