public static void print(LinkedList <RcpspJob> globalList, bool withLambda = false) { double bestCore = TabuSearch.calScheduleCore(globalList, withLambda); LinkedListNode <RcpspJob> recursiveNode = globalList.First; Console.WriteLine("total cost is " + bestCore); Console.WriteLine("jobnr\t\tduaration\t\tstarttime\t\tsucessors"); while (recursiveNode != null) { Console.Write(recursiveNode.Value.id + "\t\t\t\t\t" + recursiveNode.Value.startTime + "\t\t" + recursiveNode.Value.duration + "\t\t"); foreach (RcpspJob suces in recursiveNode.Value.successors) { Console.Write(suces.id + "\t"); } Console.WriteLine(); recursiveNode = recursiveNode.Next; } }
static void Main(string[] args) { //Dictionary<string, int> did = new Dictionary<string, int>(); //did.Add("sad", 11); //Console.WriteLine("d is " + did["sad"] + " and d1 is " + did["sad1"]); //int i = 1023; //int j = i / 100; //int k = i % 100; //Console.WriteLine("d is " + i / 100 + " and d1 is " + k); if (args.Length < 1) { Console.WriteLine(" please input multi-projects file"); return; } string fileName = args[0]; //string fileName = "F:\\VSProject\\TabuSearch\\PSP\\bin\\Release\\000.mp";//args[0]; RcpspSolver solve = new RcpspSolver(); solve = RcpspParser.parseMultiProjFile(fileName); //solve.TotalWuWeight = 30; //solve.ProjectList.AddLast(new RcspspProject("0", 10)); //solve.ProjectList.AddLast(new RcspspProject("1", 10)); //solve.ProjectList.AddLast(new RcspspProject("2", 15)); //solve.ProjectList.AddLast(new RcspspProject("3", 5)); //solve.ProjectList.AddLast(new RcspspProject("4", 5)); ////产生所有可行划分和所有划分组合 solve.generateAllPossiblePartation(); ////计算所有组合的最优时间和最优分组 solve.calcAllCombMultiProcess(); foreach (string str in solve.EveryCombBestProj.Keys) { RcspspProject proj = solve.EveryCombBestProj[str]; Console.WriteLine("comb core " + str + "is " + proj.BestSocre + " and list is : "); Console.Write(" "); foreach (RcpspJob job in proj.Jobs) { Console.Write("(" + job.id + "__" + job.project + "__" + job.duration + ")"); } Console.WriteLine(); } RcspspProject bestproj = solve.calAllPartitionScore(); Console.WriteLine("all project end time is "); foreach (RcspspProject proj in solve.ProjectList) { if (proj.Jobs.Count > 1) { RcpspJob lastJob = proj.Jobs.Last.Previous.Value; Console.Write(" " + (lastJob.startTime + lastJob.duration)); } } Console.WriteLine(); Console.WriteLine("best core is " + bestproj.BestSocre + " and partition is " + bestproj.BestCombStr); Console.Write("this List is : "); foreach (RcpspJob job in bestproj.Jobs) { //Console.Write("[" + job.id + "__" + job.project + "__" + job.startTime+"__"+job.duration + "]"); //foreach(RcspspProject proj in solve.ProjectList){ //} if (job.isWX) { RcspspProject wxProject = solve.EveryCombBestProj[job.project]; foreach (RcpspJob wxJob in wxProject.Jobs) { addJob2Dic(solve.ProjectList, wxJob, job.startTime); } } else { addJob2Dic(solve.ProjectList, job); } } //TabuSearch.printGUI(bestproj.Jobs); Console.WriteLine("total time is " + TabuSearch.calScheduleCore(bestproj.Jobs, true)); foreach (RcspspProject proj in solve.ProjectList) { Console.WriteLine("Project " + proj.ProjectId); foreach (RcpspJob projJob in proj.Jobs) { Console.WriteLine(projJob.id + "\t" + projJob.startTime + "\t" + (projJob.startTime + projJob.duration)); } } return; }