Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // TODO Local Search
- /**
- * Обязан быть полносвязный граф. Поиск локального оптимума
- *
- * @param a
- * @param localChain
- */
- public void localSearch(int a[][], byte curChain[])
- {
- byte N = (byte) curChain.length;
- long curWeight = getWeight(a, curChain);
- operationCounter2 = 0;
- System.out.printf("\nМетод поиска локального оптимума:\n\nВес: %d, Начальная цепочка:", curWeight);
- printArrayInc(curChain);
- System.out.printf("\n\n");
- long nextWeight = 0;
- operationCounter = 0;
- byte nextChain[] = new byte[N];
- // copy Chain;
- for (int i = 0; i < N; i++)
- nextChain[i] = curChain[i];
- for (int i = 1 ; i <= (N - 3); i++)
- for (int j = (i + 2); j <= (N - 1); j++)
- {
- // swap;
- byte tmp = nextChain[i];
- nextChain[i] = nextChain[j - 1];
- nextChain[j - 1] = tmp;
- // если между поменянными вершинами, больше двух вершин, их нужно сделать в обратном порядке
- if (j-i >= 3) doReverse(nextChain, i + 1, j - 2);
- // Считаем новый вес
- nextWeight = getWeight(a, nextChain);
- // Проверяем
- operationCounter2++; // счетчик элементарных операций
- if (nextWeight < curWeight)
- {
- // copy Chain;
- for (int k = 0; k < N; k++)
- curChain[k] = nextChain[k];
- curWeight = nextWeight;
- operationCounter++; // счетчик кол-ва оптимизаций
- System.out.println("Оптимизация " + operationCounter + " Вес " + curWeight);
- printArrayInc(curChain);
- System.out.println();
- i = 0; // если была оптимизация, возвращаем циклы на исходную
- j = 2;
- }
- }
- System.out.println("\nОпераций:" + operationCounter2);
- }
Advertisement
Add Comment
Please, Sign In to add comment