Вам просто нужно изменить вход функции split в массив строк, а затем delare StringSplitOptions
.
Попробуйте эту строку кода:
Occurrences = input.Split({phrase}, StringSplitOptions.None).Length
Я не проверял это, но я думаю, вам также придется учитывать тот факт, что вхождения будут слишком высокими из-за того, что вы раскалываете свою строку, а не подсчитываете, сколько раз она находится в строка, поэтому я думаю, Occurrences = Occurrences - 1
Надеюсь, что это поможет
Вы можете сравнивать свое решение только с проблемами с точно такой же функцией кодирования и соответствия (то есть это эквивалентные проблемы).Если проблема в другом, любое сравнение быстро теряет актуальность по мере изменения проблемы, поскольку функция пригодности почти всегда является специальной для того, что вы пытаетесь решить. Фактически, фитнес-функция - это единственное, что вам нужно закодировать, если вы используете набор инструментов генетических алгоритмов, так как все остальное обычно поставляется из коробки.
С другой стороны, если функция приспособленности такая же, то имеет смысл сравнить результаты с разными параметрами, такими как разная частота мутаций, разные реализации кроссовера или даже совершенно разные эволюционные парадигмы, такие как коэволюция, ген выражение, по сравнению со стандартными ГА и т. д.
Должно быть любое количество достойных методов GA, с которыми вы можете сравнивать. Тем не менее, вы должны сначала попытаться четко установить, какой именно «традиционный» метод GA вы уже тестировали.
Один хороший метод, который я могу порекомендовать, - это алгоритм NSGA-II , который был разработан для многоцелевой оптимизации.
Для получения других идей взгляните на следующее:
Пытаетесь ли вы улучшить современное состояние решателей с несколькими рюкзачками с помощью генетических алгоритмов? Или вы пытаетесь усовершенствовать технику генетического алгоритма, используя в качестве тестовой платформы мультикомпакет? (Вы можете уточнить?)
В зависимости от того, какая цель является вашей целью, ответ на ваш вопрос будет совершенно другим. Поскольку другие ответили на второй вопрос, я предполагаю первый.
В базовом генетическом алгоритме произошел небольшой скачок и прорыв. Наилучшим улучшением в решении проблемы многоканального пакета с использованием генетических алгоритмов было бы улучшение кодирования операторов мутации и кроссовера, которые могут на порядки разницы в результирующей производительности и исключить любые изменения в фундаментальном генетическом алгоритме. . Вы можете многое сделать для того, чтобы ваши операторы мутации и кроссовера были адаптированы для мультикапсового пакета.
Сначала я хотел бы изучить литературу по мульти-рюкзаку, чтобы увидеть, какие типы пространств поиска и методы решения используются в мульти-рюкзачке. Какие типы поисковых операторов они используют в своих оптимальных или субоптимальных методах (независимо от генетических алгоритмов)? Что они кодируют как переменные и что кодируют как значения? Какие функции эвристической оценки используются? Какие ограничения они проверяют? Затем вы адаптируете их кодировки к вашим операторам мутации и кроссовера и посмотрите, насколько хорошо они работают в ваших генетических алгоритмах.
Весьма вероятно, что эффективное кодирование пространства поиска или точная функция эвристической оценки проблемы с множеством рюкзаков могут быть преобразованы в высокоэффективные операторы мутации и кроссовера. Поскольку многоканальный рюкзак - это очень хорошо изученная проблема с большим объемом исследовательской литературы, она должна стать для вас золотой жилой.