code: @Override
      public MoveSelector buildBaseMoveSelector(HeuristicConfigPolicy configPolicy,
              SelectionCacheType minimumCacheType, boolean randomSelection) {
          List<MoveSelector> moveSelectorList = new ArrayList<>(moveSelectorConfigList.size());
          for (MoveSelectorConfig moveSelectorConfig : moveSelectorConfigList) {
              moveSelectorList.add(
                      moveSelectorConfig.buildMoveSelector(configPolicy,
                              minimumCacheType, SelectionOrder.fromRandomSelectionBoolean(randomSelection)));
          }
          boolean ignoreEmptyChildIterators_ = defaultIfNull(ignoreEmptyChildIterators, true);
          return new CartesianProductMoveSelector(moveSelectorList, ignoreEmptyChildIterators_, randomSelection);
      }
docs: ************************************************************************