Обобщение простого генетического алгоритма (GA) - Пользовательский интерфейс(UI)

ОГЛАВЛЕНИЕ

Пользовательский интерфейс(UI)

UI в примере кода обеспечивает легкий способ передачи необходимых параметров для запуска турниров, так что можно испробовать разные комбинации, и позволяет просмотреть результаты. Установите заданное значение суммы, заданное значение произведения и количество карточек. Эти параметры специфичны для задачи карточек. Установите размер популяции, чтобы создать популяцию конкретного размера. Установите вероятность рекомбинации и вероятность мутации в значение от 0 до 1. Наконец, установите число итераций, чтобы задать длительность турнира. Установив все значения, нажмите кнопку "Вперед!". Спустя некоторое время она снова станет активной, сообщая об окончании Tournament. в зависимости от результатов турнира, станет активной кнопка "Просмотреть результаты". Основная форма выглядит так:

Основная форма сохраняет абсолютного победителя всех турниров, аналогично тому, как GeneticAlgorithmBase сохраняет абсолютного победителя в турнире. После каждого турнира основная форма сравнивает победителя турнира с абсолютным победителем. Если победитель турнира "лучше" абсолютного победителя, он становится новым абсолютным победителем, и активируется кнопка «Просмотреть результаты». Затем можно нажать «Просмотреть результаты» и увидеть результаты, выглядящие таким образом:

Это лишь обозреватель свойств в форме. Обозреватель свойств отображает текущий абсолютный побеждающий IGenotype. Можно держать открытыми формы старых результатов, чтобы сравнивать различия между победителями и убеждаться в приближении к решению. Можно посмотреть конкретные гены в IGenotype, нажав кнопку с многоточием "..." рядом с набором генов "Gene". Такой прием отобразит редактор набора генов Gene.

Вот и все с UI.

Вопросы

Возникают следующие вопросы:

1.    Насколько важен  GeneticAlgorithmBase. Полезен ли он, или следует сжать его в BinaryAlgorithmBase? Почему?
2.    Каково обобщение? Хороши ли применяемые стратегии объектно-ориентированного программирования для обеспечения повторного использования? Следует ли над чем-то поработать?
3.    Любые другие комментарии

Известные проблемы

В данном подходе были замечены следующие проблемы:

1.    GeneticAlgorithmBase работает с коллекциями IGenotype. Может появиться проблема при наличии нескольких победителей и/или проигравших. В частности, при таких классах "PolyGenenticAlgorithm" рекомбинирование победителей с проигравшими может вызвать проблемы, потому что неясно, какого победителя следует рекомбинировать с каким проигравшим, или же каждого победителя следует рекомбинировать с каждым проигравшим. Так как рекомбинирование оставлено реализатору, определение подобающего способа рекомбинирования остается на усмотрение разработчика. Например, в TernaryGeneticAlgorithm может быть один победитель и два проигравших, или один проигравший и два победителя, и в обоих случаях стоит вопрос, как победители влияют на проигравших? Разработчику придется ответить на эти вопросы.
2.    Как сказано, есть вероятность, что несколько победителей, рекомбинированных с проигравшими, дадут популяцию, не имеющую достаточного разнообразия для отыскания решения.
3.    Касательно структуры кода, использование IComparable для сравнения IGenotype может упростить дело.