It is time to make some wise design choices...
Option 1) Everything is one object
Option 2) Standard modular structure
Option 3) Yanush Version
НЕДОСТАТКИ:
- очень громоздкая конструкция ради всего лишь таргет-сетки. Проблема в том, что это придётся прописывать в инициализации.
- блок трейнера, разветвляюдего на два трейнера. Можно чтобы раннер запускал сразу несколько тренеров, но пользователь (!) должен убедиться, что они "независимые" - это плохо.
НЕДОСТАТКИ:
- тройное наследование Noisy Dueling Categorical. Но это неизлечимая проблема, не связанная с выбором архитектуры... Здесь скорее всего так или иначе появятся фабрики классов.
ПРОБЛЕМА:
- в реплей буффер внезапно попадает сразу две копии каждого трашнзишна!..
ПРОБЛЕМА:
- лоссы не обмениваются информацией. То есть Policy Gradient Loss придётся заново прогонять сеть-критика, а энтропийному лоссу - заново прогонять политику.
ПРОБЛЕМА:
- внезапно требует ОСОБОГО трейнера, работающего сразу с двумя буфферами. Как приоритизрованный реплей тогда сюда пихать?
НЕДОСТАТКИ:
- повторное сэмплирование батча из реплей буффера для обновления сетки для любопытства.
- и наследование всех проблем от предыдущих пунктов.