anchor.diff:          
             let randomChild = childNodes.[index]
             let randomChildCost = costModel randomChild
  -          reporter.step cur index (randomChild, randomChildCost)
  +          let delta = randomChildCost - curCost
  +          reporter.step cur index (childNodes.Length) (randomChild, randomChildCost)
             let (nextChild, nextChildCost) = 
  -            if(randomChildCost < curCost) then
  +            if(delta < 0.0) then
                 if(randomChildCost < currentBestCost) then
                   currentBestCost <- randomChildCost
                   currentBest <- randomChild
                 (randomChild, randomChildCost)
               else
  -              if (rand.NextDouble() < System.Math.Pow(System.Math.E, (randomChildCost - curCost) / temprature)) then
  +              if (rand.NextDouble() < System.Math.Pow(System.Math.E, (-delta) / temprature)) then
                   (randomChild, randomChildCost)
                 else
                   (curNode, curCost)
  
positive.code:   
    let completeReporter<'a> (printer: 'a -> string) (logger: Logger) =
      { init = fun msg -> logger msg;
        step = fun stp ruleIdx (node, cost) -> logger (sprintf "Step %d, rule %d: %s" stp ruleIdx (nodeCostToString printer node cost))
        finish = fun allPrograms (node, cost) -> logger (sprintf "examined programs: %d\nBest: %s" (List.length allPrograms) (nodeCostToString printer node cost))
      }
  
  
negative.code:         
          let randomChild = childNodes.[index]
          let randomChildCost = costModel randomChild
          reporter.step cur index (childNodes.Length) (randomChild, randomChildCost)
          (randomChild, randomChildCost) :: acc) [e, costModel e] range
    //if debug then
    //  printfn "random expressions:\n%s\n" (nodesListToString printer (List.rev revertedResult))
  