Pages: 1 2 Next
Блок queue, приоритеты
Подскажите пожалуйста, каким способом можно менять приоритет заявок.К примеру из БД выгружаются 4 заявки и попадают в данный блок, возможные варианты 4! = 24. Как устроить перебор возможных комбинаций выполнения последовательности заявок.
Используйте обычную ФИФО очередь, а порядок входа агентов берите из матрицы перебора, например:[1, 2, 3, 4]
[1, 2, 4, 3]
[1, 3, 2, 4]
...
Агенты входят в очередь согласно строке из матрицы.
Мне нужно тогда перед блоком queue, к примеру блок source, вытащить массив на выходе. Потом перед входом в queue, запихать в нужной мне порядке данный массив. Каким это методом делать я не нашел, подскажите пожалуйста.
Алекс, поставьте вместо Source блок Enter, и вызывайте:enter.take(matrix[i][j]);

Создавайте всех агентов заранее, а блок просто берёт их и запускает в диаграмму процесса.
Да получилось, но при факториале 6!=720 комбинаций OptQuest ругается на лимит в 500 итераций, а если он больше то в ручную уже не перебрать. Снятие ограничений в 500 итераций каким образом происходит ?
И еще
Сколько при снятии ограничений с OptQuest имеет максимально количество итераций ?

Как будет быстрее объявлять массив ?
new int[2][2] matrix;
matrix[0][0]=1;
matrix[0][1]=2;
matrix[1][0]=3;
matrix[1][1]=4;

или

new int[2][2] matrix = {{1,2},{3,4}};
Edited: Alex - 14.03.2016 06:34:03
Алекс, а при чём тут оптимизация? Если вы вручную перебираете все возможные варианты, оптимизационный эксперимент не нужен, используйте обычную вариацию параметров.
Матрица должна заполняться итерационно, внутри цикла for.
Задача заключалась в нахождении кратчайшего пути. Так как пешеход из одной в другую точку идет по авто маршруту, то использовать getDistance использовать не получилось(ищет по прямой). Поэтому я генерирую все возможные варианты и пихаю их в оптимизацию. При обходе пешеходом 6ти точек, возможных комбинаций получится 720, что превышает лимит OptQuest. А если он 10 будет обходить точек или их будет несколько, да еще и приоритеты будут. Слишком много комбинаций.
Для выполнения поставленной задачи, мне нужно заранее подготовить массивы для определенного количества заявок. Брать собираюсь массив из файла, поэтому и спросил

Как будет быстрее объявлять массив ?
new int[2][2] matrix;
matrix[0][0]=1;
matrix[0][1]=2;
matrix[1][0]=3;
matrix[1][1]=4;

или

new int[2][2] matrix = {{1,2},{3,4}};
для 10 точек это 3 600 000 комбинаций, поэтому очень важно использовать наибыстрейший способ, что бы по минимуму загружать процессор.
Алекс, вы используете полный перебор, который будет работать в случае, если число вариантов не слишком велико. Например, есть 720 последовательностей. Объявите матрицу, заполните её внутри цикла for и берите каждый вход в эксперименте с вариацией параметров. Результат каждой итерации (время прохождения дистанции) сохраняйте в коллекции или наборе данных (включая номер итерации и последовательность из матрицы). Затем находите наименьшее значение в нём и узнаёте искомую оптимальную последовательность.
Интересно, как вы собираетесь инициализировать все 720 вариантов, не используя итерацию (второй вариант). Вручную забить все значения в файл и читать? Это будет дольше, чем инициализация через цикл.
Я не смог найти метод который бы всегда в одной и той же последовательности перемешивал бы массив. В результате, когда через цикл формирую массив с возможными комбинациями, он постоянно меняется рандомно. При оптимизации в этом случаи, каждый раз будет разный лучший результат, а при возврате в симуляцию, найдены лучший не всегда будет лучшим, так как уже лучший автоматически будет под другим индексом. Вижу решение в том, что под каждый факториал создавать отдельный файл из которого будет инициализировать массив, а потом из этого массива через цикл вставляется в оптимизацию. Мне кажется это быстрее, чем в процессе оптимизации будет перед каждой итерацией формироваться массив через цикл, а потом из него будет вытаскиваться значение.
Если есть лучше решение, рад буду услышать. Речь о том как лучше вложить 3 600 000 комбинаций и по нарастающей в зависимости от кол-ва заявок.
Алекс, попробуйте PermutationIterator:https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/iterator­s/PermutationIterator.html

Вам не придётся создавать матрицу, нужна лишь начальную коллекция с набором точек. Объект класса будет возвращать новую перестановку из переданной коллекции до тех пор, пока они не исчерпаются.
Pages: 1 2 Next
Users browsing this topic (2 guests, 0 registered, 0 hidden)