protected override bool CheckCommodity() { linEquationContext.TCPELinProgMatrix = new LinEquationsMatrix(); ILinEqsAlgorithmProvider linEqsAlgorithmProvider = configuration.Get <ILinEqsAlgorithmProvider>(); LinEqsSetBuilder tcpeLinProgBuilder = linEqsAlgorithmProvider.GetLinEquationsSetBuilder( meapContext, tapeSegContext, linEquationContext); tcpeLinProgBuilder.CreateTCPEPLinProgEqsSet(); AddCommodityCheckEquation(); SparseMatrix A = linEquationContext.TCPELinProgMatrix.GetLinEqSetSparseMatrix(); LinEqSetSolverSparse linEqSetSolver = new(A); return(linEqSetSolver.IfSolutionExists()); }
public void Step2() { log.Info("TCPEP optimizer: step2"); ITPLOptions tplOptions = configuration.Get <ITPLOptions>(); uint linEqSetRunnersCount = tplOptions.LinEqSetRunnersCount; Commodity[] commoditiesToCheck = commoditiesSelector.Run(linEqSetRunnersCount); if (commoditiesToCheck.Length == 0) { Finished = true; return; } SortedSet <long> tConsistPathComms = new(); SortedSet <long> tInconsistPathComms = new(); List <CommodityChecker> commCheckers = new(); ILinEqsAlgorithmProvider linEqsAlgorithmProvider = configuration.Get <ILinEqsAlgorithmProvider>(); for (long i = 0; i < commoditiesToCheck.Length; i++) { Commodity commodity = commoditiesToCheck[i]; commCheckers.Add( linEqsAlgorithmProvider.GetTCPEPCommChecker( meapContext, tapeSegContext, commodity, tConsistPathComms, tInconsistPathComms)); } TPLCollectionRunner <CommodityChecker> commodityCheckerRunner = new ( commCheckers, linEqSetRunnersCount, WaitMethod.WaitAll, _ => default !
/// <summary> /// Just to compare linear equation set solvers /// </summary> protected override bool CheckCommodity() { linEquationContext.TCPELinProgMatrix = new LinEquationsMatrix(); ILinEqsAlgorithmProvider linEqsAlgorithmProvider = configuration.Get <ILinEqsAlgorithmProvider>(); LinEqsSetBuilder tcpeLinProgBuilder = linEqsAlgorithmProvider.GetLinEquationsSetBuilder( meapContext, tapeSegContext, linEquationContext); tcpeLinProgBuilder.CreateTCPEPLinProgEqsSet(); AddCommodityCheckEquation(); String linEqSetQuery = linEquationContext.TCPELinProgMatrix.GetLinEqSetQuery(); tapeSegContext.MathQueryString = linEqSetQuery + "LinearSolve[A,b]"; MathKernelConnector mathKernelConnector = configuration.Get <MathKernelConnector>(); String linEqSetOutput = mathKernelConnector.MathKernel.EvaluateToOutputForm(tapeSegContext.MathQueryString, 0); return(!linEqSetOutput.Contains(linEqSetStr)); }