physbo.search.pareto module

class physbo.search.pareto.Pareto(num_objectives, dom_rule=None)[source]

Bases: object

divide_non_dominated_region(force_binary_search=False, debug=False, method='auto')[source]

Partition the region not dominated by the front into disjoint hyper-rectangles, stored in self.cells as index bounds into [reference_min; front; reference_max].

Parameters:
  • force_binary_search (bool) – Same as method="binary_search".

  • debug (bool) – Print timings of the binary search.

  • method (str) – "auto" (default): vertical strips for 2 objectives, "box" otherwise. "box": the box decomposition of Lacour, Klamroth and Fonseca (2017), built from local upper bounds as in BoTorch’s FastNondominatedPartitioning. Far fewer cells than the binary search for 3 or more objectives (4 objectives, 150 front points: about 1,600 instead of 2.7 million). For 6 or more objectives the region is cut into slabs along the last objective, and each slab is decomposed in this way. "binary_search": recursive bisection of the bounding box.

  • region (All methods cover the same)

  • EHVI (so)

  • and (HVPI)

  • rounding. (volume_in_dominance agree up to)

export_front()[source]
prepare_reference_points(upper=True)[source]

Make the reference points valid for the current front.

EHVI needs the front between reference_min and reference_max, and HVPI needs it above reference_min. A reference point that is not set is estimated from the front. An estimated reference point that the front has grown beyond is estimated again; a reference point set by the user is kept, with a warning. The warning is always issued from this module, whichever function calls this method, so that warning filters treat all calls alike (and all processes of a parallel run alike).

Parameters:

upper (bool) – Whether reference_max is needed as well.

rebuild_front(t, terminal_num_run)[source]

Recompute the non-dominated set of points from the observations.

The front is updated in the same order as the observations were written. The reference points are kept unless they are not finite.

Parameters:
  • t (numpy.ndarray) – N x num_objectives dimensional array. All the observations.

  • terminal_num_run (numpy.ndarray) – The number of the observations at the end of each run.

set_reference_max(reference_max=None)[source]

Set the upper reference point.

Without an argument, it is estimated from the current front as front_max + 100 w, with w as for set_reference_min; prepare_reference_points estimates it again when the front no longer lies below it. A given reference point is kept as it is.

set_reference_min(reference_min=None)[source]

Set the lower reference point.

Without an argument, it is estimated from the current front as front_min - 2 w / n, with w the width of the front in each objective (an objective in which the front has no extent takes the largest width of the others, or 1) and n the number of points of the front; prepare_reference_points estimates it again when the front no longer lies above it. A given reference point is kept as it is.

update_front(t)[source]
volume_in_dominance(ref_min, ref_max, dominance_ratio=False)[source]
class physbo.search.pareto.Rectangles(n_dim, dtype)[source]

Bases: object

Initilize a set of hyper-rectangle.

Parameters:

n_dim – dimension of rectangles

add(lb, ub)[source]

Add new rectangles.

Parameters:
  • lb – lower bounds of rectangles

  • ub – upper bounds of rectangles

physbo.search.pareto.dominate(t1, t2)[source]

domination rule for maximization problem