private void InitializeCleanConfiguredMachinesList(List <Machine> rawMachines)
        {
            ConfiguredMachines.Clear();

            foreach (var machine in rawMachines)
            {
                ConfiguredMachines.Add(new Machine((Machine)machine.Clone()));
            }

            foreach (var machine in ConfiguredMachines)
            {
                machine.Tasks.Clear();
            }
        }
        private void GetBestConfigurationForCurrentIteration()
        {
            SimulateConfiguration();
            cMax = ConfiguredMachines.Last().Tasks.Last().TaskStop;
            bestMachineConfiguration.Clear();
            ConfiguredMachines.ForEach((item) =>
            {
                bestMachineConfiguration.Add(new Machine((Machine)item.Clone()));
            });

            for (int i = 0; i < ConfiguredMachines[0].Tasks.Count - 1; i++)
            {
                foreach (var machine in ConfiguredMachines)
                {
                    CustomSwaps.Swap(machine.Tasks, i, machine.Tasks.Count - 1);
                }

                SimulateConfiguration();
                if (cMax > ConfiguredMachines.Last().Tasks.Last().TaskStop)
                {
                    cMax = ConfiguredMachines.Last().Tasks.Last().TaskStop;
                    bestMachineConfiguration.Clear();
                    ConfiguredMachines.ForEach((item) =>
                    {
                        bestMachineConfiguration.Add(new Machine((Machine)item.Clone()));
                    });
                }

                foreach (var machine in ConfiguredMachines)
                {
                    CustomSwaps.Swap(machine.Tasks, i, machine.Tasks.Count - 1);
                }
            }

            ConfiguredMachines.Clear();
            bestMachineConfiguration.ForEach((item) =>
            {
                ConfiguredMachines.Add(new Machine((Machine)item.Clone()));
            });
        }