public List <PosXYZ> Optimize(List <PosXYZ> pos) { if (pos.Count > 20) { var ped1pos = pos.FindAll(p => p.Name == "ped1"); var ped2pos = pos.FindAll(p => p.Name == "ped2"); var orderpos = new List <PosXYZ>(); orderpos.AddRange(pos); orderpos.RemoveAll(p => p.Name.StartsWith("ped")); orderpos.Add(ped1pos.Last()); orderpos.Add(ped2pos.Last()); var trajDp = new DpTsp(new PosGraph(orderpos)); trajDp.RunTsp(); var order = trajDp.Order; pos.Clear(); for (int i = 0; i < orderpos.Count; i++) { if (orderpos[order[i] - 1].Name == "ped1") { pos.AddRange(ped1pos); } else if (orderpos[order[i] - 1].Name == "ped2") { pos.AddRange(ped2pos); } else { pos.Add(orderpos[order[i] - 1]); } } } else { var orderpos = new List <PosXYZ>(); orderpos.AddRange(pos); var trajDp = new DpTsp(new PosGraph(orderpos)); trajDp.RunTsp(); var order = trajDp.Order; pos.Clear(); for (int i = 0; i < orderpos.Count; i++) { pos.Add(orderpos[order[i] - 1]); } } return(pos); }
public void TestMethod_GraphTest() { var fprj = FlatnessProject.Load(@".\Config2\P2\A147NoFinV10.fprj"); var pos = fprj.ProductSettings.DownTestPositions; var ped1 = pos.FindAll(p => p.Name.StartsWith("ped1")); var ped2 = pos.FindAll(p => p.Name.StartsWith("ped2")); pos.RemoveAll(p => p.Name.StartsWith("ped1")); pos.RemoveAll(p => p.Name.StartsWith("ped2")); pos.RemoveAll(p => p.Name.StartsWith("down")); pos.Add(ped1.Last()); pos.Add(ped2.Last()); { var graph = new PosGraph(pos); Console.WriteLine(graph.ToString()); } { Console.WriteLine("------------BackTsp----------------"); Console.WriteLine(pos.Count); Console.WriteLine("----------------------------------"); var tcp = new BackTsp(new PosGraph(pos)); Console.WriteLine(tcp.RunTsp()); Console.WriteLine("----------------------------------"); } { Console.WriteLine("------------DpTsp----------------"); Console.WriteLine(pos.Count); Console.WriteLine("----------------------------------"); var tcp = new DpTsp(new PosGraph(pos)); Console.WriteLine(tcp.RunTsp()); Console.WriteLine("----------------------------------"); } }