static void Main(string[] args) { Console.WriteLine("Enter number of elements: "); int num = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter size of population: "); int pop = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Enter set id: "); string setID = Convert.ToString(Console.ReadLine()); Console.WriteLine("Enter end time in seconds: "); int timmy = Convert.ToInt32(Console.ReadLine()); //Console.WriteLine("Enter smooth parameter: "); //double smooth = Convert.ToDouble(Console.ReadLine()); //Console.WriteLine("Enter evaporate parameter: "); //double eva = Convert.ToDouble(Console.ReadLine()); AcoMaster aco = new AcoMaster(); aco.endVar = new TimeSpan(0, 0, timmy); Console.WriteLine(setID); aco.setID = (setID); aco.SetData(num); aco.Init(num, pop, 6.5, 0.05); Console.WriteLine("Click any key to continue.."); Console.ReadLine(); }
public void TransferWithRoulette(InstationGenerator tmp, AcoMaster tmr) { ArrayList trs = new ArrayList(); foreach (Entity el in elements) { Entity a = (Entity)el.Clone(); trs.Add(a); } tmp.CreateNewInstantion(trs, maintances, true, tmr); }
private void FillSecondMachine(ArrayList secondMachineTasks, ArrayList secondMachineTempMaintance, Machine secondMachine, ArrayList firstMachineTasks, bool usingTable, int tableEl, AcoMaster ACO) { if (usingTable == true) { Random rnd = new Random(); while (secondMachineTasks.Count > 0) { TimeSpan span = new TimeSpan(0, 0, 0); TimeSpan perc = (span = DateTime.Now - MyTimer.Start); double ft = span.Seconds; double sc = ACO.endVar.Seconds + (60 * ACO.endVar.Minutes); int holder = (int)((ft / sc) * 100); int roultette = rnd.Next(0, 100); int pos = 0; if (roultette < holder) { int a = secondMachine.GetLastElementID(); int take = WhichElementIShouldTake(ACO.arrx2, a); if (IsPossibleToTakeFromList(secondMachineTasks, take) == true) { pos = GetPositionAtList(take, secondMachineTasks); } else { take = WhichElementIShouldTake(ACO.arrx2, a); if (IsPossibleToTakeFromList(secondMachineTasks, take) == true) { pos = GetPositionAtList(take, secondMachineTasks); } else { pos = 0; } } } else { pos = 0; } Entity element = (Entity)secondMachineTasks[pos]; bool added = false; while (!added) { if (GetEndTimeOfPair(firstMachine.getMachineList(), element.GetOperationID()) < secondMachine.GetLastEndTime()) { if (secondMachineTempMaintance.Count != 0 && getTimeOfNextMaintance(secondMachineTempMaintance) <= (secondMachine.GetLastEndTime() + element.GetTime())) { Entity maint = (Entity)secondMachineTempMaintance[0]; if (maint.GetStartTime() > secondMachine.GetLastEndTime()) { Entity idle = new Entity(2, 0, 0, 1, 0, 0, 0); idle.SetStartTime(secondMachine.GetLastEndTime() + 1); idle.SetTime(maint.GetStartTime() - secondMachine.GetLastEndTime()); idle.SetEndTime(idle.GetStartTime() + idle.GetTime()); secondMachine.AddElement(idle); } secondMachine.AddElement(maint); secondMachineTempMaintance.Remove(maint); } else { element.SetStartTime(secondMachine.GetLastEndTime() + 1); element.SetEndTime(element.GetStartTime() + element.GetTime()); secondMachine.AddElement(element); secondMachineTasks.Remove(element); added = true; } } else { if (secondMachineTempMaintance.Count != 0 && getTimeOfNextMaintance(secondMachineTempMaintance) < (element.GetTime() + GetEndTimeOfPair(firstMachine.getMachineList(), element.GetOperationID()))) { Entity maint = (Entity)secondMachineTempMaintance[0]; if (maint.GetStartTime() > secondMachine.GetLastEndTime()) { Entity idle = new Entity(2, 0, 0, 1, 0, 0, 0); idle.SetStartTime(secondMachine.GetLastEndTime() + 1); idle.SetTime(maint.GetStartTime() - secondMachine.GetLastEndTime()); idle.SetEndTime(idle.GetStartTime() + idle.GetTime()); secondMachine.AddElement(idle); } element.SetStartTime(secondMachine.GetLastEndTime() + 1); element.SetEndTime(element.GetStartTime() + element.GetTime()); secondMachine.AddElement(maint); secondMachineTempMaintance.Remove(maint); } else { if (GetEndTimeOfPair(firstMachine.getMachineList(), element.GetOperationID()) > secondMachine.GetLastEndTime()) { Entity idle = new Entity(2, 0, 0, 1, 0, 0, 0); idle.SetStartTime(secondMachine.GetLastEndTime() + 1); idle.SetTime(GetEndTimeOfPair(firstMachine.getMachineList(), element.GetOperationID()) - secondMachine.GetLastEndTime()); idle.SetEndTime(idle.GetStartTime() + idle.GetTime()); secondMachine.AddElement(idle); } element.SetStartTime(secondMachine.GetLastEndTime() + 1); element.SetEndTime(element.GetStartTime() + element.GetTime()); secondMachine.AddElement(element); secondMachineTempMaintance.Remove(element); added = true; } } } } } else { } }
public void CreateNewInstantion(ArrayList fullList, ArrayList maintances, bool roulette, AcoMaster ACO) { firstMachine = new Machine(); firstMachine.SetMachineNumber(0); firstMachine.SetNumberOfElements(size); secondMachine = new Machine(); ArrayList firstMachineTemp = new ArrayList(); ArrayList secondMachineTemp = new ArrayList(); ArrayList firstMachineTempMaintance = new ArrayList(); ArrayList secondMachineTempMaintance = new ArrayList(); Random r = new Random(); int randomIndex = 0; foreach (Entity element in fullList) { if (element.GetMachine() == 0) { firstMachineTemp.Add(element); } else { secondMachineTemp.Add(element); } } foreach (Entity element in maintances) { if (element.GetMachine() == 0) { firstMachineTempMaintance.Add(element); } else { secondMachineTempMaintance.Add(element); } } while (firstMachineTemp.Count > 0) { randomIndex = r.Next(0, firstMachineTemp.Count); //Choose a random object in the list firstMachineTasks.Add(firstMachineTemp[randomIndex]); //add it to the new, random list firstMachineTemp.RemoveAt(randomIndex); //remove to avoid duplicates } while (secondMachineTemp.Count > 0) { randomIndex = r.Next(0, secondMachineTemp.Count); //Choose a random object in the list secondMachineTasks.Add(secondMachineTemp[randomIndex]); //add it to the new, random list secondMachineTemp.RemoveAt(randomIndex); //remove to avoid duplicates } //Console.WriteLine("SHUFFLE DONE!"); if (roulette == false) { FillFirstMachine(firstMachineTasks, firstMachineTempMaintance, firstMachine, false, 0, ACO); FillSecondMachine(secondMachineTasks, secondMachineTempMaintance, secondMachine, firstMachineTasks, false, 0, ACO); } else if (roulette == true) { FillFirstMachine(firstMachineTasks, firstMachineTempMaintance, firstMachine, true, 0, ACO); FillSecondMachine(secondMachineTasks, secondMachineTempMaintance, secondMachine, firstMachineTasks, true, 0, ACO); } //Console.WriteLine("FILLING DONE!"); //PrintFirstMachine(); //PrintSecondMachine(); }