public static int CheckMinSeparation(int[,] individ, List <Flight> FlightsData) { for (int i = 0; i < individ.GetLength(1) - 1; i++) { int NextFlightID = individ[0, i + 1]; int CurrentFlightID = individ[0, i]; char NextFlightCat = FlightsData[NextFlightID].Cat; char CurrentFlightCat = FlightsData[CurrentFlightID].Cat; char NextFlightAD = FlightsData[NextFlightID].AD; char CurrentFlightAD = FlightsData[CurrentFlightID].AD; int SeperationTime = BasicFunctions.GetSeperationDistance(CurrentFlightCat, NextFlightCat, CurrentFlightAD, NextFlightAD); if (Math.Abs(individ[1, i + 1] - individ[1, i]) < SeperationTime) { return(i); } } return(-1); }
private void SetChildTime(ref int[,] Individ, int StartIndex, List <Flight> FlightsData) { int ChildID, ChildLastTime = -1, ChildCurrentScheduledTime; if (StartIndex > 0) { ChildLastTime = Individ[1, StartIndex - 1]; } for (int index = StartIndex; index < Individ.GetLength(1); index++) { ChildID = Individ[0, index]; ChildCurrentScheduledTime = FlightsData[ChildID].intScheduledTime; if (index == 0) { Individ[1, index] = ChildCurrentScheduledTime; } else { int PreviousFlightID = Individ[0, index - 1]; int CurrentFlightID = Individ[0, index]; char PreviousFlightCat = FlightsData[PreviousFlightID].Cat; char CurrentFlightCat = FlightsData[CurrentFlightID].Cat; char PreviousFlightAD = FlightsData[PreviousFlightID].AD; char CurrentFlightAD = FlightsData[CurrentFlightID].AD; int SeperationTime = BasicFunctions.GetSeperationDistance(PreviousFlightCat, CurrentFlightCat, PreviousFlightAD, CurrentFlightAD); if (ChildCurrentScheduledTime >= (ChildLastTime + SeperationTime)) { Individ[1, index] = ChildCurrentScheduledTime; } else { Individ[1, index] = ChildLastTime + SeperationTime; } } ChildLastTime = Individ[1, index]; } }
public int[,] GetRandomSolution(List <Flight> FlightsData) { int[,] result = new int[2, FlightsData.Count]; int resultIndex = 0; List <int> Temp = new List <int>(); int LastAssignedTime = 0; int TempTime = 0; for (int FlightID = 0; FlightID <= result.GetLength(1); FlightID++) { if (FlightID < result.GetLength(1) && Temp.Count == 0) { Temp.Add(FlightID); TempTime = FlightsData[FlightID].intScheduledTime; } else if (FlightID < result.GetLength(1) && FlightsData[FlightID].intScheduledTime == TempTime) { Temp.Add(FlightID); } else { if (FlightID < result.GetLength(1)) { FlightID--; } while (Temp.Count > 0) { int RandIndex = r.Next(Temp.Count); result[0, resultIndex] = Temp[RandIndex]; int SeperationTime; if (resultIndex == 0) { SeperationTime = 0; } else { int PreviousFlightID = result[0, resultIndex - 1]; int CurrentFlightID = result[0, resultIndex]; char PreviousFlightCat = FlightsData[PreviousFlightID].Cat; char CurrentFlightCat = FlightsData[CurrentFlightID].Cat; char PreviousFlightAD = FlightsData[PreviousFlightID].AD; char CurrentFlightAD = FlightsData[CurrentFlightID].AD; SeperationTime = BasicFunctions.GetSeperationDistance(PreviousFlightCat, CurrentFlightCat, PreviousFlightAD, CurrentFlightAD); } if (LastAssignedTime == 0 || FlightsData[Temp[RandIndex]].intScheduledTime - LastAssignedTime >= SeperationTime) { result[1, resultIndex] = FlightsData[Temp[RandIndex]].intScheduledTime; } else { // Per rastet: // LastAssignedTime > FlightsData[Temp[RandIndex]].intScheduledTime // FlightsData[Temp[RandIndex]].intScheduledTime-LastAssignedTime<2 result[1, resultIndex] = LastAssignedTime + SeperationTime; } // Pergaditjet per shtimin e fluturimit vijues LastAssignedTime = result[1, resultIndex]; Temp.RemoveAt(RandIndex); resultIndex++; } } } return(result); }