00001
00002
00003
00004
00005 #ifndef QPBOUNDVARS_H
00006 #define QPBOUNDVARS_H
00007
00008 #include "Variables.h"
00009 #include "OoqpVectorHandle.h"
00010
00011 class QpBound;
00012 class QpBoundData;
00013
00020 class QpBoundVars : public Variables
00021 {
00022 public:
00023 QpBound * factory;
00024
00026 OoqpVectorHandle x;
00027
00029 OoqpVectorHandle t;
00030
00032 OoqpVectorHandle v;
00033
00035 OoqpVectorHandle tau;
00036
00038 OoqpVectorHandle nu;
00039
00041 OoqpVectorHandle index_lower;
00042
00044 OoqpVectorHandle index_upper;
00045
00047 int nx;
00048
00050 int nlower;
00051
00053 int nupper;
00054
00056 QpBoundVars( QpBound * f, QpBoundData *prob );
00057
00059 QpBoundVars( QpBound * f, QpBoundData *prob,
00060 OoqpVector * x,
00061 OoqpVector * t, OoqpVector * v,
00062 OoqpVector * tau, OoqpVector * nu );
00063 virtual ~QpBoundVars();
00064
00066 virtual double mu();
00067
00068
00069 virtual double mustep(Variables *step, double alpha);
00070
00072 virtual void saxpy( Variables *b, double alpha);
00073
00074 virtual void negate();
00075
00098 virtual double findBlocking( Variables * step,
00099 double & primalValue,
00100 double & primalStep,
00101 double & dualValue,
00102 double & dualStep,
00103 int& firstOrSecond );
00104
00112 virtual double stepbound( Variables *b);
00113
00115 virtual void interiorPoint( double alpha, double beta );
00116
00119 virtual void shiftBoundVariables( double alpha, double beta );
00120
00121 virtual double violation();
00122
00123
00124 virtual void print();
00125
00126 virtual void copy(Variables *b);
00127 virtual double onenorm();
00128 virtual double infnorm();
00129 };
00130
00137 enum { no_block = 0,
00138 t_block = 1,
00139 tau_block = 2,
00140 v_block = 3,
00141 nu_block = 4
00142 };
00143
00144 #endif