public async Task <IHttpActionResult> SimulateAndGetResult(RequestVM model) { RecalculateMeasumentUnits(model); var distanceMatrix = await DistanceHelper.GetDistanceMatrix(model); var simulationProcessController = new SimulationProcessController(model, distanceMatrix); var delayTask = Task.Delay(10000); var simulationTask = Task.Run(() => simulationProcessController.StartSimulationProcessSession()); var firstTask = await Task.WhenAny(simulationTask, delayTask); if (firstTask == simulationTask && simulationTask.Result != null) { return(Json(simulationTask.Result)); } return(Content(HttpStatusCode.Accepted, "Для даних об'єктів і ремонтних станцій за допустимий час не вдалось знайти розв'язку")); }
/// <summary> /// If only the coordinates are given, can calculate the distance matrix. /// </summary> /// <returns>A full distance matrix between all cities.</returns> public double[,] GetDistanceMatrix() { return(DistanceHelper.GetDistanceMatrix(DistanceMeasure, Coordinates, Distances, Dimension)); }
private DistanceMatrix CalculateDistanceMatrix(double[,] coordinates) { var distances = DistanceHelper.GetDistanceMatrix(DistanceMeasure.Euclidean, coordinates, null, coordinates.GetLength(0)); return(new DistanceMatrix(distances)); }