func newAgent(min, width *matrix.Dense, cost Cost) *Agent { a := new(Agent) a.X = matrix.DenseZero(min.Size()) a.x = a.X.Hvec() // crossover operates on vectorized matrix a.in = make(chan args, 1) a.out = make(chan float64, 1) a.rnd = rand.New(rand.NewSource(time.Now().UnixNano())) a.cost = cost // Place this agent in random place on the initial area a.x.Rand(0, 1) a.X.MulBy(width) a.X.AddTo(min, 1) // Run crossover loop go a.crossoverLoop() return a }