public static void Full_Sys_Test_Alternative() { int dim = 32; int testcases = 20; int dws = 80; int K = 20; int maxSearch = 500; int ntrees = 3; int nrand = 100; int ddeter = 1; double ratio = .4; double prune = 1.5; Random random = new Random(); PointSet ps = new PointSet("ColorHistogram.asc", 1, ' '); ps.NormalizePoints(); //Indexes var bruteForce = new BruteForce(ps); var standardTree = new KDTree(ps, false); var standardForest = new KDTreeForestHolder(ps, ddeter, nrand, false, false); //Result holders var standardDist = new List <double>(); var queryDist = new List <double>(); var standardDist_f = new List <double>(); for (int i = 0; i < dws; i++) { Console.WriteLine(dim + " " + i); var querydw = new DimWeight(dim, random); var queryTree = new KDTree(ps, querydw, false); for (int j = 0; j < testcases; j++) { var p = ps.Points[random.Next(ps.Points.Count())]; var bfd = bruteForce.GetKNN(p, K, querydw).GetMeanDistance(p, querydw); standardDist.Add(standardTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); queryDist.Add(queryTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); standardDist_f.Add(standardForest.GetANN(p, querydw, K, ntrees, ratio, prune, maxSearch).GetMeanDistance(p, querydw) / bfd - 1); } } Console.WriteLine(standardDist.Average() + "," + standardDist_f.Average() + "," + queryDist.Average()); }
public static void Full_Sys_Test_Nrand() { int dim = 8; int npoint = 100000; int testcases = 20; int dws = 80; int K = 20; int maxSearch = 500; int ntrees = 3; var nrands = new List <int>() { 20, 50, 100, 200, 400 }; int ddeter = 1; double ratio = .4; double prune = 1.5; var lines = new List <string>(); string filename = "resultsnrand.csv"; Random random = new Random(); foreach (var nrand in nrands) { PointSet ps = new PointSet(dim); for (int i = 0; i < npoint; i++) { ps.AddPoint(new Point(dim, random)); } //Indexes var bruteForce = new BruteForce(ps); var standardTree = new KDTree(ps, false); var standardForest = new KDTreeForestHolder(ps, ddeter, nrand, false, false); //Result holders var standardDist = new List <double>(); var queryDist = new List <double>(); var standardDist_f = new List <double>(); for (int i = 0; i < dws; i++) { Console.WriteLine(dim + " " + i); var querydw = new DimWeight(dim, random); var queryTree = new KDTree(ps, querydw, false); for (int j = 0; j < testcases; j++) { var p = new Point(dim, random); var bfd = bruteForce.GetKNN(p, K, querydw).GetMeanDistance(p, querydw); standardDist.Add(standardTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); queryDist.Add(queryTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); double val = standardForest.GetANN(p, querydw, K, ntrees, ratio, prune, maxSearch).GetMeanDistance(p, querydw) / bfd - 1; if (!Double.IsNaN(val) && val < 1000) { standardDist_f.Add(val); } } } lines.Add(standardDist.Average() + "," + standardDist_f.Average() + "," + queryDist.Average()); } System.IO.File.WriteAllLines(filename, lines); }
public static void Full_Sys_Test_nSearch() { int dim = 8; int npoint = 100000; int testcases = 20; int dws = 80; int K = 20; var maxSearchs = new List <int>() { 50, 200, 500, 2000, 8000 }; int ntrees = 3; int nrand = 100; int ddeter = 1; double ratio = .4; double prune = 1.5; var lines = new List <string>(); string filename = "resultsnsearch.csv"; Random random = new Random(); PointSet ps = new PointSet(dim); for (int i = 0; i < npoint; i++) { ps.AddPoint(new Point(dim, random)); } //Indexes var bruteForce = new BruteForce(ps); var standardTree = new KDTree(ps, false); var standardForest = new KDTreeForestHolder(ps, ddeter, nrand, false, false); //Result holders var standardDist = new List <List <double> >(); var queryDist = new List <List <double> >(); var standardDist_f = new List <List <double> >(); for (int i = 0; i < maxSearchs.Count(); i++) { standardDist.Add(new List <double>()); queryDist.Add(new List <double>()); standardDist_f.Add(new List <double>()); } for (int i = 0; i < dws; i++) { Console.WriteLine(dim + " " + i); var querydw = new DimWeight(dim, random); var queryTree = new KDTree(ps, querydw, false); for (int j = 0; j < testcases; j++) { var p = new Point(dim, random); var bfd = bruteForce.GetKNN(p, K, querydw).GetMeanDistance(p, querydw); foreach (var maxSearch in maxSearchs) { int indx = 0; standardDist[indx].Add(standardTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); queryDist[indx].Add(queryTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); standardDist_f[indx].Add(standardForest.GetANN(p, querydw, K, ntrees, ratio, prune, maxSearch).GetMeanDistance(p, querydw) / bfd - 1); indx++; } } } for (int i = 0; i < standardDist.Count(); i++) { lines.Add(standardDist[i].Average() + "," + queryDist[i].Average() + "," + standardDist_f[i].Average()); } System.IO.File.WriteAllLines(filename, lines); }
public static void Full_Sys_Test_ExtremeDRV() { int dim = 8; int npoint = 100000; int testcases = 10; int dws = 50; int K = 20; int maxSearch = 500; int ntrees = 3; int nrand = 50; int ddeter = 3; double ratio = .4; double prune = 1.5; double selper = .125; Random random = new Random(); PointSet ps = new PointSet(dim); for (int i = 0; i < npoint; i++) { ps.AddPoint(new Point(dim, random)); } ////garbage //var p2 = new Point(dim, random); //var querydw2 = new DimWeight(dim, 0, random); //var queryTree2 = new KDTree(ps, querydw2, false); //var tmp = queryTree2.root.GetANN(p2, K, maxSearch, querydw2); //Indexes var bruteForce = new BruteForce(ps); var standardTree = new KDTree(ps, false); var standardForest = new KDTreeForestHolder(ps, ddeter, nrand, false, false); var standardTree_r = new KDTree(ps, true); var standardForest_r = new KDTreeForestHolder(ps, ddeter, nrand, false, true); //Result holders var standardDist = new List <double>(); var queryDist = new List <double>(); var standardDist_f = new List <double>(); var standardDist_r = new List <double>(); var queryDist_r = new List <double>(); var standardDist_f_r = new List <double>(); for (int i = 0; i < dws; i++) { Console.WriteLine(i); var querydw = new DimWeight(dim, selper, random); var queryTree = new KDTree(ps, querydw, false); var queryTree_r = new KDTree(ps, querydw, true); for (int j = 0; j < testcases; j++) { var p = new Point(dim, random); var bfd = bruteForce.GetKNN(p, K, querydw).GetMeanDistance(p, querydw); standardDist.Add(standardTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); queryDist.Add(queryTree.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); standardDist_f.Add(standardForest.GetANN(p, querydw, K, ntrees, ratio, prune, maxSearch).GetMeanDistance(p, querydw) / bfd - 1); standardDist_r.Add(standardTree_r.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); queryDist_r.Add(queryTree_r.root.GetANN(p, K, maxSearch, querydw).GetMeanDistance(p, querydw) / bfd - 1); standardDist_f_r.Add(standardForest_r.GetANN(p, querydw, K, ntrees, ratio, prune, maxSearch).GetMeanDistance(p, querydw) / bfd - 1); } } Console.WriteLine(standardDist.Average() + " " + standardDist_f.Average() + " " + queryDist.Average()); Console.WriteLine(standardDist_r.Average() + " " + standardDist_f_r.Average() + " " + queryDist_r.Average()); Console.WriteLine(stdev(standardDist) + " " + stdev(standardDist_f) + " " + stdev(queryDist)); Console.WriteLine(stdev(standardDist_r) + " " + stdev(standardDist_f_r) + " " + stdev(queryDist_r)); }