Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public double Evaluate(IDictionary<string, double> variableList)
- {
- var operandQueue = new Queue<double>();
- var indexValidAt = _GetIndexToCalculateTo(_Genome);
- for (var i = indexValidAt; i >= 0; i--)
- {
- var theCharacter = _Genome[i];
- if (!_IsOperator(theCharacter))
- operandQueue.Enqueue(variableList[theCharacter.ToString()]);
- else
- {
- if(_GetNumberOfChildrenFor(theCharacter) > operandQueue.Count)
- return double.NaN;
- switch (theCharacter)
- {
- case '*':
- operandQueue.Enqueue(operandQueue.Dequeue() * operandQueue.Dequeue());
- break;
- case '/':
- operandQueue.Enqueue(operandQueue.Dequeue() / operandQueue.Dequeue());
- break;
- case '-':
- operandQueue.Enqueue(operandQueue.Dequeue() - operandQueue.Dequeue());
- break;
- case '+':
- operandQueue.Enqueue(operandQueue.Dequeue() + operandQueue.Dequeue());
- break;
- case 'r':
- operandQueue.Enqueue(Math.Sqrt(operandQueue.Dequeue()));
- break;
- default:
- throw new NotImplementedException("This is NOT an operator!!! '" + theCharacter + "'");
- }
- }
- }
- return operandQueue.Dequeue();
- }
- static int _GetIndexToCalculateTo(string genome) {
- var genomeLength = genome.Length;
- var indexValidAt = 0;
- var currentScore = 1;
- for (var i = 0; i < genomeLength; i++ )
- {
- var theCharacter = genome[i];
- currentScore += _GetNumberOfChildrenFor(theCharacter) - 1;
- if(currentScore == 0)
- {
- indexValidAt = i;
- break;
- }
- }
- return indexValidAt;
- }
Add Comment
Please, Sign In to add comment