Browse Source

made model checkers give up possession of matrix to solver when possible

Former-commit-id: 8d689470bd
tempestpy_adaptions
dehnert 9 years ago
parent
commit
49f59052f8
  1. 6
      src/modelchecker/csl/helper/SparseCtmcCslHelper.cpp
  2. 10
      src/modelchecker/prctl/helper/HybridDtmcPrctlHelper.cpp
  3. 10
      src/modelchecker/prctl/helper/HybridMdpPrctlHelper.cpp
  4. 6
      src/modelchecker/prctl/helper/SparseDtmcPrctlHelper.cpp
  5. 6
      src/modelchecker/prctl/helper/SparseMdpPrctlHelper.cpp

6
src/modelchecker/csl/helper/SparseCtmcCslHelper.cpp

@ -283,7 +283,7 @@ namespace storm {
} }
std::vector<ValueType> multiplicationResult(result.size()); std::vector<ValueType> multiplicationResult(result.size());
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(uniformizedMatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(uniformizedMatrix));
if (!computeCumulativeReward && std::get<0>(foxGlynnResult) > 1) { if (!computeCumulativeReward && std::get<0>(foxGlynnResult) > 1) {
// Perform the matrix-vector multiplications (without adding). // Perform the matrix-vector multiplications (without adding).
@ -557,7 +557,7 @@ namespace storm {
bsccEquationSystem = builder.build(); bsccEquationSystem = builder.build();
{ {
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(bsccEquationSystem);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(bsccEquationSystem));
solver->solveEquationSystem(bsccEquationSystemSolution, bsccEquationSystemRightSide); solver->solveEquationSystem(bsccEquationSystemSolution, bsccEquationSystemRightSide);
} }
@ -628,7 +628,7 @@ namespace storm {
rewardSolution = std::vector<ValueType>(rewardEquationSystemMatrix.getColumnCount(), one); rewardSolution = std::vector<ValueType>(rewardEquationSystemMatrix.getColumnCount(), one);
{ {
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(rewardEquationSystemMatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(rewardEquationSystemMatrix));
solver->solveEquationSystem(rewardSolution, rewardRightSide); solver->solveEquationSystem(rewardSolution, rewardRightSide);
} }
} }

10
src/modelchecker/prctl/helper/HybridDtmcPrctlHelper.cpp

@ -71,7 +71,7 @@ namespace storm {
storm::storage::SparseMatrix<ValueType> explicitSubmatrix = submatrix.toMatrix(odd, odd); storm::storage::SparseMatrix<ValueType> explicitSubmatrix = submatrix.toMatrix(odd, odd);
std::vector<ValueType> b = subvector.toVector(odd); std::vector<ValueType> b = subvector.toVector(odd);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitSubmatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitSubmatrix));
solver->solveEquationSystem(x, b); solver->solveEquationSystem(x, b);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -129,7 +129,7 @@ namespace storm {
storm::storage::SparseMatrix<ValueType> explicitSubmatrix = submatrix.toMatrix(odd, odd); storm::storage::SparseMatrix<ValueType> explicitSubmatrix = submatrix.toMatrix(odd, odd);
std::vector<ValueType> b = subvector.toVector(odd); std::vector<ValueType> b = subvector.toVector(odd);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitSubmatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitSubmatrix));
solver->performMatrixVectorMultiplication(x, &b, stepBound); solver->performMatrixVectorMultiplication(x, &b, stepBound);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -155,7 +155,7 @@ namespace storm {
storm::storage::SparseMatrix<ValueType> explicitMatrix = transitionMatrix.toMatrix(odd, odd); storm::storage::SparseMatrix<ValueType> explicitMatrix = transitionMatrix.toMatrix(odd, odd);
// Perform the matrix-vector multiplication. // Perform the matrix-vector multiplication.
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitMatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitMatrix));
solver->performMatrixVectorMultiplication(x, nullptr, stepBound); solver->performMatrixVectorMultiplication(x, nullptr, stepBound);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -181,7 +181,7 @@ namespace storm {
std::vector<ValueType> b = totalRewardVector.toVector(odd); std::vector<ValueType> b = totalRewardVector.toVector(odd);
// Perform the matrix-vector multiplication. // Perform the matrix-vector multiplication.
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitMatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitMatrix));
solver->performMatrixVectorMultiplication(x, &b, stepBound); solver->performMatrixVectorMultiplication(x, &b, stepBound);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -236,7 +236,7 @@ namespace storm {
std::vector<ValueType> b = subvector.toVector(odd); std::vector<ValueType> b = subvector.toVector(odd);
// Now solve the resulting equation system. // Now solve the resulting equation system.
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitSubmatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitSubmatrix));
solver->solveEquationSystem(x, b); solver->solveEquationSystem(x, b);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.

10
src/modelchecker/prctl/helper/HybridMdpPrctlHelper.cpp

@ -75,7 +75,7 @@ namespace storm {
// Translate the symbolic matrix/vector to their explicit representations and solve the equation system. // Translate the symbolic matrix/vector to their explicit representations and solve the equation system.
std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.toMatrixVector(subvector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd); std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.toMatrixVector(subvector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitRepresentation.first);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitRepresentation.first));
solver->solveEquationSystem(dir, x, explicitRepresentation.second); solver->solveEquationSystem(dir, x, explicitRepresentation.second);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -140,7 +140,7 @@ namespace storm {
// Translate the symbolic matrix/vector to their explicit representations. // Translate the symbolic matrix/vector to their explicit representations.
std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.toMatrixVector(subvector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd); std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.toMatrixVector(subvector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitRepresentation.first);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitRepresentation.first));
solver->performMatrixVectorMultiplication(dir, x, &explicitRepresentation.second, stepBound); solver->performMatrixVectorMultiplication(dir, x, &explicitRepresentation.second, stepBound);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -165,7 +165,7 @@ namespace storm {
std::vector<ValueType> x = rewardModel.getStateRewardVector().toVector(odd); std::vector<ValueType> x = rewardModel.getStateRewardVector().toVector(odd);
// Perform the matrix-vector multiplication. // Perform the matrix-vector multiplication.
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitMatrix);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitMatrix));
solver->performMatrixVectorMultiplication(dir, x, nullptr, stepBound); solver->performMatrixVectorMultiplication(dir, x, nullptr, stepBound);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -194,7 +194,7 @@ namespace storm {
std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = transitionMatrix.toMatrixVector(totalRewardVector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd); std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = transitionMatrix.toMatrixVector(totalRewardVector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd);
// Perform the matrix-vector multiplication. // Perform the matrix-vector multiplication.
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitRepresentation.first);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitRepresentation.first));
solver->performMatrixVectorMultiplication(dir, x, &explicitRepresentation.second, stepBound); solver->performMatrixVectorMultiplication(dir, x, &explicitRepresentation.second, stepBound);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.
@ -261,7 +261,7 @@ namespace storm {
std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.toMatrixVector(subvector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd); std::pair<storm::storage::SparseMatrix<ValueType>, std::vector<ValueType>> explicitRepresentation = submatrix.toMatrixVector(subvector, std::move(rowGroupSizes), model.getNondeterminismVariables(), odd, odd);
// Now solve the resulting equation system. // Now solve the resulting equation system.
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(explicitRepresentation.first);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(explicitRepresentation.first));
solver->solveEquationSystem(dir, x, explicitRepresentation.second); solver->solveEquationSystem(dir, x, explicitRepresentation.second);
// Return a hybrid check result that stores the numerical values explicitly. // Return a hybrid check result that stores the numerical values explicitly.

6
src/modelchecker/prctl/helper/SparseDtmcPrctlHelper.cpp

@ -36,7 +36,7 @@ namespace storm {
std::vector<ValueType> subresult(maybeStates.getNumberOfSetBits()); std::vector<ValueType> subresult(maybeStates.getNumberOfSetBits());
// Perform the matrix vector multiplication as often as required by the formula bound. // Perform the matrix vector multiplication as often as required by the formula bound.
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(submatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(submatrix));
solver->performMatrixVectorMultiplication(subresult, &b, stepBound); solver->performMatrixVectorMultiplication(subresult, &b, stepBound);
// Set the values of the resulting vector accordingly. // Set the values of the resulting vector accordingly.
@ -89,7 +89,7 @@ namespace storm {
std::vector<ValueType> b = transitionMatrix.getConstrainedRowSumVector(maybeStates, statesWithProbability1); std::vector<ValueType> b = transitionMatrix.getConstrainedRowSumVector(maybeStates, statesWithProbability1);
// Now solve the created system of linear equations. // Now solve the created system of linear equations.
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(submatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(submatrix));
solver->solveEquationSystem(x, b); solver->solveEquationSystem(x, b);
// Set values of resulting vector according to result. // Set values of resulting vector according to result.
@ -209,7 +209,7 @@ namespace storm {
std::vector<ValueType> b = totalStateRewardVectorGetter(submatrix.getRowCount(), transitionMatrix, maybeStates); std::vector<ValueType> b = totalStateRewardVectorGetter(submatrix.getRowCount(), transitionMatrix, maybeStates);
// Now solve the resulting equation system. // Now solve the resulting equation system.
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(submatrix);
std::unique_ptr<storm::solver::LinearEquationSolver<ValueType>> solver = linearEquationSolverFactory.create(std::move(submatrix));
solver->solveEquationSystem(x, b); solver->solveEquationSystem(x, b);
// Set values of resulting vector according to result. // Set values of resulting vector according to result.

6
src/modelchecker/prctl/helper/SparseMdpPrctlHelper.cpp

@ -47,7 +47,7 @@ namespace storm {
// Create the vector with which to multiply. // Create the vector with which to multiply.
std::vector<ValueType> subresult(maybeStates.getNumberOfSetBits()); std::vector<ValueType> subresult(maybeStates.getNumberOfSetBits());
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = minMaxLinearEquationSolverFactory.create(submatrix);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = minMaxLinearEquationSolverFactory.create(std::move(submatrix));
solver->performMatrixVectorMultiplication(dir, subresult, &b, stepBound); solver->performMatrixVectorMultiplication(dir, subresult, &b, stepBound);
// Set the values of the resulting vector accordingly. // Set the values of the resulting vector accordingly.
@ -329,7 +329,7 @@ namespace storm {
std::vector<ValueType> x(maybeStates.getNumberOfSetBits(), storm::utility::zero<ValueType>()); std::vector<ValueType> x(maybeStates.getNumberOfSetBits(), storm::utility::zero<ValueType>());
// Solve the corresponding system of equations. // Solve the corresponding system of equations.
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = minMaxLinearEquationSolverFactory.create(submatrix);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = minMaxLinearEquationSolverFactory.create(std::move(submatrix));
solver->solveEquationSystem(dir, x, b); solver->solveEquationSystem(dir, x, b);
// Set values of resulting vector according to result. // Set values of resulting vector according to result.
@ -476,7 +476,7 @@ namespace storm {
storm::storage::SparseMatrix<ValueType> sspMatrix = sspMatrixBuilder.build(currentChoice); storm::storage::SparseMatrix<ValueType> sspMatrix = sspMatrixBuilder.build(currentChoice);
std::vector<ValueType> sspResult(numberOfStatesNotInMecs + mecDecomposition.size()); std::vector<ValueType> sspResult(numberOfStatesNotInMecs + mecDecomposition.size());
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = minMaxLinearEquationSolverFactory.create(sspMatrix);
std::unique_ptr<storm::solver::MinMaxLinearEquationSolver<ValueType>> solver = minMaxLinearEquationSolverFactory.create(std::move(sspMatrix));
solver->solveEquationSystem(dir, sspResult, b); solver->solveEquationSystem(dir, sspResult, b);
// Prepare result vector. // Prepare result vector.
Loading…
Cancel
Save