public async Task Start(Action <KnbOptions> action)
        {
            var options = new KnbOptions();

            action.Invoke(options);

            if (string.IsNullOrWhiteSpace(options.FileName))
            {
                throw new ArgumentException();
            }

            CardSelectorOptions.MlModelFileName = options.MlModelFileName;

            KnbSimulator = ServiceProvider.GetService <IKnbSimulator>() ?? throw new InvalidOperationException();

            KnbSimulator.OnPeriodChange     = OnPeriodChange ?? KnbSimulator.OnPeriodChange;
            KnbSimulator.OnPlayFinished     = OnPlayFinished ?? KnbSimulator.OnPlayFinished;
            KnbSimulator.OnSimulatorStopped = OnSimulatorStopped ?? KnbSimulator.OnSimulatorStopped;

            await KnbSimulator.Start(op =>
            {
                op.FileName           = options.FileName;
                op.MlModelFileName    = options.MlModelFileName;
                op.NoOfTimes          = options.NoOfTimes;
                op.NoOfCardPacks      = options.NoOfCardPacks;
                op.NoOfPlayers        = options.NoOfPlayers;
                op.NoOfTimesPerPeriod = options.NoOfTimesPerPeriod;
            });
        }
 public void Stop()
 {
     KnbSimulator.Stop();
 }