private CellAddress findNextMinimum(ProblemTable problemTable, ResolvedTable resolvedTable) { double minimum = Double.MaxValue; CellAddress minCellAddress = null; double[,] prices = problemTable.prices; for (int i = 0; i < prices.GetLength(0); i++) { if (resolvedTable.warehouses[i].getTotal() == 0) { continue; } for (int j = 0; j < prices.GetLength(1); j++) { if (resolvedTable.consumers[j].getRequired() == 0) { continue; } if (minimum > prices[i, j] && resolvedTable.consumed[i, j].getUsage() == 0) { minimum = prices[i, j]; minCellAddress = new CellAddress(i, j); } } } if (minCellAddress == null) { throw new InvalidOperationException("The resolved table is full"); } return(minCellAddress); }
ResolvedTable ITransportProblem.calculate(ProblemTable problemTable) { ResolvedTable resolvedTable = new ResolvedTable(problemTable); while (!resolvedTable.isResolved()) { CellAddress minAddress = findNextMinimum(problemTable, resolvedTable); int usage = Math.Min( resolvedTable.warehouses[minAddress.row].getTotal(), resolvedTable.consumers[minAddress.column].getRequired() ); resolvedTable.consumed[minAddress.row, minAddress.column].setUsage(usage); resolvedTable.warehouses[minAddress.row].resolveByValue(usage); resolvedTable.consumers[minAddress.column].resolveByValue(usage); } return(resolvedTable); }
public IDictionary <string, string> Execute(IEnumerable <ResolvedTable> inputTables, IEnumerable <ResolvedTable> outputTables, IDictionary <string, string> extendedProperties, IActivityLogger logger) { logger.Write(System.Diagnostics.TraceEventType.Information, "Start activity"); modelid = extendedProperties["modelid"]; accountKey = extendedProperties["accountKey"]; baseUri = extendedProperties["baseuri"]; logger.Write(System.Diagnostics.TraceEventType.Information, "modelId: {0}; AccountKey:{1}; BaseUri: {2}", modelid, accountKey, baseUri); logger.Write(System.Diagnostics.TraceEventType.Information, "Start with Export"); try { ResolvedTable inputDataset = datasets.Single(dataset => dataset.Name == activity.Inputs.Single().Name); ResolvedTable = datasets.Single(dataset => dataset.Name == activity.Outputs.Single().Name); RecommendationsApiWrapper api = new RecommendationsApiWrapper(accountKey, baseUri); } catch (Exception ex) { logger.Write(System.Diagnostics.TraceEventType.Error, "Error occurred: {0} - {1}", ex.Message, ex.InnerException.ToString()); } logger.Write(System.Diagnostics.TraceEventType.Information, "end"); return(new Dictionary <string, string>()); }