public QpProgressReport Run(SpreadSheetExample example) { Matrix <double> basisVectors = Matrix <double> .Build.DenseOfArray(example.BasisVectors); Vector <double> targetVector = Vector <double> .Build.DenseOfEnumerable(example.TargetVector); var assembler = new QpLeastSquaresFormulator(); QpProblem problem = assembler .WithBasisVectors(basisVectors) .WithTargetVector(targetVector) .WithLowerConstraints(example.LowerConstraint) .WithUpperConstraints(example.UpperConstraint) .SetupProblem(); IQpProgressReportBroadcaster publisher = new QpProgressReportPublisher(); IQpInitialPointStrategy warmStarter = new QpWarmStarter(); var listener = new ConsoleOutputService(); listener.Subscribe(publisher); var solver = new PredictorCorrectorSolver( new QpPreSolver(problem.A, problem.b), warmStarter, new QpProgressAnalyser(problem, true), publisher); return(solver.Solve(problem)); }
public void AcSolver() { // Arrange IQpProgressReportBroadcaster publisher = new QpProgressReportPublisher(); IQpInitialPointStrategy warmStarter = new QpWarmStarter(); var listener = new ConsoleOutputService(); listener.Subscribe(publisher); var solver = new PredictorCorrectorSolver( new QpPreSolver(problem.A, problem.b), new QpWarmStarter(), new QpProgressAnalyser(problem, true), new QpProgressReportPublisher()); // Act QpProgressReport solution = solver.Solve(problem); // Assert var check = solution.X + problem.c; Assert.IsTrue(check.Norm(2) < (1e-8 * n)); }