/* * static void Main() * { * runTests(); * } */ static void runTests() { List <TSPInput> inputs = new List <TSPInput>(); for (int i = 5; i < 10; i++) { for (int j = 0; j < 10; j++) { inputs.Add(TSPGenerator.generateUniform(i)); } } TSPPreprocessor p = new TSPPreprocessor(); TreeEvaluator e = new TreeEvaluator(); Console.WriteLine("Number\tsize\tnormal\tbest\ttime (sec)"); for (int i = 0; i < inputs.Count; i++) { Console.Write(i + "\t" + inputs[i].nodesCount + "\t"); TreeNode root = TreeSolver.buildTree(inputs[i]); Console.Write(e.eval(root) + "\t"); DateTime start = DateTime.Now; p.findBestPermutation(inputs[i]); DateTime end = DateTime.Now; Console.WriteLine(p.bestFitness + "\t" + (end - start).TotalSeconds); } }
public void buildTree(List <int> permutation = null) { root = TreeSolver.buildTree(inp, permutation); this.leafsCount = root.computeLeafs(); minVal = root.getMinimum(); maxVal = root.getMaximum(); treeDepth = root.getDepth(); }
public TreeVisualizer(TreeSolver s) { this.solver = s; this.treePB = s.treePictureBox; this.fitnessPB = s.fitnessPictureBox; this.width = treePB.Width; this.height = treePB.Height; this.treePB.Image = new Bitmap(width, height); gTree = Graphics.FromImage(treePB.Image); this.fitnessPB.Image = new Bitmap(fitnessPB.Width, fitnessPB.Height); gFitness = Graphics.FromImage(fitnessPB.Image); }
private void CreateTreeButton_Click(object sender, EventArgs e) { if (treeS == null || treeS.IsDisposed) { treeS = new TreeSolver(inp); } treeS.inp = inp; treeS.Show(); treeS.buildTree(); treeS.computeLeafs(); Length_label.Text = treeS.leafsCount.ToString(); TreeVisualizer tviz = new TreeVisualizer(treeS); tviz.draw(treeS.root, treeS.maxVal, treeS.minVal); }
private void searchPermutations(List <int> available, List <int> permutation) { if (available.Count == 0) { root = TreeSolver.buildTree(inp, permutation); double val = evaluator.eval(root, permutation); if (val < bestFitness) { bestFitness = val; bestPermutation.Clear(); bestPermutation.AddRange(permutation); } return; } for (int i = 0; i < available.Count; i++) { permutation.Add(available[i]); available.RemoveAt(i); searchPermutations(available, permutation); available.Insert(i, permutation[permutation.Count - 1]); permutation.RemoveAt(permutation.Count - 1); } }