Надежный сервис Fabric против актера для решения GA

На данный момент у нас есть генетический алгоритм (GA), который работает довольно долго, и я подумал, что мы могли бы распространять его, используя Fabric, потому что теоретически он хорошо подходит для microservice. Это мой первый опыт работы с тканью.

Как мы должны это сделать? Должны ли мы иметь сервис с отслеживанием состояния, который запускает и объединяет другие акторы задачи ? Это похоже на этот проект: https://github.com/Azure-Samples/service-fabric-dotnet-data-streaming-websockets

Я не совсем уверен, как идти, и на эту тему не так много документации. Этот ГА действительно обширен, и наша цель — распространить его расчеты.


person serj    schedule 06.04.2016    source источник


Ответы (2)


Я реализовал базовое приложение генетического алгоритма с помощью Service Fabric в качестве упражнения по созданию приложения. Не уверен, что мой подход — лучший способ сделать что-то для вашего сценария, но я могу описать, что я сделал.

Мое приложение состояло только из актеров, как с состоянием, так и без него. У меня был актор с состоянием процессора, который выполнял все задачи управления и управлял алгоритмом. Поскольку он сохранял состояние, он сохранял историю всего генетического состояния для каждого из созданных поколений. У меня также был актер без гражданства FitnessEvalTask. Эта задача просто отвечала за оценку пригодности объекта. Его входом было представление гена, а выходом — значение пригодности. Идея заключалась в том, что вы будете раскручивать экземпляры этого актера с высокой скоростью, и они будут распределяться соответствующим образом. Приложение Processor, отвечающее за управление алгоритмом, будет создавать необходимые экземпляры акторов FitnessEvalTask, предоставлять их входные данные и заставлять их сообщать о своих значениях пригодности, а затем выполнять необходимую обработку. Мой клиентский процесс, простое консольное приложение, будет связываться с субъектом процессора, чтобы инициировать алгоритм и выполнять любые необходимые задачи управления.

person Matt Thalman    schedule 06.04.2016
comment
Круто, я думаю, я сделаю именно это. Как вы справлялись с асинхронным характером всех актеров? Кроме того, как вы передаете ввод для Актера? - person serj; 06.04.2016
comment
Также было бы замечательно, если бы вы могли отправить мне проект, [email protected] - person serj; 06.04.2016
comment
Я только что представил асинхронный метод в своем интерфейсе актера, который оценивает пригодность: Task<double> EvaluateFitnessAsync(string genes); Просто следуйте тому же шаблону, который существует в шаблоне проекта по умолчанию для проекта Актера с его методом GetCountAsync. Алгоритм процессора, который выполняет метод EvaluateFitnessAsync для всех субъектов, просто ждет завершения всех этих задач (метод Task.WhenAll), прежде чем продолжить. - person Matt Thalman; 06.04.2016
comment
Спасибо, это именно то, что мне было нужно! - person serj; 06.04.2016

В целом я думаю, что Service Fabric может поддерживать долговременный распределенный генетический алгоритм, как вы описываете, и это будет разумным решением.

Скорее всего, вы будете использовать актеров SF для представления возможных решений в вашей популяции, а также (как вы описываете) надежный сервис SF для агрегирования данных, управления популяцией и поколениями и т. д.

Выбор между использованием акторов/сервисов с отслеживанием состояния или без учета состояния во многом зависит от того, хотите ли вы (или должны) управлять состоянием самостоятельно (скажем, если вы интегрируетесь с пользовательским хранилищем данных) или вы согласны с управлением состоянием SF. от вашего имени. Служба SF без сохранения состояния может по-прежнему иметь устойчивое состояние... вы просто несете ответственность за управление ею самостоятельно.

Прелесть использования SF в том, что он формально отделяет логику + состояние вашего решения от низкоуровневого управления ресурсами, необходимого для его выполнения. Вы определяете свое приложение в коде и отдельно настраиваете кластер SF с любыми ресурсами, которые вам нужны, а SF позаботится об эффективном и надежном распределении работы по кластеру. Конечно, вы можете сделать это самостоятельно, но это сложно сделать правильно.

Звучит как забавная задача... удачи!

person JoshL    schedule 06.04.2016
comment
Спасибо, теперь я более уверен, что это имеет смысл :) - person serj; 06.04.2016