private void SetNewUtilityWithBellman(State currState)
	{
		
		double maxExpectedUtility = Integer.MIN_VALUE;

		
		for(ACTION action : ACTION.values())
		{
			double sumU = 0.0;
			for(State nextState: this.game.GetNeighborStates(currState))
			{
				if(!this.game.IsOutBound(nextState) && !nextState.IsWall){
					sumU += this.game.GetProbability(currState, action, nextState) * nextState.GetUtility();
				}else
				{
					sumU += this.game.GetProbability(currState, action, nextState) * currState.GetUtility();
				}
			}
			
			
			if(sumU > maxExpectedUtility)
			{
				maxExpectedUtility = sumU;
				currState.OptimalPolicy = action;
			}
		}
		
		double newUtil = currState.GetReward() + discountFactor * maxExpectedUtility;
		currState.SetUtility(newUtil);
	}