public Level(
                uint level,
                ProblemTower tower)
            {
                Debug.Assert(level < tower.Environment.MaxLevels);

                Index = level;
                Tower = tower;
                var env = Tower.Environment;

                Factory = env.Factory[1];                 // Use a lower priority than the factory used by broadcasting.

                var(First, Minimum, Step) = env.PoolSize;
                var maxDelta  = First - Minimum;
                var decrement = Index * Step;

                var poolCount = tower.Problem.Pools.Count;

                BestLevelFitness       = new double[poolCount][];
                BestProgressiveFitness = new double[poolCount][];
                //IsMaxLevel = level + 1 == tower.Environment.MaxLevels;

                PoolSize = decrement > maxDelta ? Minimum : (ushort)(First - decrement);
                Pool     = new BatchCreator <LevelEntry <TGenome> >(PoolSize);
            }
 public void BigTask_Example()
 {
     using (var logic = new MessagesModuleLogic(new MessageContext(Settings.MessageContextConnectionString))) {
         using (var sqlLogic = new SqlLogic(new SqlConnectionFactory(Settings.SqlConnectionString))) {
             using (var manager = NewInstance(new DateTime(2015, 9, 3), new DateTime(2017, 9, 5), sqlLogic, logic)) {
                 var shedules = manager.GetActualMessageSchedules();
                 var creator  = new BatchCreator(manager);
                 var results  = new List <BatchCreationResult>();
                 foreach (var sched in shedules)
                 {
                     results.Add(creator.CreateBatch(sched, 0));
                 }
                 //manager.SaveResultsToDB(results);
             }
         }
     }
 }
        private void btGenerateTopX_Click(object sender, EventArgs e)
        {
            if (chkCreateBatchesSubdir.Checked)
            {
                if (!Directory.Exists(txtBatchSourceDirectory.Text))
                {
                    var msgText = string.IsNullOrEmpty(txtBatchSourceDirectory.Text)
                        ? "Wanneer 'Maak directories' is aangevinkt, moet de directory worden aangegeven waar de bronbestanden staan."
                        : $"Bron-directory {txtBatchSourceDirectory.Text} kan niet worden gevonden.";

                    MessageBox.Show(msgText);
                    return;
                }
                if (!Directory.Exists(txtBatchTargetDirectory.Text))
                {
                    var msgText = string.IsNullOrEmpty(txtBatchSourceDirectory.Text)
                        ? "Wanneer 'Maak directories' is aangevinkt, moet de directory worden aangegeven waar de doelbestanden naartoe gekopieerd moeten worden."
                        : $"Doel-directory {txtBatchTargetDirectory.Text} kan niet worden gevonden.";

                    MessageBox.Show(msgText);
                    return;
                }
            }

            try
            {
                _resultRecordInformationPackage = null;
                txtLogTopXCreate.Text           = string.Empty;
                txtResultXml.Text = string.Empty;

                Cursor.Current = Cursors.WaitCursor;
                var parser = new Parser(_globals, _dataservice);

                var listofdossiers = _dataservice.GetAllDossiers();

                var batchSize = (long)ByteSize.FromGigaBytes(Convert.ToDouble(txtBatchSize.Text)).Bytes;

                _resultRecordInformationPackage = chkUseBatchSize.Checked
                    ? parser.ParseDataToTopx(listofdossiers, batchSize)
                    : parser.ParseDataToTopx(listofdossiers);

                txtLogTopXCreate.Text = parser.ErrorMessage.ToString();

                Cursor.Current = Cursors.Default;

                if (_resultRecordInformationPackage == null || parser.ErrorMessage.Length != 0)
                {
                    btSaveTopxXml.Enabled = false;
                    MessageBox.Show("Er zijn fouten opgetreden tijdens de conversie, TopX xml kan niet worden gegenereerd", "xml", MessageBoxButtons.OK);
                }
                else
                {
                    btSaveTopxXml.Enabled = true;
                    var xmlhelper  = new XmlHelper();
                    var topXResult = xmlhelper.GetXmlStringFromObject(_resultRecordInformationPackage[0]);
                    txtResultXml.Text     = topXResult;
                    txtLogTopXCreate.Text = xmlhelper.ValidationErrors.ToString();

                    if (string.IsNullOrEmpty(topXResult) && xmlhelper.ValidationErrors.Length > 0)
                    {
                        MessageBox.Show("Er zijn geen dossiers zonder validatiefouten om te exporteren.");
                        return;
                    }

                    if (_resultRecordInformationPackage.Count > 1 && chkUseBatchSize.Checked && !chkCreateBatchesSubdir.Checked)
                    {
                        var message =
                            $"Er zijn {_resultRecordInformationPackage.Count} TopX-files gegenereerd om de grootte per file te limiteren tot maximaal {txtBatchSize.Text} GB. Wilt u deze opslaan?";
                        if (MessageBox.Show(message, "xml", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            SaveAsXml(_resultRecordInformationPackage);
                        }
                    }
                    else if (_resultRecordInformationPackage.Count == 1 && !chkCreateBatchesSubdir.Checked)
                    {
                        var message = "Save TopX xml?";
                        if (MessageBox.Show(message, "xml", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            SaveAsXml(_resultRecordInformationPackage);
                        }
                    }
                    else if (chkCreateBatchesSubdir.Checked)
                    {
                        var message =
                            $"De batches worden opgeslagen in subdirectories onder {txtBatchTargetDirectory.Text}. Alle reeds aanwezige subdirectories worden GEWIST " +
                            $"om het resultaat zuiver te houden. {Environment.NewLine}Het kopiƫren van alle bestanden kan enige tijd kosten, met name wanneer dit over een netwerk gaat. Doorgaan?";
                        if (MessageBox.Show(message, "batches", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            Cursor.Current = Cursors.WaitCursor;
                            if (DeleteSubDirs(txtBatchTargetDirectory.Text))
                            {
                                ulong totalDiskSizeNeeded = _dataservice.GetTotalSizeNeededBytes();
                                var   batches             = new BatchCreator();

                                batches.Create(txtBatchTargetDirectory.Text, txtBatchSourceDirectory.Text, _resultRecordInformationPackage, _globals.NaamArchief, totalDiskSizeNeeded);
                                Cursor.Current = Cursors.Default;

                                txtLogTopXCreate.Text = batches.Logs.ToString();
                                MessageBox.Show(batches.Error
                                    ? "Er zijn fouten opgetreden bij het samenstellen van de batches. Zie de error-log."
                                    : "De batches zijn succesvol samengesteld.");
                            }
                            Cursor.Current = Cursors.Default;
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Cursor.Current = Cursors.Default;
                MessageBox.Show(exception.Message);
                txtLogTopXCreate.Text = exception.ToString();
            }
        }