Utility maximising stochastic dynamic programming