У нас есть некоторые элементы, характеризующиеся некоторым ключевым значением.
Мы рассматриваем элементы в порядке убывания значения ключа. Итак, если у нас есть десять элементов с ключевыми значениями, 4, 5, 7, 10, 2, 8, 9, 10, 8,5, 9, мы сортируем элементы по их ключевым значениям и рассматриваем элементы с одинаковыми ключевыми значениями вместе.
Таким образом, элементы с одинаковыми значениями ключа, например. 10, будут рассматриваться вместе, за ними следуют элементы со значениями ключа 9 и так далее. Когда элемент рассматривается и он проходит определенную фитнес-функцию, он удаляется из списка и больше не рассматривается.
Теперь мы немного ослабим ограничение, заключающееся в том, что одинаковые значения ключей должны рассматриваться вместе, и будем рассматривать элементы с примерно одинаковыми значениями ключей вместе. Итак, когда мы говорим, что в отсортированном порядке второй элемент находится в пределах 10% от первого, их следует рассматривать вместе.
Итак, теперь элементы со значениями ключа 10, 10, 9, 9 нужно рассматривать вместе. И при условии, что здесь не удален один элемент со значением ключа 9, его придется считать снова с 8.5.
Единственный способ, которым я могу придумать реализацию вышеуказанного сценария, - это что-то вроде этого:
- Отсортируйте элементы в порядке убывания ключевых значений.
- Для первого элемента в заказе найдите допустимое отклонение 10%. Найдите элементы, попадающие в это окно отклонения. Итак, здесь мы считаем, 10, 10, 9, 9, в этом окне.
- Если какой-либо из элементов проходит фитнес-функцию, удалите его из списка.
- Сформируйте следующее окно и повторите цикл.
Вот тут моя идея затуманивается. Как сформировать начало следующего окна? Если отсортированные значения 10, 10, 9, 9, 8,5, 8 ..., и в первом окне учтены 10, 10, 9, 9, то следующее окно должно начинаться с 9 и состоять из 9, 8 ,5.
Всегда ли достаточно запускать следующее окно последним значением предыдущего окна? Я привел несколько контрпримеров, и ни один из них не опроверг мою гипотезу. Но что, если обе девятки передают фитнес-функцию и удаляются из списка, какое значение открывает следующее окно? Следующий доступный в отсортированном списке?
Итак, мои вопросы,
- Верна ли гипотеза о запуске следующего окна с последним значением (и следующим, доступным в случае его удаления) предыдущего окна?
- Есть ли лучший алгоритм для всего процесса?