Exemplo n.º 1
0
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
}
Exemplo n.º 2
0
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
}
Exemplo n.º 3
0
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)}
}
Exemplo n.º 4
0
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
}