У меня есть (C #) генетическая программа, которая использует финансовые данные временных рядов, и в настоящее время она работает, но я хочу изменить архитектуру, чтобы она была более устойчивой. Мои главные цели:
- последовательно представляет данные временных рядов деревьям выражений.
- позволяет деревьям выражений обращаться к предыдущим строкам данных при необходимости.
- для оптимизации производительности доступа к данным при оценке деревьев выражений.
- сохранить общий интерфейс, чтобы можно было использовать различные типы данных.
Вот возможные подходы, о которых я думал:
- Я могу оценить дерево выражений, передав строку данных в корневой узел и разрешив каждому дочернему узлу использовать одну и ту же строку данных.
- Я могу оценить дерево выражений, передав индекс строки данных и позволив каждому узлу получить строку данных из общего
DataSet
(в настоящее время я передаю индекс строки и собираюсь в несколько синхронизированных массивов для получения данных) .
- Гибридный: неизменяемый набор данных доступен для всех деревьев выражений, и каждое дерево выражений оценивается путем передачи строки данных.
Преимущество первого подхода состоит в том, что строка данных передается в дерево выражений, и дальнейший запрос к набору данных не выполняется (что должно повысить производительность в многопоточной среде). Недостатком является то, что дерево выражений не имеет доступа к остальным данным (в случае, если некоторые функции должны выполнять вычисления с использованием предыдущих строк данных).
Преимущество второго подхода состоит в том, что деревья выражений могут обращаться к любым данным вплоть до самой последней строки данных, но если я не укажу, что это за строка, мне придется перебирать строки и выяснять, какая из них является последний.
Преимущество гибрида состоит в том, что он в целом должен работать лучше и при этом обеспечивать доступ к более ранним данным. Он поддерживает два основных «представления» данных: последняя строка и предыдущие строки.
Ребята, знаете ли вы какие-либо шаблоны проектирования или у вас есть какие-либо советы, которые могут помочь мне создать систему такого типа? Должен ли я использовать набор данных для хранения и представления данных или есть более эффективные способы представления строк данных при сохранении простого интерфейса?
К вашему сведению: весь мой код написан на C #.