Example #1
0
        /// <summary>
        /// Copy constructor
        /// </summary>
        /// <param name="Original"></param>
        public Schedule(Schedule Original)
        {
            //Point to same thing as original
            Problem       = Original.Problem;
            PrecedenceDAG = Original.PrecedenceDAG;
            RMs           = Original.RMs;

            //Create new
            Machines = new List <Machine>(Problem.NMachines);

            for (int i = 0; i < Problem.NMachines; i++)
            {
                Machines.Add(new Machine(i + 1, PrecedenceDAG.N));
            }

            Starttimes = new double[PrecedenceDAG.N];
            for (int i = 0; i < Starttimes.Length; i++)
            {
                Starttimes[i] = -1;
            }

            AssignedMachineID = new int[PrecedenceDAG.N];
            for (int i = 0; i < PrecedenceDAG.N; i++)
            {
                AssignedMachineID[i] = -1;
            }
            LSS = new double[PrecedenceDAG.N];
            ESS = new double[PrecedenceDAG.N];
            //MachineArcPointers = new MachineArcPointer[PrecedenceDAG.N];

            //Copy the information:
            Original.ForeachJobInPrecOrderDo(j => AssignJobToMachineById(j.ID, Original.AssignedMachineID[j.ID]));

            this.AssignmentDescription = Original.AssignmentDescription;
            this.StartTimeDescription  = Original.StartTimeDescription;
            CalcESS();
            CalcLSS();
            SetESS();
            for (int i = 0; i < PrecedenceDAG.N; i++)
            {
                if (GetIndexOnMachine(PrecedenceDAG.GetJobById(i)) != Original.GetIndexOnMachine(PrecedenceDAG.GetJobById(i)))
                {
                    throw new Exception("Copy mistake");
                }
                if (AssignedMachine(PrecedenceDAG.GetJobById(i)).MachineID != Original.AssignedMachine(PrecedenceDAG.GetJobById(i)).MachineID)
                {
                    Console.WriteLine("ERROR. Copy mistake with job at index {0}. Testing ForEachJobInPrecOrderDo.. found jobs:", i);
                    Original.ForeachJobInPrecOrderDo(j => Console.WriteLine(j.ID));
                    Original.Print();
                    this.Print();
                    Console.WriteLine("AssignedMachineID {0} neq to Original AssignedMachineID {1}", AssignedMachine(PrecedenceDAG.GetJobById(i)).MachineID, Original.AssignedMachine(PrecedenceDAG.GetJobById(i)).MachineID);
                    throw new Exception("Copy mistake");
                }
            }
        }
Example #2
0
        public Schedule(ProblemInstance prob)
        {
            Problem       = prob;
            PrecedenceDAG = Problem.DAG;
            Machines      = new List <Machine>(prob.NMachines);
            for (int i = 0; i < prob.NMachines; i++)
            {
                Machines.Add(new Machine(i + 1, PrecedenceDAG.N));
            }

            Starttimes = new double[PrecedenceDAG.N];
            for (int i = 0; i < Starttimes.Length; i++)
            {
                Starttimes[i] = -1;
            }

            AssignedMachineID = new int[PrecedenceDAG.N];
            LSS = new double[PrecedenceDAG.N];
            ESS = new double[PrecedenceDAG.N];
            //  MachineArcPointers = new MachineArcPointer[PrecedenceDAG.N];

            RMs = new List <RM>();
        }
Example #3
0
 public ProblemInstance()
 {
     DAG = new DirectedAcyclicGraph();
 }