Я работаю над разработкой системы для вычисления и кеширования вероятностных моделей и ищу либо программное обеспечение, которое делает это (предпочтительно на R или Ruby), либо шаблон проектирования, который будет использоваться при реализации моего собственного.
У меня общий шаблон вида функции C зависит от выхода функции B, который зависит от выхода функции A. У меня есть три модели, называем их 1, 2 и 3. Модель 1 реализует A, B и C. Модель 2 реализует только C, а Модель 3 реализует A и C.
Я хотел бы иметь возможность получить значение 'C' из всех моделей с минимальным перерасчетом промежуточных шагов.
Чтобы сделать вещи менее абстрактными, простой пример:
У меня есть график зависимости, который выглядит так:
A 1 является реализацией модели 1 A, а A 3 является реализацией модели 3 A. C зависит от B, а B зависит от A во всех моделях.
Действительные функции заключаются в следующем (опять же, это игрушечный пример, в действительности эти функции гораздо более сложны, и их вычисление может занять минуты или часы).
Значения должны быть следующими.
Без кеширования это нормально в любых рамках. Я могу создать класс для модели 1 и сделать так, чтобы модель 2 расширяла этот класс, и чтобы A, B и C были функциями этого класса. Или я могу использовать структуру внедрения зависимостей, заменив модели 1 и А на модели 2. И аналогично для модели 3.
Однако у меня проблемы с кэшированием. Я хочу вычислить C на всех моделях, чтобы сравнить результаты.
Таким образом, я вычисляю C на модели 1 и кеширую результаты, A, B и C. Затем я вычисляю C на модели 2, и она использует ранее сохраненную в кэше версию B, поскольку она расширена с модели 2.
Однако, когда я вычисляю модель 3, мне не нужно использовать кэшированную версию B, поскольку, хотя функция одна и та же, функция, от которой она зависит, A отличается.
Есть ли хороший способ справиться с такого рода кэшированием с проблемой зависимости?