                                                                     thrust::raw_pointer_cast(old_forces.data()));
 
 
-        if (step == 250) {eta /= early_ex;}
+        if (step == 750) {eta /= early_ex; momentum = 0.8;}
         // std::cout << "ATTR FORCES:" << std::endl;
         // for (int i = 0; i < 128; i++) {
             // std::cout << attr_forces[i] << ", " << attr_forces[i + N_POINTS] << std::endl;

    nnodes--;

    thrust::device_vector<float> forceProd(sparsePij.size());
    thrust::device_vector<float> pts = Random::random_vector((nnodes + 1) * 2); //TODO: Rename this function
    thrust::device_vector<float> rep_forces((nnodes + 1) * 2, 0);
    thrust::device_vector<float> attr_forces(N_POINTS * 2, 0);
    thrust::device_vector<float> old_forces(N_POINTS * 2, 0); // for momentum

    thrust::device_vector<float> ones(N_POINTS * 2, 1); // This is for reduce summing, etc.

    float eta = learning_rate * early_ex;
    float momentum = 0.1f;
    float norm;
    
    // These variables currently govern the tolerance (whether it recurses on a cell)
