public WeightVector RunIterations(WeightVector weightVector, int iterationCount)
 {
     for (int iter = 0; iter < iterationCount; iter++)
     {
         Console.WriteLine(DateTime.Now + " running iteration " + iter);
         var newWeightVector = new WeightVector(weightVector.FeatureKDictionary);
         SetForwardBackwordAlgo(weightVector);
         //for (var k = 0; k < weightVector.FeatureKDictionary.Count; k++)
         for (var k = weightVector.FeatureKDictionary.Count-1; k >= 0; k--)
         {
             if (k%100 == 0)
             {
                 Console.WriteLine(DateTime.Now + " running iteration for k " + k);
             }
             var wk = Compute(k, weightVector);
             wk = weightVector.Get(k) + _lambda*wk;
             newWeightVector.SetKey(k, wk);
         }
         weightVector = newWeightVector;
     }
     _weightVector = weightVector;
     return weightVector;
 }
 public void ComputeRange(int start, int end, WeightVector newWeightVector, int threadIndex = 0)
 {
     for (var k = start; k < end; k++)
     {
         if (k % 100 == 0)
         {
             Console.WriteLine(DateTime.Now + "threadIndex: " + threadIndex +
                 " running iteration for k " + k);
         }
         var wk = Compute(k);
         if (double.IsNaN(wk) || double.IsInfinity(wk))
         {
             Console.WriteLine("k: "+ k + "wk is infiity of nana"+ wk);
             //Logger.Flush(false);
         }
         newWeightVector.SetKey(k, wk);
     }
 }