[PPL-devel] [GIT] ppl/ppl(pip): Minor improvements to PIP_Problem documentation and C interface.
Enea Zaffanella
zaffanella at cs.unipr.it
Wed Feb 3 08:51:58 CET 2010
Module: ppl/ppl
Branch: pip
Commit: ff7e8d5afd59c8440045725bff0cac5e7644ab9c
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=ff7e8d5afd59c8440045725bff0cac5e7644ab9c
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Mon Feb 1 19:23:18 2010 +0100
Minor improvements to PIP_Problem documentation and C interface.
---
interfaces/C/ppl_c_header.h | 22 ++++++++---
interfaces/C/ppl_c_implementation_common.cc | 14 -------
src/PIP_Problem.defs.hh | 3 +-
src/PIP_Tree.cc | 12 +++----
src/PIP_Tree.defs.hh | 53 ++++++++++++++-------------
5 files changed, 50 insertions(+), 54 deletions(-)
diff --git a/interfaces/C/ppl_c_header.h b/interfaces/C/ppl_c_header.h
index ac09559..f21626b 100644
--- a/interfaces/C/ppl_c_header.h
+++ b/interfaces/C/ppl_c_header.h
@@ -697,10 +697,20 @@ PPL_TYPE_DECLARATION(PIP_Problem)
/*! \interface ppl_PIP_Tree_Node_tag
\brief
- Types and functions for PIP tree nodes.
+ Types and functions for generic PIP tree nodes.
*/
PPL_TYPE_DECLARATION(PIP_Tree_Node)
+
+/*! \interface ppl_PIP_Decision_Node_tag
+ \brief
+ Types and functions for PIP decision nodes.
+*/
PPL_TYPE_DECLARATION(PIP_Decision_Node)
+
+/*! \interface ppl_PIP_Solution_Node_tag
+ \brief
+ Types and functions for PIP solution nodes.
+*/
PPL_TYPE_DECLARATION(PIP_Solution_Node)
/*! \interface ppl_Artificial_Parameter_tag
@@ -2656,10 +2666,10 @@ PPL_PROTO((ppl_MIP_Problem_t mip, int value));
/*! \relates ppl_PIP_Problem_tag \brief
Builds a trivial PIP problem of dimension \p d and writes an
- handle to it at address \p pmip.
+ handle to it at address \p ppip.
*/
int
-ppl_new_PIP_Problem_from_space_dimension PPL_PROTO((ppl_PIP_Problem_t* pmip,
+ppl_new_PIP_Problem_from_space_dimension PPL_PROTO((ppl_PIP_Problem_t* ppip,
ppl_dimension_type d));
/*! \relates ppl_PIP_Problem_tag \brief
@@ -2744,7 +2754,7 @@ int
ppl_PIP_Problem_clear PPL_PROTO((ppl_PIP_Problem_t pip));
/*! \relates ppl_PIP_Problem_tag \brief
- Adds <CODE>m_pip_vars + m_pip_params</CODE> new space dimensions
+ Adds <CODE>pip_vars + pip_params</CODE> new space dimensions
and embeds the PIP problem \p pip in the new vector space.
\param pip
@@ -2966,8 +2976,8 @@ PPL_PROTO((ppl_const_PIP_Solution_Node_t pip_sol,
ppl_const_Linear_Expression_t* le));
/*! \relates ppl_PIP_Tree_Node_tag \brief
- Writes to \p pip_tree a const pointer to the \p b (true or false) branch
- of \p pip_dec.
+ Writes to \p pip_tree a const pointer to either the true branch
+ (if \p b is not zero) or the false branch (if \p b is zero) of \p pip_dec.
*/
int
ppl_PIP_Decision_Node_get_child_node
diff --git a/interfaces/C/ppl_c_implementation_common.cc b/interfaces/C/ppl_c_implementation_common.cc
index 27e8227..e297492 100644
--- a/interfaces/C/ppl_c_implementation_common.cc
+++ b/interfaces/C/ppl_c_implementation_common.cc
@@ -2342,13 +2342,6 @@ ppl_PIP_Tree_Node_get_constraints(ppl_const_PIP_Tree_Node_t pip_tree,
CATCH_ALL
int
-ppl_delete_PIP_Tree_Node(ppl_const_PIP_Tree_Node_t pip_tree) try {
- delete to_const(pip_tree);
- return 0;
-}
-CATCH_ALL
-
-int
ppl_PIP_Tree_Node_OK(ppl_const_PIP_Tree_Node_t pip_tree) try {
return to_const(pip_tree)->OK() ? 1 : 0;
}
@@ -2409,13 +2402,6 @@ ppl_PIP_Solution_Node_OK(ppl_const_PIP_Solution_Node_t pip_sol) try {
CATCH_ALL
int
-ppl_delete_PIP_Decision_Node(ppl_const_PIP_Decision_Node_t pip_dec) try {
- delete to_const(pip_dec);
- return 0;
-}
-CATCH_ALL
-
-int
ppl_PIP_Decision_Node_OK(ppl_const_PIP_Decision_Node_t pip_dec) try {
return to_const(pip_dec)->OK() ? 1 : 0;
}
diff --git a/src/PIP_Problem.defs.hh b/src/PIP_Problem.defs.hh
index d9e52f1..f8a0f8a 100644
--- a/src/PIP_Problem.defs.hh
+++ b/src/PIP_Problem.defs.hh
@@ -449,8 +449,7 @@ public:
//! Returns an optimizing solution for \p *this, if it exists.
/*!
\exception std::domain_error
- Thrown if \p *this does not have an optimizing point, i.e.,
- if the PIP problem is unbounded or not satisfiable.
+ Thrown if the PIP problem is not satisfiable.
*/
PIP_Tree optimizing_solution() const;
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index ce5e455..b454246 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -1045,6 +1045,7 @@ PIP_Solution_Node::ascii_load(std::istream& s) {
return true;
}
+// FIXME: this does not (yet) correspond to specification.
const Linear_Expression&
PIP_Solution_Node
::parametric_values(const Variable var,
@@ -1062,13 +1063,10 @@ PIP_Solution_Node
if (pos == all_parameters.end())
return solution[var.id()];
else {
-#ifndef NDEBUG
- if (*pos == var.id()) {
- std::cerr << "PIP_Solution_Node::parametric_values(Variable): "
- << "Supplied Variable corresponds to a parameter.\n";
- PPL_ASSERT(false);
- }
-#endif // #ifndef NDEBUG
+ if (*pos == var.id())
+ throw std::invalid_argument("PIP_Solution_Node::"
+ "parametric_values(v, params): "
+ "variable v is a parameter.");
const dimension_type dist = std::distance(all_parameters.begin(), pos);
return solution[var.id() - dist];
}
diff --git a/src/PIP_Tree.defs.hh b/src/PIP_Tree.defs.hh
index b819b6e..9c9f412 100644
--- a/src/PIP_Tree.defs.hh
+++ b/src/PIP_Tree.defs.hh
@@ -260,10 +260,10 @@ public:
parameters.
\param v
- the variable which is queried about
+ The variable which is queried about.
\param parameters
- a \c std::set of indices of the parameters in the problem constraints
+ A \c std::set of indices of the parameters in the problem constraints.
\exception std::invalid_argument
Thrown if \p v is dimension-incompatible with \p *this
@@ -406,15 +406,18 @@ private:
*/
std::vector<dimension_type> mapping;
- /*! \brief A vector of the variable identifiers associated to each row of
- the simplex tableau. */
+ /*! \brief
+ The variable identifiers associated to the rows of the simplex tableau.
+ */
std::vector<dimension_type> var_row;
- /*! \brief A vector of the variable identifiers associated to each column
- of the simplex tableau. */
+ /*! \brief
+ The variable identifiers associated to the columns of the simplex tableau.
+ */
std::vector<dimension_type> var_column;
- /*! \brief The variable number of the special inequality used for modelling
+ /*! \brief
+ The variable number of the special inequality used for modelling
equality constraints.
The subset of equality constraints in a specific problem can be expressed
@@ -433,15 +436,14 @@ private:
dimension_type special_equality_row;
/*! \brief
- The column number in the parametric part of the simplex tableau
- which corresponds to the big parameter; \c not_a_dimension()
- if not set.
+ The column index in the parametric part of the simplex tableau
+ corresponding to the big parameter; \c not_a_dimension() if not set.
*/
dimension_type big_dimension;
//! The possible values for the sign of a parametric linear expression.
enum Row_Sign {
- //! Not computed yet (default)
+ //! Not computed yet (default).
UNKNOWN,
//! All row coefficients are zero.
ZERO,
@@ -449,7 +451,7 @@ private:
POSITIVE,
//! All nonzero row coefficients are negative.
NEGATIVE,
- //! The row contains positive and negative coefficients.
+ //! The row contains both positive and negative coefficients.
MIXED
};
@@ -462,12 +464,12 @@ private:
//! An indicator for solution validity.
bool solution_valid;
- //! Determines the sign of given Row.
+ //! Returns the sign of row \p x.
static Row_Sign row_sign(const Row& x, dimension_type big_dimension);
/*! \brief
- Checks whether a constraint is compatible with a context, ie. does not
- make the context empty.
+ Checks whether a constraint is compatible with a context,
+ i.e., if it does not make the context unsatisfiable.
The method consists in applying the revised dual simplex algorithm on a
Matrix consisting in the original matrix with the constraint inserted. If
@@ -518,30 +520,30 @@ protected:
Update the solution values.
\param parameters
- a \c std::set of indices of the parameters in the constraints
+ A \c std::set of indices of the parameters in the constraints
*/
- virtual void update_solution(const Variables_Set& parameters);
+ void update_solution(const Variables_Set& parameters);
/*! \brief
Execute a parametric simplex on the tableau, under specified context.
\param parent_ref
- a pointer to the parent reference to \p this
+ A pointer to the parent reference to \p this.
\param problem
- the containing problem object
+ The containing problem object.
\param context
- the context, being a set of constraints on the parameters
+ The context, being a set of constraints on the parameters.
\param params
- local parameter set, including parent artificial parameters
+ The local set of parameters, including parent artificial parameters.
\param space_dimension
- space dimension of parent, including artificial parameters
+ Space dimension of parent, including artificial parameters.
\return
- An PIP_Problem_Status flag indicating the outcome of the optimization
+ A PIP_Problem_Status flag indicating the result of the optimization
attempt (unfeasible or optimized problem).
*/
virtual PIP_Problem_Status solve(PIP_Tree_Node*& parent_ref,
@@ -572,8 +574,9 @@ protected:
Variables_Set& parameters,
Matrix& context,
dimension_type& space_dimension);
- // FIXME: constructors to be decided.
-};
+
+}; // class PIP_Solution_Node
+
//! A tree node representing a decision in the space of solutions.
class PIP_Decision_Node : public PIP_Tree_Node {
More information about the PPL-devel
mailing list