@Override public int[] act(final double returns[], final int num) { int[] chosen = null; if (num > returns.length) { chosen = new int[returns.length]; } else { chosen = new int[num]; } final ArrayList<Double> values = new ArrayList<Double>(); final ArrayList<Integer> indices = new ArrayList<Integer>(); for (int i = 0; i < returns.length; i++) { values.add(returns[i]); indices.add(i); } int index = -1; for (int i = 0; i < chosen.length; i++) { index = choosing.internalAct(Utils.toArray(values)); chosen[i] = indices.get(index).intValue(); // remove the chosen action and its return values.remove(index); indices.remove(index); } choosing.updateEpsilon(); return chosen; }