/// <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"); } } }
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>(); }
public ProblemInstance() { DAG = new DirectedAcyclicGraph(); }