class_docstr: Class for Tree search based optimisation. 
docstr: Runs DOO optimisation iteratively based on the budget. 
docstr_tok: ["Runs","DOO","optimisation","iteratively","based","on","the","budget","."]
code: def run_PDOO(self, mult=0.5):
      """Runs DOO optimisation iteratively based on the budget."""
      Dm = int(np.log(self.K) / np.log(1 / self.rho_max))
      n = (
          self.total_budget
          / self.doo_obj.eval_cost_single_point_normalised(
              np.array([1.0])
          )
      )
      N = int(mult * Dm * np.log(n / np.log(n)))
      budget = self.total_budget / float(N)
      nu = self.nu_max
      total_cost = 0.0
      results = []
      for i in range(N):
          rho = (self.rho_max) ** (float(N) / (N - i))
          est, fidel, point, cost, h = self.run_DOO(budget, nu, rho)
          results = results + [(est, fidel, point, cost, h)]
          total_cost = total_cost + cost
      temp = [s[0] - self.C * (1 - s[1]) for s in results]
      index = np.argmax(temp)
      self.last_results = (temp[index], results[index][2], total_cost)
  
      return results, index
  
imports: from __future__ import division
  from functools import total_ordering
  from argparse import Namespace
  import numpy
  from .general_utils import map_to_bounds
label_desc: Use image node_id 7 for calling the OptTree obj's underlying member method code with example usage: obj.run_PDOO(mult) and returns: results,  index