public IQpProblem Convert(IProfileMatchingProblem problem) { InternalConverter converter = SelectInternalBuilder(problem); return(new QpProblem.Builder() .WithQMatrix(converter.AssembleQMatrix()) .WithCVector(converter.AssembleCVector()) .WithAMatrix(problem.A) .WithBVector(problem.B) .WithAEqualityMatrix(problem.Aeq) .WithBEqualityVector(problem.Beq) .Build()); }
private InternalConverter SelectInternalBuilder(IProfileMatchingProblem problem) { switch (this.metric) { case ProfileMatchingMetric.SumSquares: return(new SumSquaresConverter(problem)); case ProfileMatchingMetric.CumulativeSumsquares: return(new CumulativeSumSquaresConverter(problem)); default: throw new NotSupportedException("Fitting metric not supported."); } }
public SumSquaresConverter(IProfileMatchingProblem problem) : base(problem) { }
protected InternalConverter(IProfileMatchingProblem problem) { this.basisVectors = Matrix <double> .Build.DenseOfArray(problem.Vectors); this.targetVector = Vector <double> .Build.DenseOfArray(problem.Target); }