00001
00002
00003
00004
00005 #ifndef QPGENVARS
00006 #define QPGENVARS
00007
00008 #include "Variables.h"
00009 #include "OoqpVectorHandle.h"
00010
00011 class QpGen;
00012 class QpGenData;
00013 class LinearAlgebraPackage;
00014 class MpsReader;
00015
00016 #ifdef TESTING
00017 class QpGenVarsTester;
00018 #endif
00019
00025 class QpGenVars : public Variables {
00026 #ifdef TESTING
00027 friend QpGenVarsTester;
00028 #endif
00029 protected:
00030 int nx, nxupp, nxlow;
00031 int my;
00032 int mz, mcupp, mclow;
00033
00034 OoqpVectorHandle ixlow;
00035 OoqpVectorHandle ixupp;
00036 OoqpVectorHandle icupp;
00037 OoqpVectorHandle iclow;
00038
00039 public:
00040
00041 OoqpVectorHandle x;
00042 OoqpVectorHandle s;
00043 OoqpVectorHandle y;
00044 OoqpVectorHandle z;
00045
00046 OoqpVectorHandle v;
00047 OoqpVectorHandle phi;
00048
00049 OoqpVectorHandle w;
00050 OoqpVectorHandle gamma;
00051
00052 OoqpVectorHandle t;
00053 OoqpVectorHandle lambda;
00054
00055 OoqpVectorHandle u;
00056 OoqpVectorHandle pi;
00057
00060 QpGenVars( OoqpVector * x_in, OoqpVector * s_in,
00061 OoqpVector * y_in, OoqpVector * z_in,
00062 OoqpVector * v_in, OoqpVector * gamma_in,
00063 OoqpVector * w_in, OoqpVector * phi_in,
00064 OoqpVector * t_in, OoqpVector * lambda_in,
00065 OoqpVector * u_in, OoqpVector * pi_in,
00066 OoqpVector * ixlow_in, OoqpVector * ixupp_in,
00067 OoqpVector * iclow_in, OoqpVector * icupp_in );
00068
00071 QpGenVars( LinearAlgebraPackage * la,
00072 int nx_, int my_, int mz_,
00073 OoqpVector * ixlow, OoqpVector * ixupp,
00074 OoqpVector * iclow, OoqpVector * icupp );
00075
00076 virtual ~QpGenVars();
00077
00079 virtual double mu();
00080
00081 virtual double mustep(Variables *step_in, double alpha);
00082
00083 virtual void saxpy( Variables *b, double alpha );
00084 virtual void negate();
00085
00093 virtual double stepbound( Variables *b );
00094
00117 virtual double findBlocking( Variables * step,
00118 double & primalValue,
00119 double & primalStep,
00120 double & dualValue,
00121 double & dualStep,
00122 int& firstOrSecond );
00123
00126 virtual void interiorPoint( double alpha, double beta );
00127
00130 virtual void shiftBoundVariables( double alpha, double beta );
00131
00133 virtual int isInteriorPoint();
00134
00135 virtual double violation();
00136
00137 virtual void print();
00138 virtual void printSolution( MpsReader * reader, QpGenData * prob,
00139 int& iErr );
00140
00141 virtual void unscaleSolution( QpGenData * data);
00142 virtual void unscaleBounds ( QpGenData * data);
00143
00144 virtual int validNonZeroPattern();
00145
00146 virtual void copy(Variables *b);
00147
00148 virtual double onenorm();
00149 virtual double infnorm();
00150 };
00151
00158 enum { no_block = 0,
00159 t_block = 1,
00160 lambda_block = 2,
00161 u_block = 3,
00162 pi_block = 4,
00163 v_block = 5,
00164 gamma_block = 6,
00165 w_block = 7,
00166 phi_block = 8
00167 };
00168
00169 #endif
00170