private boolean isNullspaceComponentZero(DenseMatrix64F matrixToTest, DenseMatrix64F nullspace) { DenseMatrix64F nullspaceCheck = new DenseMatrix64F(nullspace.getNumCols(), matrixToTest.getNumCols()); CommonOps.multTransA(nullspace, matrixToTest, nullspaceCheck); boolean nullspaceComponentZero = MatrixFeatures.isConstantVal(nullspaceCheck, 0.0, 1e-7); return nullspaceComponentZero; } }
public boolean areConstraintsEnforcedSuccesfully(DenseMatrix64F x, DenseMatrix64F j, DenseMatrix64F p, double epsilon) { // This check is only valid if you use an 'exact' solver, not if you're using the damped least squares 'pseudoinverse' if (j.getNumRows() > 0) { check.reshape(p.getNumRows(), 1); CommonOps.mult(j, x, check); CommonOps.subtractEquals(check, p); return MatrixFeatures.isConstantVal(check, 0.0, epsilon); } return true; } }
public boolean areConstraintsEnforcedSuccesfully(DenseMatrix64F x, DenseMatrix64F j, DenseMatrix64F p, double epsilon) { // This check is only valid if you use an 'exact' solver, not if you're using the damped least squares 'pseudoinverse' if (j.getNumRows() > 0) { check.reshape(p.getNumRows(), 1); CommonOps.mult(j, x, check); CommonOps.subtractEquals(check, p); return MatrixFeatures.isConstantVal(check, 0.0, epsilon); } return true; } }
@ContinuousIntegrationTest(estimatedDuration = 0.0) @Test(timeout = 30000) public void testNullspace() { int matrixSize = 10; boolean makeLargestComponentPositive = true; SVDNullspaceCalculator nullspaceCalculator = new SVDNullspaceCalculator(matrixSize, makeLargestComponentPositive); Random random = new Random(); double[] singularValues = RandomNumbers.nextDoubleArray(random, matrixSize, 1.0, 2.0); singularValues[0] = 0.0; DenseMatrix64F matrix = RandomMatrices.createSingularValues(matrixSize, matrixSize, random, singularValues); nullspaceCalculator.setMatrix(matrix, 1); DenseMatrix64F nullspace = nullspaceCalculator.getNullspace(); DenseMatrix64F matrixTimesNullspace = new DenseMatrix64F(matrix.getNumRows(), nullspace.getNumCols()); CommonOps.mult(matrix, nullspace, matrixTimesNullspace); assertTrue(MatrixFeatures.isConstantVal(matrixTimesNullspace, 0.0, 1e-12)); }
@ContinuousIntegrationTest(estimatedDuration = 0.0) @Test(timeout = 30000) public void testUnconstrained() { Random random = new Random(12355L); int objectiveSize = 5; int solutionSize = 5; int constraintSize = 0; QuadraticProgram quadraticProgram = createRandomQuadraticProgram(random, objectiveSize, solutionSize, constraintSize); DenseMatrix64F initialGuess = new DenseMatrix64F(solutionSize, 1); ActiveSearchSolutionInfo solutionInfo = solve(quadraticProgram, initialGuess); assertTrue(solutionInfo.isConverged()); DenseMatrix64F axMinusB = new DenseMatrix64F(solutionSize, 1); CommonOps.mult(quadraticProgram.getA(), solutionInfo.getSolution(), axMinusB); CommonOps.subtractEquals(axMinusB, quadraticProgram.getB()); assertTrue(MatrixFeatures.isConstantVal(axMinusB, 0.0, 1e-12)); }