private void calculateBruteForceAll() { TableFilter[] list = new TableFilter[filters.length]; Permutations<TableFilter> p = Permutations.create(filters, list); for (int x = 0; !canStop(x) && p.next(); x++) { testPlan(list); } }
private void calculateBruteForceSome() { int bruteForce = getMaxBruteForceFilters(filters.length); TableFilter[] list = new TableFilter[filters.length]; Permutations<TableFilter> p = Permutations.create(filters, list, bruteForce); for (int x = 0; !canStop(x) && p.next(); x++) { // find out what filters are not used yet for (TableFilter f : filters) { f.setUsed(false); } for (int i = 0; i < bruteForce; i++) { list[i].setUsed(true); } // fill the remaining elements with the unused elements (greedy) for (int i = bruteForce; i < filters.length; i++) { double costPart = -1.0; int bestPart = -1; for (int j = 0; j < filters.length; j++) { if (!filters[j].isUsed()) { if (i == filters.length - 1) { bestPart = j; break; } list[i] = filters[j]; Plan part = new Plan(list, i + 1, condition); double costNow = part.calculateCost(session); if (costPart < 0 || costNow < costPart) { costPart = costNow; bestPart = j; } } } filters[bestPart].setUsed(true); list[i] = filters[bestPart]; } testPlan(list); } }