public FeasibilityStatus Check(
            Instance instance,
            StartTimes startTimes,
            SolverConfig solverConfig,
            int?objective = null)
        {
            this.instance = ExtendedInstance.GetExtendedInstance(instance);
            this.instance.ComputeOptimalSwitchingCosts();    // For TEC computation.

            this.startTimes   = startTimes;
            this.solverConfig = solverConfig;

            this.Job     = null;
            this.NextJob = null;
            this.Machine = null;
            this.Status  = FeasibilityStatus.Unknown;

            var feasible =
                this.EveryJobHasStartTime() &&
                this.JobsWithinHorizon() &&
                this.JobsNotOverlapping() &&
                this.TransitionsExist() &&
                this.ObjectiveCorrespondsWithStartTimes(objective);

            if (feasible)
            {
                this.Status = FeasibilityStatus.Feasible;
            }

            return(this.Status);
        }
Esempio n. 2
0
        public static JsonInstance ToJsonInstance(Instance instance, bool serializeExtendedInstance = true)
        {
            var jsonJobs = instance.Jobs
                           .Select(job => new JsonJob
            {
                Id             = job.Id,
                MachineIdx     = job.MachineIdx,
                ProcessingTime = job.ProcessingTime
            })
                           .ToArray();

            byte[] serializedExtendedInstance = null;
            if (serializeExtendedInstance)
            {
                if (instance.SerializedExtendedInstance != null)
                {
                    serializedExtendedInstance = instance.SerializedExtendedInstance;
                }
                else
                {
                    var extendedInstance = ExtendedInstance.GetExtendedInstance(instance);
                    extendedInstance.Metadata = null;    // Due to metadata possibly not serializable.
                    extendedInstance.GenerateFullExtendedInstance();

                    var stream = new MemoryStream(2048);
                    using (stream)
                    {
                        var bf = new BinaryFormatter();
                        bf.Serialize(stream, extendedInstance);
                    }

                    serializedExtendedInstance = stream.ToArray();
                }
            }

            return(new JsonInstance
            {
                MachinesCount = instance.MachinesCount,
                Jobs = jsonJobs,
                EnergyCosts = instance.Intervals.Select(interval => interval.EnergyCost).ToArray(),
                LengthInterval = instance.LengthInterval,
                OffOnTime = instance.OffOnTime,
                OnOffTime = instance.OnOffTime,
                OffOnPowerConsumption = instance.OffOnPowerConsumption,
                OnOffPowerConsumption = instance.OnOffPowerConsumption,
                OffIdleTime = instance.OffIdleTime,
                IdleOffTime = instance.IdleOffTime,
                OffIdlePowerConsumption = instance.OffIdlePowerConsumption,
                IdleOffPowerConsumption = instance.IdleOffPowerConsumption,
                OnPowerConsumption = instance.OnPowerConsumption,
                IdlePowerConsumption = instance.IdlePowerConsumption,
                OffPowerConsumption = instance.OffPowerConsumption,
                SerializedExtendedInstance = serializedExtendedInstance,
                Metadata = instance.Metadata,
                TimeForExtendedInstance = instance.TimeForExtendedInstance
            });
        }
Esempio n. 3
0
        public void StartTimesTotalEnergyCostTheory(string instanceName, string resultName, int expectedTec)
        {
            var instance         = new InputReader().ReadFromPath(Path.Combine("instances", instanceName));
            var extendedInstance = ExtendedInstance.GetExtendedInstance(instance);

            extendedInstance.ComputeOptimalSwitchingCosts();
            extendedInstance.ComputeGapsLowerBounds();

            var result     = JsonConvert.DeserializeObject <Result>(File.ReadAllText(Path.Combine("results", resultName)));
            var startTimes = new StartTimes(instance, result.StartTimes);

            Assert.Equal(expectedTec, startTimes.TotalEnergyCost(extendedInstance));
        }
Esempio n. 4
0
        private static int Run(CmdOptions opts)
        {
            try
            {
                var config       = GetConfig(opts);
                var solverConfig = config.ToSolverConfig();

                var instance = GetInstance(opts);

                if (config.UseSerializedExtendedInstance)
                {
                    instance = ExtendedInstance.GetExtendedInstance(instance);
                }
                else
                {
                    instance.SerializedExtendedInstance = null;
                }

                CheckInstance(instance);

                var solverResult = Solve(config, solverConfig, instance);
                Console.WriteLine($"Running time: {solverResult.RunningTime}");
                if (solverResult.Status == Status.Heuristic || solverResult.Status == Status.Optimal)
                {
                    Console.WriteLine($"TEC from solver: {solverResult.Objective}");
                    Console.WriteLine($"Lower bound: {solverResult.LowerBound}");
                    Console.WriteLine($"Additional info: {JsonConvert.SerializeObject(solverResult.AdditionalInfo)}");
                }
                else if (solverResult.Status == Status.Infeasible)
                {
                    Console.WriteLine($"The instance is proven to be infeasible.");
                }
                else if (solverResult.Status == Status.NoSolution)
                {
                    Console.WriteLine($"No solution was found.");
                }

                return(0);
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine(ex.Message);
                return(1);
            }
        }
Esempio n. 5
0
 protected virtual void SetInstance(Instance instance)
 {
     this.Instance = ExtendedInstance.GetExtendedInstance(instance);
 }