Контекст
Я строю игру общего назначения , играя в ИИ-фреймворк / библиотеку , в которой используется алгоритм Поиск по дереву Монте-Карло .Идея довольно проста, фреймворк предоставляет каркас алгоритма, четыре основных шага: выбор, расширение, моделирование и обратное распространение.Все, что нужно сделать пользователю, это подключить четыре простые (иш) игровые функции его создания:
- функция, которая принимает игровое состояние и возвращает все возможные разрешенные ходы для игры
- функция, которая принимает игровое состояние и действие и возвращает новое игровое состояние после применения действия
- функция, которая принимает игровое состояние и определяет, закончилась ли игра, и возвращает логическое значение и
- функция, принимающая состояние и идентификатор игрока и возвращающая значение в зависимости от того, выиграл ли игрок, проиграл или игра вничью.При этом у алгоритма есть все, что ему нужно для запуска и выбора хода.
Что я хотел бы сделать
Я хотел бы использовать параллельное программирование дляувеличить силу алгоритма и сократить время, необходимое для запуска каждого игрового хода.Проблема, с которой я сталкиваюсь, заключается в том, что при использовании дочерних процессов в NodeJS вы не можете передавать функции дочернему процессу, и моя структура полностью основана на использовании функций, передаваемых пользователем.
Возможное решение
Я смотрел на этот ответ , но я не уверен, что это будет правильной реализацией для моих нужд.Мне не нужно непрерывно передавать функции через сообщения дочернему процессу, мне просто нужно инициализировать его функциями, которые передаются пользователем моей платформы, когда она инициализирует структуру.
Я думал об одном способе сделать это, но он кажется настолько не элегантным, возможно, не самым безопасным, что я нахожусь в поиске других решений.Я мог бы, когда пользователь инициализирует фреймворк и передает ему свои четыре функции, получить скрипт для записи этих функций в новый файл js (назовем его my-funcs.js
), который будет выглядеть примерно так:
const func1 = {... function implementation...}
const func2 = {... function implementation...}
const func3 = {... function implementation...}
const func4 = {... function implementation...}
module.exports = {func1, func2, func3, func4}
Затем, в файле дочернего рабочего процесса, я думаю, мне нужно будет найти способ для ленивой загрузки, требующий my-funcs.js
.Или, может быть, я не стал бы, я думаю, это зависит от того, как и когда Node.js загружает рабочий файл в память.Все это кажется очень запутанным.
Можете ли вы описать другие способы получить желаемый результат?