Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > by-pkgid > e1c4a3050d44123471c4053e4926e965 > files > 164

gfan-debug-0.4plus-2mdv2011.0.i586.rpm

#ifndef FIELDLP_H_INCLUDED
#define FIELDLP_H_INCLUDED

#include "linalg.h"
#include <set>

/**
   @brief A linear programming problem.

   This class represents linear programming problems of the form
   max(w,x) subject to Ax<=b. Or rather subject to
   A_ix<=b_i + epsilon^i. Notice that such perturbed system, if feassible,
   is fulldimensional. The problems can be stated over any ordered Field.

   The class has a state represented by the basis basis and vector x which first must be set by calling setCurrentBasis() or...
   A basis can only be set if the system is feassible.
   Afterwards step() can be called repeatedly until an optimal solution is found or the problem turns out to be unbounded.
*/
class FieldLP
{
  Field theField;
  FieldMatrix A;
  FieldVector b;
  FieldVector w;
  FieldVector x;
  set<int> basis;

  static FieldVector subvector(FieldVector const &v, set<int> const &b);
  static FieldMatrix submatrix(FieldMatrix const &m, set<int> const &b);

  FieldVector edgeDirection(int i)const;
  bool isImprovingDirection(int i)const;
  FieldElement improvement(int i, int &newBasisMember)const;
 public:
  FieldLP(FieldMatrix const &A_, FieldVector const &b_);
  FieldVector basisToPoint(set<int> const &basis)const;
  void setObjectiveFunction(FieldVector const &w_);
  void setCurrentBasis(set<int> const &basis_);
  FieldMatrix computeLinealitySpace();
  FieldLP buildLPForFeasibilityCheck();
  void print(Printer &P)const;
  int step();
  bool findFeasibleBasis();
  FieldLP withNoLineality();
};

#endif