# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1267516057 3600
# Node ID 1e16e62a9ea12b735e6c63bbd8905bd93f5a1ba9
# Parent e77b621e6e7ecd5a325e1546bdfd51aa01c7b395
Unify the interface of MipSolver and LpSolver (#326)
and improve the documentation.
 Add sol() (without parameters) to MipSolver as an alias for solValue(),
since we had primal() instead of primalValue() in LpSolver.
 Add primalValue() to LpSolver as an alias for primal() (without
parameters).
 Rename ColTypes to ColType in MipSolver and keep the old name as an
obsolete alias (typedef).
 Doc improvements and unifications.
diff git a/lemon/lp_base.h b/lemon/lp_base.h
a

b


1790  1790  /// 
1791  1791  /// \brief Common base class for LP solvers 
1792  1792  /// 
1793   /// This class is an abstract base class for LP solvers. This class 
 1793  /// This class is an abstract base class for LP solvers. It 
1794  1794  /// provides a full interface for set and modify an LP problem, 
1795  1795  /// solve it and retrieve the solution. You can use one of the 
1796  1796  /// descendants as a concrete implementation, or the \c Lp 
… 
… 

1800  1800  class LpSolver : virtual public LpBase { 
1801  1801  public: 
1802  1802  
1803   /// The problem types for primal and dual problems 
 1803  /// \brief The problem types for primal and dual problems 
 1804  /// 
 1805  /// The problem types for primal and dual problems. 
1804  1806  enum ProblemType { 
1805  1807  /// = 0. Feasible solution hasn't been found (but may exist). 
1806  1808  UNDEFINED = 0, 
… 
… 

1814  1816  UNBOUNDED = 4 
1815  1817  }; 
1816  1818  
1817   ///The basis status of variables 
 1819  /// \brief The basis status of variables 
 1820  /// 
 1821  /// The basis status of variables. 
1818  1822  enum VarStatus { 
1819  1823  /// The variable is in the basis 
1820  1824  BASIC, 
… 
… 

1857  1861  
1858  1862  ///@{ 
1859  1863  
1860   ///\e Solve the LP problem at hand 
 1864  ///\brief Solve the specified LP problem 
1861  1865  /// 
 1866  ///This function solves the specified LP problem. 
1862  1867  ///\return The result of the optimization procedure. Possible 
1863  1868  ///values and their meanings can be found in the documentation of 
1864  1869  ///\ref SolveExitStatus. 
… 
… 

1870  1875  
1871  1876  ///@{ 
1872  1877  
1873   /// The type of the primal problem 
 1878  /// Return the type of the primal problem 
 1879  
 1880  /// This function returns the type of the primal problem. 
 1881  /// \see ProblemType 
1874  1882  ProblemType primalType() const { 
1875  1883  return _getPrimalType(); 
1876  1884  } 
1877  1885  
1878   /// The type of the dual problem 
 1886  /// Return the type of the dual problem 
 1887  
 1888  /// This function returns the type of the dual problem. 
 1889  /// \see ProblemType 
1879  1890  ProblemType dualType() const { 
1880  1891  return _getDualType(); 
1881  1892  } 
1882  1893  
 1894  /// Return the primal value of the objective function 
 1895  
 1896  /// This function returns the primal value of the objective function. 
 1897  /// \return 
 1898  ///  \ref INF or \ref INF means either infeasibility or unboundedness 
 1899  /// of the primal problem, depending on whether we minimize or maximize. 
 1900  ///  \ref NaN if no primal solution is found. 
 1901  ///  The (finite) objective value if an optimal solution is found. 
 1902  Value primalValue() const { return _getPrimalValue()+obj_const_comp;} 
 1903  
 1904  /// Return the primal value of the objective function 
 1905  
 1906  /// This function returns the primal value of the objective function. 
 1907  /// It is an alias for \ref primalValue(). 
 1908  Value primal() const { return _getPrimalValue()+obj_const_comp;} 
 1909  
1883  1910  /// Return the primal value of the column 
1884  1911  
1885   /// Return the primal value of the column. 
 1912  /// This function returns the primal value of the given column. 
1886  1913  /// \pre The problem is solved. 
1887  1914  Value primal(Col c) const { return _getPrimal(cols(id(c))); } 
1888  1915  
1889  1916  /// Return the primal value of the expression 
1890  1917  
1891   /// Return the primal value of the expression, i.e. the dot 
1892   /// product of the primal solution and the expression. 
 1918  /// This function returns the primal value of the given expression, 
 1919  /// i.e. the dot product of the primal solution and the expression. 
1893  1920  /// \pre The problem is solved. 
1894  1921  Value primal(const Expr& e) const { 
1895  1922  double res = *e; 
… 
… 

1898  1925  } 
1899  1926  return res; 
1900  1927  } 
1901   /// Returns a component of the primal ray 
 1928  
 1929  /// Return a component of the primal ray 
1902  1930  
1903  1931  /// The primal ray is solution of the modified primal problem, 
1904  1932  /// where we change each finite bound to 0, and we looking for a 
… 
… 

1915  1943  
1916  1944  /// Return the dual value of the row 
1917  1945  
1918   /// Return the dual value of the row. 
 1946  /// This function returns the dual value of the given row. 
1919  1947  /// \pre The problem is solved. 
1920  1948  Value dual(Row r) const { return _getDual(rows(id(r))); } 
1921  1949  
1922  1950  /// Return the dual value of the dual expression 
1923  1951  
1924   /// Return the dual value of the dual expression, i.e. the dot 
1925   /// product of the dual solution and the dual expression. 
 1952  /// This function returns the dual value of the given dual expression, 
 1953  /// i.e. the dot product of the dual solution and the dual expression. 
1926  1954  /// \pre The problem is solved. 
1927  1955  Value dual(const DualExpr& e) const { 
1928  1956  double res = 0.0; 
… 
… 

1932  1960  return res; 
1933  1961  } 
1934  1962  
1935   /// Returns a component of the dual ray 
 1963  /// Return a component of the dual ray 
1936  1964  
1937  1965  /// The dual ray is solution of the modified primal problem, where 
1938  1966  /// we change each finite bound to 0 (i.e. the objective function 
… 
… 

1949  1977  
1950  1978  /// Return the basis status of the column 
1951  1979  
 1980  /// This function returns the basis status of the column. 
1952  1981  /// \see VarStatus 
1953  1982  VarStatus colStatus(Col c) const { return _getColStatus(cols(id(c))); } 
1954  1983  
1955  1984  /// Return the basis status of the row 
1956  1985  
 1986  /// This function returns the basis status of the row. 
1957  1987  /// \see VarStatus 
1958  1988  VarStatus rowStatus(Row r) const { return _getRowStatus(rows(id(r))); } 
1959   
1960   ///The value of the objective function 
1961   
1962   ///\return 
1963   /// \ref INF or \ref INF means either infeasibility or unboundedness 
1964   /// of the primal problem, depending on whether we minimize or maximize. 
1965   /// \ref NaN if no primal solution is found. 
1966   /// The (finite) objective value if an optimal solution is found. 
1967   Value primal() const { return _getPrimalValue()+obj_const_comp;} 
1968  1989  ///@} 
1969  1990  
1970   protected: 
1971   
1972  1991  }; 
1973  1992  
1974  1993  
… 
… 

1976  1995  /// 
1977  1996  /// \brief Common base class for MIP solvers 
1978  1997  /// 
1979   /// This class is an abstract base class for MIP solvers. This class 
 1998  /// This class is an abstract base class for MIP solvers. It 
1980  1999  /// provides a full interface for set and modify an MIP problem, 
1981  2000  /// solve it and retrieve the solution. You can use one of the 
1982  2001  /// descendants as a concrete implementation, or the \c Lp 
… 
… 

1986  2005  class MipSolver : virtual public LpBase { 
1987  2006  public: 
1988  2007  
1989   /// The problem types for MIP problems 
 2008  /// \brief The problem types for MIP problems 
 2009  /// 
 2010  /// The problem types for MIP problems. 
1990  2011  enum ProblemType { 
1991  2012  /// = 0. Feasible solution hasn't been found (but may exist). 
1992  2013  UNDEFINED = 0, 
… 
… 

2010  2031  
2011  2032  ///@{ 
2012  2033  
2013   /// Solve the MIP problem at hand 
 2034  ///\brief Solve the specified MIP problem 
2014  2035  /// 
 2036  ///This function solves the specified MIP problem. 
2015  2037  ///\return The result of the optimization procedure. Possible 
2016  2038  ///values and their meanings can be found in the documentation of 
2017  2039  ///\ref SolveExitStatus. 
… 
… 

2022  2044  ///\name Set Column Type 
2023  2045  ///@{ 
2024  2046  
2025   ///Possible variable (column) types (e.g. real, integer, binary etc.) 
2026   enum ColTypes { 
 2047  /// The column types for MIP problems. 
 2048  
 2049  /// The column (variable) types for MIP problems. 
 2050  /// 
 2051  enum ColType { 
2027  2052  /// = 0. Continuous variable (default). 
2028  2053  REAL = 0, 
2029  2054  /// = 1. Integer variable. 
2030  2055  INTEGER = 1 
2031  2056  }; 
2032  2057  
 2058  /// \brief The column types for MIP problems. It is an obsolete alias for 
 2059  /// \ref ColType. 
 2060  typedef ColType ColTypes; 
 2061  
2033  2062  ///Sets the type of the given column to the given type 
2034  2063  
2035   ///Sets the type of the given column to the given type. 
 2064  ///This function sets the type of the given column to the given type. 
2036  2065  /// 
2037  2066  void colType(Col c, ColTypes col_type) { 
2038  2067  _setColType(cols(id(c)),col_type); 
… 
… 

2040  2069  
2041  2070  ///Gives back the type of the column. 
2042  2071  
2043   ///Gives back the type of the column. 
 2072  ///This function gives back the type of the column. 
2044  2073  /// 
2045  2074  ColTypes colType(Col c) const { 
2046  2075  return _getColType(cols(id(c))); 
… 
… 

2051  2080  
2052  2081  ///@{ 
2053  2082  
2054   /// The type of the MIP problem 
 2083  /// Return the type of the MIP problem 
 2084  
 2085  /// This function returns the type of the MIP problem. 
 2086  /// \see ProblemType 
2055  2087  ProblemType type() const { 
2056  2088  return _getType(); 
2057  2089  } 
2058  2090  
2059   /// Return the value of the row in the solution 
 2091  /// Return the value of the objective function 
 2092  
 2093  /// This function returns the value of the objective function. 
 2094  /// \return 
 2095  ///  \ref INF or \ref INF means either infeasibility or unboundedness 
 2096  /// of the problem, depending on whether we minimize or maximize. 
 2097  ///  \ref NaN if no primal solution is found. 
 2098  ///  The (finite) objective value if an optimal solution is found. 
 2099  Value solValue() const { return _getSolValue()+obj_const_comp;} 
2060  2100  
2061   /// Return the value of the row in the solution. 
 2101  /// Return the value of the objective function 
 2102  
 2103  /// This function returns value of the objective function. 
 2104  /// It is an alias for \ref solValue(). 
 2105  Value sol() const { return _getSolValue()+obj_const_comp;} 
 2106  
 2107  /// Return the value of the column 
 2108  
 2109  /// This function returns the value of the given column in the solution. 
2062  2110  /// \pre The problem is solved. 
2063  2111  Value sol(Col c) const { return _getSol(cols(id(c))); } 
2064  2112  
2065   /// Return the value of the expression in the solution 
 2113  /// Return the value of the expression 
2066  2114  
2067   /// Return the value of the expression in the solution, i.e. the 
2068   /// dot product of the solution and the expression. 
 2115  /// This function returns the value of the given expression in the solution, 
 2116  /// i.e. the dot product of the solution and the expression. 
2069  2117  /// \pre The problem is solved. 
2070  2118  Value sol(const Expr& e) const { 
2071  2119  double res = *e; 
… 
… 

2074  2122  } 
2075  2123  return res; 
2076  2124  } 
2077   ///The value of the objective function 
2078   
2079   ///\return 
2080   /// \ref INF or \ref INF means either infeasibility or unboundedness 
2081   /// of the problem, depending on whether we minimize or maximize. 
2082   /// \ref NaN if no primal solution is found. 
2083   /// The (finite) objective value if an optimal solution is found. 
2084   Value solValue() const { return _getSolValue()+obj_const_comp;} 
 2125  
2085  2126  ///@} 
2086  2127  
2087  2128  protected: 