why `virtual` and why `train_all`?
please investigate the API of `CMachine`