/// <summary> /// Create a problem /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button5_Click(object sender, EventArgs e) // create a problem { int travelers; if (!int.TryParse(txtTravelersAmount.Text, out travelers)) { MessageBox.Show("Please write a number"); return; } DistanceOperator dOp; if (ControlProgram.tsp != null) // Load From TSPLib95 { TransferTspLibItemToPoints(); dOp = new DistanceOperator(ControlProgram.tsp.Problem.NodeProvider.CountNodes()); dOp.CalculateDistance(ControlProgram.tsp.Problem); } else { dOp = new DistanceOperator(this.Points.Count, Points); } TspManager = new TSPManager(dOp, travelers, int.Parse(cmbDepoId.Text), NextGeneration); ReportManager pManager = new ReportManager(1, 2, ControlProgram.tsp.Problem.Name); TspManager.NextGenerationEvent += pManager.NextGeneration; ControlProgram.Start(TspManager.Population, TspManager.dOp, TspManager.Environment); btnRun.Enabled = true; btnChooseOperator.Enabled = true; }
public ActionResult GetShortestPath(BaiduApiMTspRequest request) { var dOp = new DistanceOperator(request.Count, request.DistancesMatrix); TSPManager tspManager = new TSPManager(dOp, request.TravellerAmount, request.Home); tspManager.Start(); var response = tspManager.GetFullDistancesInArray(); return(Json(response)); }
static void Main(string[] args) { //timerInterval = new List<double> //{ // 100 //}; //duration = new List<double> //{ // 600 //}; TspLib95 lib = new TspLib95(tspLibPath); var tspList = lib.LoadAllTSP().ToList(); var tspItemNumbers = new List <int> { 39 // - 21 city , 2 //- 49 , 27 //- 70+ , 25 //- 101 , 44 //- 666 }; var tspItems = new Dictionary <int, TspLib95Item>(); foreach (var id in tspItemNumbers) { tspItems.Add(id, tspList[id]); } List <ICrossoverOperator> crossovers = new List <ICrossoverOperator>() { new CrossoverOperatorOX(), new CrossoverOperatorPMX(), new CrossoverOperatorAEX(), //new CrossoverOperatorAEXWithShortestDistance() }; List <IMutationOperator> mutations = new List <IMutationOperator>() { new MutationOperatorRSM(), new MutationOperatorInsertions(), new MutationOperatorPSM(), //new MutationOperatorHalfRSMHalfPSM(), }; var number = 100; //int city = 0, cI = 0, mI = 0, nI = 0; //var dOp = new DistanceOperator(tspItems[tspItemNumbers[city]].Problem.NodeProvider.CountNodes()); //dOp.CalculateDistance(tspItems[tspItemNumbers[city]].Problem); //ChromosomeOperator.ChangeOperator(crossovers[cI]); //ChromosomeOperator.ChangeOperator(mutations[mI]); //var reportManager = new ReportManager(number[nI], tspItemNumbers[city], // tspItems[tspItemNumbers[city]].Problem.Name); //var tspManager = new TSPManager(dOp, 1, 1, reportManager.NextGeneration); //tspManager.Start(); //reportManager.EndOfAlgorithm(tspManager.Population); var indx = 0; var total = tspItemNumbers.Count * crossovers.Count * mutations.Count * number; for (int city = 0; city < tspItemNumbers.Count; city++) { var dOp = new DistanceOperator(tspItems[tspItemNumbers[city]].Problem.NodeProvider.CountNodes()); dOp.CalculateDistance(tspItems[tspItemNumbers[city]].Problem); for (int cI = 0; cI < crossovers.Count; cI++) { ChromosomeOperator.ChangeOperator(crossovers[cI]); for (int mI = 0; mI < mutations.Count; mI++) { ChromosomeOperator.ChangeOperator(mutations[mI]); for (int nI = 2; nI <= number; nI++) { Console.WriteLine("{0}%", (double)indx / total * 100); Console.WriteLine("start {0} : {1} {2} {3} {4}", indx++, tspItemNumbers[city], crossovers[cI].GetType().Name, mutations[mI].GetType().Name, nI ); var reportManager = new ReportManager(nI, tspItemNumbers[city], tspItems[tspItemNumbers[city]].Problem.Name); //var tspManager = new TSPManager(dOp, 1, 1, reportManager.NextGeneration); var tspManager = new TSPManager(dOp, 1, 1, reportManager.NextGeneration); var timer = new Timer(timerInterval[city]); currentCity = city; timer.Elapsed += NextTick; SetUpNewTest(tspManager.Population, reportManager); timer.Start(); tspManager.Start(StopFunc); timer.Stop(); reportManager.EndOfAlgorithm(tspManager.Population); } } } } }