Guest User

Untitled

a guest
Apr 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. public double Evaluate(IDictionary<string, double> variableList)
  2. {
  3. var operandQueue = new Queue<double>();
  4.  
  5. var indexValidAt = _GetIndexToCalculateTo(_Genome);
  6.  
  7. for (var i = indexValidAt; i >= 0; i--)
  8. {
  9. var theCharacter = _Genome[i];
  10. if (!_IsOperator(theCharacter))
  11. operandQueue.Enqueue(variableList[theCharacter.ToString()]);
  12. else
  13. {
  14. if(_GetNumberOfChildrenFor(theCharacter) > operandQueue.Count)
  15. return double.NaN;
  16. switch (theCharacter)
  17. {
  18. case '*':
  19. operandQueue.Enqueue(operandQueue.Dequeue() * operandQueue.Dequeue());
  20. break;
  21. case '/':
  22. operandQueue.Enqueue(operandQueue.Dequeue() / operandQueue.Dequeue());
  23. break;
  24. case '-':
  25. operandQueue.Enqueue(operandQueue.Dequeue() - operandQueue.Dequeue());
  26. break;
  27. case '+':
  28. operandQueue.Enqueue(operandQueue.Dequeue() + operandQueue.Dequeue());
  29. break;
  30. case 'r':
  31. operandQueue.Enqueue(Math.Sqrt(operandQueue.Dequeue()));
  32. break;
  33. default:
  34. throw new NotImplementedException("This is NOT an operator!!! '" + theCharacter + "'");
  35. }
  36.  
  37. }
  38.  
  39. }
  40.  
  41. return operandQueue.Dequeue();
  42. }
  43.  
  44. static int _GetIndexToCalculateTo(string genome) {
  45. var genomeLength = genome.Length;
  46. var indexValidAt = 0;
  47. var currentScore = 1;
  48. for (var i = 0; i < genomeLength; i++ )
  49. {
  50. var theCharacter = genome[i];
  51. currentScore += _GetNumberOfChildrenFor(theCharacter) - 1;
  52.  
  53. if(currentScore == 0)
  54. {
  55. indexValidAt = i;
  56. break;
  57. }
  58. }
  59. return indexValidAt;
  60. }
Add Comment
Please, Sign In to add comment