How does the learner forget old data? If a model's price drops by 50%, or a new model is swapped into an existing rung, the historical weights learned from the old pricing/capability will actively harm routing decisions. Is there a decay factor on the weights or something else?
For optimizers.py, are you relying purely on boolean arithmetic for these masks, or did you find a more elegant mathematical workaround to avoid the branching overhead entirely?