def _internal_ask_candidate()

in nevergrad/optimization/optimizerlib.py [0:0]


    def _internal_ask_candidate(self) -> p.Parameter:
        # optimizer selection if budget is over
        if self._warmup_budget is not None:
            if self._selected_ind is None and self._warmup_budget < self.num_tell:
                ind = self.current_bests["pessimistic"].parameter._meta.get("optim_index", -1)
                if ind >= 0:  # not a tell not asked
                    if self.num_workers == 1 or self.optims[ind].num_workers > 1:
                        self._selected_ind = ind  # don't select non-parallelizable in parallel settings
        optim_index = self._selected_ind
        if optim_index is None:
            num = len(self.optims)
            for k in range(2 * num):
                self._current += 1
                optim_index = self._current % len(self.optims)
                opt = self.optims[optim_index]
                if opt.num_workers > opt.num_ask - (opt.num_tell - opt.num_tell_not_asked):
                    break  # if there are workers left, use this optimizer
                if k > num:
                    if not opt.no_parallelization:
                        break  # if no worker is available, try the first parallelizable optimizer
        if optim_index is None:
            raise RuntimeError("Something went wrong in optimizer selection")
        opt = self.optims[optim_index]
        candidate = opt.ask()
        candidate._meta["optim_index"] = optim_index
        return candidate