PPL  1.2
PIP_Tree_defs.hh
Go to the documentation of this file.
1 /* PIP_Tree_Node class declaration.
2  Copyright (C) 2001-2010 Roberto Bagnara <bagnara@cs.unipr.it>
3  Copyright (C) 2010-2016 BUGSENG srl (http://bugseng.com)
4 
5 This file is part of the Parma Polyhedra Library (PPL).
6 
7 The PPL is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 The PPL is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software Foundation,
19 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
20 
21 For the most up-to-date information see the Parma Polyhedra Library
22 site: http://bugseng.com/products/ppl/ . */
23 
24 #ifndef PPL_PIP_Tree_defs_hh
25 #define PPL_PIP_Tree_defs_hh 1
26 
27 #include "PIP_Tree_types.hh"
28 #include "Variable_defs.hh"
32 #include "Constraint_defs.hh"
33 #include "Variables_Set_defs.hh"
34 #include "globals_defs.hh"
35 #include "PIP_Problem_defs.hh"
36 
37 #include "Matrix_defs.hh"
38 #include "Dense_Row_defs.hh"
39 #include "Sparse_Row_defs.hh"
40 
41 namespace Parma_Polyhedra_Library {
42 
44 
51 protected:
53  explicit PIP_Tree_Node(const PIP_Problem* owner);
54 
56  PIP_Tree_Node(const PIP_Tree_Node& y);
57 
59  const PIP_Problem* get_owner() const;
60 
62  virtual void set_owner(const PIP_Problem* owner) = 0;
63 
68  virtual bool check_ownership(const PIP_Problem* owner) const = 0;
69 
70 public:
71 #if PPL_USE_SPARSE_MATRIX
72  typedef Sparse_Row Row;
73 #else
74  typedef Dense_Row Row;
75 #endif
76 
78  virtual PIP_Tree_Node* clone() const = 0;
79 
81  virtual ~PIP_Tree_Node();
82 
84  virtual bool OK() const = 0;
85 
87  virtual const PIP_Solution_Node* as_solution() const = 0;
88 
90  virtual const PIP_Decision_Node* as_decision() const = 0;
91 
99  const Constraint_System& constraints() const;
100 
102 
104  typedef std::vector<Artificial_Parameter> Artificial_Parameter_Sequence;
105 
107  Artificial_Parameter_Sequence::const_iterator art_parameter_begin() const;
108 
110  Artificial_Parameter_Sequence::const_iterator art_parameter_end() const;
111 
114 
116 
123  void print(std::ostream& s, int indent = 0) const;
124 
126  void ascii_dump(std::ostream& s) const;
127 
133  bool ascii_load(std::istream& s);
134 
136  virtual memory_size_type total_memory_in_bytes() const = 0;
138  virtual memory_size_type external_memory_in_bytes() const = 0;
139 
140 protected:
142  typedef std::vector<Constraint> Constraint_Sequence;
143 
144  // Only PIP_Problem and PIP_Decision_Node are allowed to use the
145  // constructor and methods.
146  friend class PIP_Problem;
147  friend class PIP_Decision_Node;
148  friend class PIP_Solution_Node;
149 
152 
155 
158 
160  Artificial_Parameter_Sequence artificial_parameters;
161 
163  const PIP_Decision_Node* parent() const;
164 
166  void set_parent(const PIP_Decision_Node* p);
167 
188  virtual void update_tableau(const PIP_Problem& pip,
189  dimension_type external_space_dim,
190  dimension_type first_pending_constraint,
191  const Constraint_Sequence& input_cs,
192  const Variables_Set& parameters) = 0;
193 
219  virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
220  bool check_feasible_context,
221  const Matrix<Row>& context,
222  const Variables_Set& params,
223  dimension_type space_dim,
224  int indent_level) = 0;
225 
227  void add_constraint(const Row& row, const Variables_Set& parameters);
228 
230  void parent_merge();
231 
233 
249  virtual void print_tree(std::ostream& s,
250  int indent,
251  const std::vector<bool>& pip_dim_is_param,
252  dimension_type first_art_dim) const = 0;
253 
255  static void
256  indent_and_print(std::ostream& s, int indent, const char* str);
257 
266  static bool compatibility_check(Matrix<Row>& s);
267 
272  static bool compatibility_check(const Matrix<Row>& context, const Row& row);
273 
274 }; // class PIP_Tree_Node
275 
276 
286  : public Linear_Expression {
287 public:
290 
292 
309  Coefficient_traits::const_reference d);
310 
313 
315  Coefficient_traits::const_reference denominator() const;
316 
318  void m_swap(Artificial_Parameter& y);
319 
321 
325  bool operator==(const Artificial_Parameter& y) const;
327  bool operator!=(const Artificial_Parameter& y) const;
328 
330 
336  bool ascii_load(std::istream& s);
337 
342 
344  bool OK() const;
345 
346 private:
349 }; // class PIP_Tree_Node::Artificial_Parameter
350 
351 
353 
354 void
357 
358 
361 public:
362 
364  explicit PIP_Solution_Node(const PIP_Problem* owner);
365 
367  virtual PIP_Tree_Node* clone() const;
368 
370  virtual ~PIP_Solution_Node();
371 
373  virtual bool OK() const;
374 
376  virtual const PIP_Solution_Node* as_solution() const;
377 
379  virtual const PIP_Decision_Node* as_decision() const;
380 
394  const Linear_Expression& parametric_values(Variable var) const;
395 
397  void ascii_dump(std::ostream& os) const;
398 
404  bool ascii_load(std::istream& is);
405 
407  virtual memory_size_type total_memory_in_bytes() const;
410 
411 private:
413  struct Tableau {
420 
422  Tableau();
424  Tableau(const Tableau& y);
426  ~Tableau();
427 
429  bool is_integer() const;
430 
432  void scale(Coefficient_traits::const_reference ratio);
433 
435 
439  void normalize();
440 
490  bool is_better_pivot(const std::vector<dimension_type>& mapping,
491  const std::vector<bool>& basis,
492  const dimension_type row_0,
493  const dimension_type col_0,
494  const dimension_type row_1,
495  const dimension_type col_1) const;
496 
498  Coefficient_traits::const_reference denominator() const;
499 
501  void ascii_dump(std::ostream& os) const;
502 
508  bool ascii_load(std::istream& is);
509 
511 
517 
519  bool OK() const;
520  }; // struct Tableau
521 
524 
543  std::vector<bool> basis;
544 
555  std::vector<dimension_type> mapping;
556 
560  std::vector<dimension_type> var_row;
561 
565  std::vector<dimension_type> var_column;
566 
585 
591 
593  enum Row_Sign {
604  };
605 
607  std::vector<Row_Sign> sign;
608 
610  std::vector<Linear_Expression> solution;
611 
614 
616  static Row_Sign row_sign(const Row& x,
617  dimension_type big_dimension);
618 
619 protected:
622 
624  struct No_Constraints {};
625 
627 
632 
633  // PIP_Problem::ascii load() method needs access set_owner().
634  friend bool PIP_Problem::ascii_load(std::istream& s);
635 
637  virtual void set_owner(const PIP_Problem* owner);
638 
643  virtual bool check_ownership(const PIP_Problem* owner) const;
644 
646  virtual void update_tableau(const PIP_Problem& pip,
647  dimension_type external_space_dim,
648  dimension_type first_pending_constraint,
649  const Constraint_Sequence& input_cs,
650  const Variables_Set& parameters);
651 
660  void update_solution(const std::vector<bool>& pip_dim_is_param) const;
661 
663  void update_solution() const;
664 
666  virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
667  bool check_feasible_context,
668  const Matrix<Row>& context,
669  const Variables_Set& params,
670  dimension_type space_dim,
671  int indent_level);
672 
694  void generate_cut(dimension_type index, Variables_Set& parameters,
695  Matrix<Row>& context, dimension_type& space_dimension,
696  int indent_level);
697 
699  virtual void print_tree(std::ostream& s, int indent,
700  const std::vector<bool>& pip_dim_is_param,
701  dimension_type first_art_dim) const;
702 
703 }; // class PIP_Solution_Node
704 
705 
708 public:
710  virtual PIP_Tree_Node* clone() const;
711 
713  virtual ~PIP_Decision_Node();
714 
716  virtual bool OK() const;
717 
719  virtual const PIP_Decision_Node* as_decision() const;
720 
722  virtual const PIP_Solution_Node* as_solution() const;
723 
725  const PIP_Tree_Node* child_node(bool b) const;
726 
728  PIP_Tree_Node* child_node(bool b);
729 
731  void ascii_dump(std::ostream& s) const;
732 
738  bool ascii_load(std::istream& s);
739 
741  virtual memory_size_type total_memory_in_bytes() const;
744 
745 private:
746  // PIP_Solution_Node is allowed to use the constructor and methods.
747  friend class PIP_Solution_Node;
748 
749  // PIP_Problem ascii load method needs access to private constructors.
750  friend bool PIP_Problem::ascii_load(std::istream& s);
751 
754 
757 
780  explicit PIP_Decision_Node(const PIP_Problem* owner,
781  PIP_Tree_Node* fcp,
782  PIP_Tree_Node* tcp);
783 
785  virtual void set_owner(const PIP_Problem* owner);
786 
791  virtual bool check_ownership(const PIP_Problem* owner) const;
792 
793 protected:
796 
798  virtual void update_tableau(const PIP_Problem& pip,
799  dimension_type external_space_dim,
800  dimension_type first_pending_constraint,
801  const Constraint_Sequence& input_cs,
802  const Variables_Set& parameters);
803 
805  virtual PIP_Tree_Node* solve(const PIP_Problem& pip,
806  bool check_feasible_context,
807  const Matrix<Row>& context,
808  const Variables_Set& params,
809  dimension_type space_dim,
810  int indent_level);
811 
813  virtual void print_tree(std::ostream& s, int indent,
814  const std::vector<bool>& pip_dim_is_param,
815  dimension_type first_art_dim) const;
816 
817 }; // class PIP_Decision_Node
818 
819 namespace IO_Operators {
820 
822 
823 std::ostream& operator<<(std::ostream& os, const PIP_Tree_Node& x);
824 
826 
827 std::ostream& operator<<(std::ostream& os,
829 
830 } // namespace IO_Operators
831 
832 } // namespace Parma_Polyhedra_Library
833 
834 #include "PIP_Tree_inlines.hh"
835 
836 #endif // !defined(PPL_PIP_Tree_defs_hh)
Artificial_Parameter_Sequence::const_iterator art_parameter_begin() const
Returns a const_iterator to the beginning of local artificial parameters.
const PIP_Problem * owner_
A pointer to the PIP_Problem object owning this node.
virtual void print_tree(std::ostream &s, int indent, const std::vector< bool > &pip_dim_is_param, dimension_type first_art_dim) const
Prints on s the tree rooted in *this.
Definition: PIP_Tree.cc:3887
bool operator==(const Artificial_Parameter &y) const
Returns true if and only if *this and y are equal.
Definition: PIP_Tree.cc:979
Coefficient denom
The normalized (i.e., positive) denominator.
std::vector< dimension_type > var_column
The variable identifiers associated to the columns of the simplex tableau.
virtual void update_tableau(const PIP_Problem &pip, dimension_type external_space_dim, dimension_type first_pending_constraint, const Constraint_Sequence &input_cs, const Variables_Set &parameters)
Implements pure virtual method PIP_Tree_Node::update_tableau.
Definition: PIP_Tree.cc:1374
Artificial parameters in PIP solution trees.
bool operator!=(const Artificial_Parameter &y) const
Returns true if and only if *this and y are different.
Definition: PIP_Tree.cc:992
static bool compatibility_check(Matrix< Row > &s)
Checks whether a context matrix is satisfiable.
Definition: PIP_Tree.cc:2195
virtual void set_owner(const PIP_Problem *owner)
Sets the pointer to the PIP_Problem owning object.
Definition: PIP_Tree.cc:1120
virtual memory_size_type external_memory_in_bytes() const
Returns the size in bytes of the memory managed by *this.
Definition: PIP_Tree.cc:3755
void swap(CO_Tree &x, CO_Tree &y)
virtual const PIP_Decision_Node * as_decision() const =0
Returns this if *this is a decision node, 0 otherwise.
virtual void update_tableau(const PIP_Problem &pip, dimension_type external_space_dim, dimension_type first_pending_constraint, const Constraint_Sequence &input_cs, const Variables_Set &parameters)
Implements pure virtual method PIP_Tree_Node::update_tableau.
Definition: PIP_Tree.cc:2406
A finite sequence of coefficients.
virtual void set_owner(const PIP_Problem *owner)
Sets the pointer to the PIP_Problem owning object.
Definition: PIP_Tree.cc:1125
void generate_cut(dimension_type index, Variables_Set &parameters, Matrix< Row > &context, dimension_type &space_dimension, int indent_level)
Generate a Gomory cut using non-integer tableau row index.
Definition: PIP_Tree.cc:3463
size_t dimension_type
An unsigned integral type for representing space dimensions.
PIP_Tree_Node * false_child
Pointer to the "false" child of *this.
An std::set of variables' indexes.
bool ascii_load(std::istream &s)
Loads from s an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this ...
Definition: PIP_Tree.cc:1830
virtual bool OK() const
Returns true if and only if *this is well formed.
Definition: PIP_Tree.cc:1263
const PIP_Decision_Node * parent() const
Returns a pointer to this node's parent.
Tableau tableau
The parametric simplex tableau.
const Linear_Expression & parametric_values(Variable var) const
Returns a parametric expression for the values of problem variable var.
Definition: PIP_Tree.cc:3920
virtual void set_owner(const PIP_Problem *owner)=0
Sets the pointer to the PIP_Problem owning object.
bool ascii_load(std::istream &s)
Loads from s an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this ...
Definition: PIP_Problem.cc:453
virtual memory_size_type total_memory_in_bytes() const
Returns the total size in bytes of the memory occupied by *this.
Definition: PIP_Tree.cc:3798
std::ostream & operator<<(std::ostream &s, const Ask_Tell< D > &x)
void ascii_dump(std::ostream &os) const
Dumps to os an ASCII representation of *this.
Definition: PIP_Tree.cc:1873
static Row_Sign row_sign(const Row &x, dimension_type big_dimension)
Returns the sign of row x.
Definition: PIP_Tree.cc:2152
A sparse matrix of Coefficient.
Definition: Matrix_defs.hh:37
dimension_type special_equality_row
The variable number of the special inequality used for modeling equality constraints.
bool ascii_load(std::istream &is)
Loads from is an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this...
Definition: PIP_Tree.cc:1984
const PIP_Problem * get_owner() const
Returns a pointer to the PIP_Problem owning object.
A finite sparse sequence of coefficients.
PIP_Tree_Node(const PIP_Problem *owner)
Constructor: builds a node owned by *owner.
Definition: PIP_Tree.cc:916
dimension_type big_dimension
The column index in the parametric part of the simplex tableau corresponding to the big parameter; no...
virtual memory_size_type external_memory_in_bytes() const =0
Returns the size in bytes of the memory managed by *this.
Definition: PIP_Tree.cc:3741
PIP_Solution_Node(const PIP_Problem *owner)
Constructor: builds a solution node owned by *owner.
Definition: PIP_Tree.cc:1036
virtual ~PIP_Decision_Node()
Destructor.
Definition: PIP_Tree.cc:1114
bool solution_valid
An indicator for solution validity.
A Parametric Integer (linear) Programming problem.
virtual PIP_Tree_Node * clone() const =0
Returns a pointer to a dynamically-allocated copy of *this.
Artificial_Parameter_Sequence::const_iterator art_parameter_end() const
Returns a const_iterator to the end of local artificial parameters.
virtual void update_tableau(const PIP_Problem &pip, dimension_type external_space_dim, dimension_type first_pending_constraint, const Constraint_Sequence &input_cs, const Variables_Set &parameters)=0
Populates the parametric simplex tableau using external data.
virtual PIP_Tree_Node * clone() const
Returns a pointer to a dynamically-allocated copy of *this.
Definition: PIP_Tree.cc:1868
A tree node representing a decision in the space of solutions.
The row contains both positive and negative coefficients.
A dimension of the vector space.
All nonzero row coefficients are negative.
virtual void print_tree(std::ostream &s, int indent, const std::vector< bool > &pip_dim_is_param, dimension_type first_art_dim) const
Prints on s the tree rooted in *this.
Definition: PIP_Tree.cc:3862
std::vector< Artificial_Parameter > Artificial_Parameter_Sequence
A type alias for a sequence of Artificial_Parameter's.
std::vector< dimension_type > var_row
The variable identifiers associated to the rows of the simplex tableau.
virtual bool check_ownership(const PIP_Problem *owner) const =0
Returns true if and only if all the nodes in the subtree rooted in *this are owned by *owner...
void ascii_dump(std::ostream &s) const
Dumps to s an ASCII representation of *this.
Definition: PIP_Tree.cc:1818
PIP_Decision_Node(const PIP_Problem *owner, PIP_Tree_Node *fcp, PIP_Tree_Node *tcp)
Builds a decision node having fcp and tcp as child.
Definition: PIP_Tree.cc:1082
dimension_type art_parameter_count() const
Returns the number of local artificial parameters.
bool OK() const
Returns true if and only if *this is well formed.
Definition: PIP_Tree.cc:1168
#define PPL_OUTPUT_DECLARATIONS
void parent_merge()
Merges parent's artificial parameters into *this.
Definition: PIP_Tree.cc:1251
virtual ~PIP_Tree_Node()
Destructor.
Definition: PIP_Tree.cc:930
virtual void print_tree(std::ostream &s, int indent, const std::vector< bool > &pip_dim_is_param, dimension_type first_art_dim) const =0
Prints on s the tree rooted in *this.
Definition: PIP_Tree.cc:3831
Coefficient_traits::const_reference denominator() const
Returns the value of the denominator.
virtual PIP_Tree_Node * solve(const PIP_Problem &pip, bool check_feasible_context, const Matrix< Row > &context, const Variables_Set &params, dimension_type space_dim, int indent_level)
Implements pure virtual method PIP_Tree_Node::solve.
Definition: PIP_Tree.cc:2605
virtual bool OK() const =0
Returns true if and only if *this is well formed.
Definition: PIP_Tree.cc:1197
memory_size_type total_memory_in_bytes() const
Returns the total size in bytes of the memory occupied by *this.
Definition: PIP_Tree.cc:3736
bool OK() const
Returns true if and only if the parameter is well-formed.
Definition: PIP_Tree.cc:997
std::vector< dimension_type > mapping
A mapping between the tableau rows/columns and the original variables.
void ascii_dump(std::ostream &os) const
Dumps to os an ASCII representation of *this.
Definition: PIP_Tree.cc:1909
virtual const PIP_Solution_Node * as_solution() const
Returns this.
Definition: PIP_Tree.cc:1163
void ascii_dump(std::ostream &s) const
Dumps to s an ASCII representation of *this.
Definition: PIP_Tree.cc:1525
virtual const PIP_Decision_Node * as_decision() const
Returns this.
Definition: PIP_Tree.cc:1148
const Constraint_System & constraints() const
Returns the system of parameter constraints controlling *this.
virtual bool OK() const
Returns true if and only if *this is well formed.
Definition: PIP_Tree.cc:1335
void set_parent(const PIP_Decision_Node *p)
Set this node's parent to *p.
Coefficient_traits::const_reference denominator() const
Returns the normalized (i.e., positive) denominator.
All nonzero row coefficients are positive.
void scale(Coefficient_traits::const_reference ratio)
Multiplies all coefficients and denominator with ratio.
Definition: PIP_Tree.cc:1714
bool is_integer() const
Tests whether the matrix is integer, i.e., the denominator is 1.
std::vector< Linear_Expression > solution
Parametric values for the solution.
PPL_COEFFICIENT_TYPE Coefficient
An alias for easily naming the type of PPL coefficients.
PIP_Tree_Node * true_child
Pointer to the "true" child of *this.
virtual const PIP_Solution_Node * as_solution() const =0
Returns this if *this is a solution node, 0 otherwise.
bool ascii_load(std::istream &s)
Loads from s an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this ...
Definition: PIP_Tree.cc:1016
const PIP_Tree_Node * child_node(bool b) const
Returns a const pointer to the b (true or false) branch of *this.
virtual bool check_ownership(const PIP_Problem *owner) const
Returns true if and only if all the nodes in the subtree rooted in *this is owned by *pip...
Definition: PIP_Tree.cc:1136
virtual memory_size_type total_memory_in_bytes() const
Returns the total size in bytes of the memory occupied by *this.
Definition: PIP_Tree.cc:3766
const PIP_Decision_Node * parent_
A pointer to the parent of *this, null if *this is the root.
virtual const PIP_Solution_Node * as_solution() const
Returns 0, since this is not a solution node.
Definition: PIP_Tree.cc:1158
Artificial_Parameter()
Default constructor: builds a zero artificial parameter.
The entire library is confined to this namespace.
Definition: version.hh:61
void update_solution() const
Helper method.
Definition: PIP_Tree.cc:3958
virtual bool check_ownership(const PIP_Problem *owner) const
Returns true if and only if all the nodes in the subtree rooted in *this is owned by *pip...
Definition: PIP_Tree.cc:1141
memory_size_type external_memory_in_bytes() const
Returns the size in bytes of the memory managed by *this.
Definition: PIP_Tree.cc:3771
virtual ~PIP_Solution_Node()
Destructor.
Definition: PIP_Tree.cc:1079
Artificial_Parameter_Sequence artificial_parameters
The local sequence of expressions for local artificial parameters.
void normalize()
Normalizes the modulo of coefficients so that they are mutually prime.
Definition: PIP_Tree.cc:1654
std::vector< bool > basis
A boolean vector for identifying the basic variables.
Row_Sign
The possible values for the sign of a parametric linear expression.
std::vector< Constraint > Constraint_Sequence
A type alias for a sequence of constraints.
void add_constraint(const Row &row, const Variables_Set &parameters)
Inserts a new parametric constraint in internal row format.
Definition: PIP_Tree.cc:1222
Matrix< Row > t
The matrix of parameter coefficients.
memory_size_type external_memory_in_bytes() const
Returns the size in bytes of the memory managed by *this.
Definition: PIP_Tree.cc:3730
Coefficient denom
A common denominator for all matrix elements.
virtual PIP_Tree_Node * clone() const
Returns a pointer to a dynamically-allocated copy of *this.
Definition: PIP_Tree.cc:1863
A tree node representing part of the space of solutions.
virtual const PIP_Decision_Node * as_decision() const
Returns 0, since this is not a decision node.
Definition: PIP_Tree.cc:1153
bool is_better_pivot(const std::vector< dimension_type > &mapping, const std::vector< bool > &basis, const dimension_type row_0, const dimension_type col_0, const dimension_type row_1, const dimension_type col_1) const
Compares two pivot row and column pairs before pivoting.
Definition: PIP_Tree.cc:1733
size_t memory_size_type
An unsigned integral type for representing memory size in bytes.
virtual PIP_Tree_Node * solve(const PIP_Problem &pip, bool check_feasible_context, const Matrix< Row > &context, const Variables_Set &params, dimension_type space_dim, int indent_level)
Implements pure virtual method PIP_Tree_Node::solve.
Definition: PIP_Tree.cc:1397
void m_swap(Artificial_Parameter &y)
Swaps *this with y.
Constraint_System constraints_
The local system of parameter constraints.
virtual PIP_Tree_Node * solve(const PIP_Problem &pip, bool check_feasible_context, const Matrix< Row > &context, const Variables_Set &params, dimension_type space_dim, int indent_level)=0
Executes a parametric simplex on the tableau, under specified context.
A node of the PIP solution tree.
virtual memory_size_type total_memory_in_bytes() const =0
Returns the total size in bytes of the memory occupied by *this.
Matrix< Row > s
The matrix of simplex coefficients.
A tag type to select the alternative copy constructor.
virtual memory_size_type external_memory_in_bytes() const
Returns the size in bytes of the memory managed by *this.
Definition: PIP_Tree.cc:3778
bool ascii_load(std::istream &s)
Loads from s an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this ...
Definition: PIP_Tree.cc:1571
static void indent_and_print(std::ostream &s, int indent, const char *str)
A helper function used when printing PIP trees.
Definition: PIP_Tree.cc:3803
void print(std::ostream &s, int indent=0) const
Prints on s the tree rooted in *this.
Definition: PIP_Tree.cc:3811
std::vector< Row_Sign > sign
A cache for computed sign values of constraint parametric RHS.
The type for parametric simplex tableau.
bool ascii_load(std::istream &is)
Loads from is an ASCII representation (as produced by ascii_dump(std::ostream&) const) and sets *this...
Definition: PIP_Tree.cc:1882