code: func (nm *nelderMead) evaluateWithConstraints(vertices vertices, vertex *nmVertex) *nmVertex {
  	vertex.evaluate(nm.config)
  	return vertex
  	if vertex.good {
  		return vertex
  	}
  	best := vertices[0]
  	for i := 0; i < 5; i++ {
  		vertex = best.add((vertex.subtract(best).multiply(alpha)))
  		if vertex.good {
  			return vertex
  		}
  	}
  
  	return best
  }
docs: // evaluateWithConstraints will safely evaluate the vertex while
  // conforming to any imposed restraints.  If a constraint is found,
  // this method will backtrack the vertex as described here:
  // http://www.iccm-central.org/Proceedings/ICCM16proceedings/contents/pdf/MonK/MoKA1-04ge_ghiasimh224461p.pdf
  // This should work with even non-linear constraints, but it is up to
  // the consumer to check these constraints.