public static int TotalEnergyCost(this StartTimes startTimes, ExtendedInstance instance)
        {
            int tec = 0;
            var orderedJobsOnMachines = startTimes.GetOrderedJobsOnMachines(instance);

            foreach (var machineIndex in instance.Machines)
            {
                var orderedJobs = orderedJobsOnMachines[machineIndex];

                if (!orderedJobs.Any())
                {
                    tec += instance.OptimalSwitchingCosts.First().Last().Value;
                    continue;
                }

                // Switching to first job.
                {
                    var startInterval = startTimes.StartInterval(orderedJobs.First(), instance);
                    tec += instance.OptimalSwitchingCosts.First()[startInterval.Index].Value;
                }

                // Switching between jobs.
                foreach (var(job, nextJob) in orderedJobs.SuccessionPairs())
                {
                    var completionInterval = startTimes.CompletionInterval(job, instance);
                    var startInterval      = startTimes.StartInterval(nextJob, instance);
                    tec += instance.OptimalSwitchingCosts[completionInterval.Index + 1][startInterval.Index].Value;
                }

                // Switching after last job.
                {
                    var completionInterval = startTimes.CompletionInterval(orderedJobs.Last(), instance);
                    tec += instance.OptimalSwitchingCosts[completionInterval.Index + 1].Last().Value;
                }

                // Costs of processing the jobs.
                foreach (var job in instance.Jobs)
                {
                    var startInterval      = startTimes.StartInterval(job, instance);
                    var completionInterval = startTimes.CompletionInterval(job, instance);
                    tec += instance.TotalEnergyCost(
                        startInterval.Index,
                        completionInterval.Index,
                        instance.OnPowerConsumption);
                }
            }

            return(tec);
        }