C# code for FleetBench

C# code for FleetBench

private static void FleetBench(string mainDir, Tasker xr, int nrSecs, byte nrThreads)
{
    string[] files = System.IO.Directory.GetFiles(mainDir + @"\Instances");
    double totCost = 0, percentError = 0, totOptimal = 0;
    int nrInst = 0;

    string logFileName = @"C:\Windows\Temp\instances_result_" + nrSecs.ToString() + "secs_" + nrThreads + "thread_" + DateTime.Now.Ticks + ".txt";
    string htmlFileName = logFileName.Replace(".txt", ".html");
    File.AppendAllText(logFileName, "All Instances, " + nrSecs.ToString() + " seconds, " + nrThreads.ToString() + " threads" + Environment.NewLine);

    foreach (string f in files)
    {
        System.IO.FileInfo fi = new System.IO.FileInfo(f);
        string fileName = fi.Name;
        FleetRouter rout = null;
        if (fileName.Contains("-") && fileName.Contains(".vrp"))
        {
            string comment = "";
            try
            {
                rout = FleetInstance.Read(f, out comment);
                double opt;
                if (comment.ToLower().Contains("optimal value:"))
                    opt = Convert.ToDouble(comment.Substring(comment.ToLower().IndexOf("optimal value:")).Split(')')[0].Trim().Split(' ')[2]);
                else
                    continue; // Skip test without a known optimal
                rout.NrThreads = nrThreads;
                FleetResult res = rout.Solve(nrSecs);
                percentError += Math.Max(res.TotalCost - opt, 0) / opt;
                totCost += res.TotalCost;
                totOptimal += opt;
                nrInst++;
                string optStr = PadToLen(opt.ToString(), 6);
                string totStr = PadToLen(res.TotalCost.ToString(), 6);
                string nrVehiclesStr = PadToLen(res.NrRoutes.ToString(), 2);
                string errStr = PadToLen(Math.Round(100 * Math.Max(res.TotalCost - opt, 0) / opt, 2).ToString() + "%", 6).Replace(",", ".");
                if (res.TotalCost < opt)
                    totStr = "*" + totStr.Substring(0, 5);
                fileName = PadToLen(fileName, 15);
                if (!rout.Verify(res))
                    errStr += "   <VERIFY FAILED>";
                File.AppendAllText(logFileName, fileName + "  Optimal: " + optStr + "  Result: " + totStr + "  Vehicles: " +
                    nrVehiclesStr + "  Error: " + errStr + Environment.NewLine);
                File.AppendAllText(htmlFileName, "<tr><th>" + fileName.Replace(".vrp", "").Trim() + "</th><td>" + opt +
                    "</td><td>" + res.TotalCost + "</td><td>" + res.NrRoutes + "</td><td>" + errStr.Trim() + "</td></tr>");
            }
            catch (Exception ex)
            {
                File.AppendAllText(logFileName, comment + "   Exception: " + ex.Message + Environment.NewLine);
            }
        }
    }
    string text = "SUMMARY Instances " + nrSecs + " seconds!" + Environment.NewLine +
                    "Total cost: " + totCost.ToString() + Environment.NewLine +
                    "Optimal:    " + totOptimal.ToString() + Environment.NewLine +
                    "Error:      " + Math.Round(100.0 * percentError / (double)nrInst, 2).ToString() + "%";
    File.AppendAllText(logFileName, Environment.NewLine + text + Environment.NewLine);
    File.AppendAllText(htmlFileName, "<tr style=\"font-weight:bold\"><th style=\"font-weight:bold\">Summary:</th><td>" + totOptimal +
        "</td><td>" + totCost + "</td><td>N/A</td><td>" + Math.Round(100.0 * percentError / (double)nrInst, 2) + "%</td></tr>");
}
Select all code
Close
Copyright © 2012 Xtreme Route - All Rights Reserved. Contact us: