/home/coin/SVN-release/OS-1.0.0/OS/src/OSCommonInterfaces/OSInstance.h

Go to the documentation of this file.
00001 
00033 #ifndef OSINSTANCE_H
00034 #define OSINSTANCE_H
00035 #include "OSParameters.h"
00036 #include "OSDataStructures.h"
00037 #include "OSnLNode.h"
00038 #include "OSExpressionTree.h"
00039 #include <string>
00040 #include <map>
00041 #include<cppad/cppad.hpp>
00042 
00043 
00044 
00045 
00046 
00050 class Variable{
00051 public:
00053         Variable();
00054         
00056         ~Variable();
00057 
00061         double lb;
00062 
00066         double ub;
00067         
00071         double init;
00072         
00076         char type;
00077         
00081         std::string name;
00082         
00084         std::string initString;
00085 }; // class Variable
00086 
00087 
00091 class Variables{
00092 public:
00093 
00095         Variables();
00096         
00098         ~Variables();
00099         
00101         int numberOfVariables;
00102         
00104         Variable **var;
00105 }; // class Variables
00106 
00107 
00112 class ObjCoef{
00113 public:
00114 
00116         ObjCoef();
00117         
00119         ~ObjCoef();
00120         
00124         int idx;
00125         
00129         double value;
00130 };//class Coef
00131 
00136 class Constraint{
00137 public:
00138 
00140         Constraint();
00141         
00143         ~Constraint();
00144         
00146         std::string name;
00147         
00149         double constant;
00150         
00152         double lb;
00153         
00155         double ub;
00156 };//class Constraint
00157 
00158 
00163 class Constraints{
00164 public:
00165 
00167         Constraints();
00168         
00170         ~Constraints();
00171         
00175         int numberOfConstraints;
00176         
00179         Constraint **con;
00180 };//class Constraints
00181 
00182 
00187 class InstanceHeader{
00188 public:
00189 
00191         InstanceHeader();
00192         
00194         ~InstanceHeader();
00195         
00197         std::string description;
00198         
00200         std::string name;
00201         
00203         std::string source;             
00204 };//class InstanceHeader
00205 
00210 class Objective{
00211 public:
00212 
00214         Objective();
00215         
00217         ~Objective();
00218         
00220         std::string name;
00221         
00225         std::string maxOrMin;
00226         
00230         double constant;
00231         
00235         double weight;
00236         
00240         int numberOfObjCoef;
00241         
00244         ObjCoef **coef;
00245 };//class Objective
00246 
00251 class Objectives{
00252 public:
00253 
00255         Objectives();
00256         
00258         ~Objectives();
00259         
00263         int numberOfObjectives;
00264         
00267         Objective **obj;
00268 };//class Objectives
00269 
00281 class LinearConstraintCoefficients{
00282 public:
00283 
00285         LinearConstraintCoefficients();
00286         
00288         ~LinearConstraintCoefficients();
00289         
00293         int numberOfValues;
00294         
00298         IntVector *start;
00299         
00301         IntVector *rowIdx;
00302         
00304         IntVector *colIdx;
00305         
00307         DoubleVector *value;
00314         int iNumberOfStartElements;
00315 };//class LinearConstraintCoefficients
00316 
00317 
00327 class QuadraticTerm{
00328     public:
00329     
00331         QuadraticTerm();
00332         
00334         ~QuadraticTerm();
00335         
00339         int idx;
00340         
00344     int idxOne;
00345     
00349     int idxTwo;
00350     
00352     double coef;
00353 }; // QuadraticTerm
00354 
00355 
00356 
00357 
00363 class QuadraticCoefficients {
00364     public:
00365     
00367         QuadraticCoefficients();
00368         
00370         ~QuadraticCoefficients();
00371         
00375         int numberOfQuadraticTerms;
00376         
00379     QuadraticTerm** qTerm;
00380 }; // QuadraticCoefficients
00381 
00382 
00387 class Nl{  
00388 public: 
00390         int idx;
00391 
00397         bool m_bDeleteExpressionTree;
00398         
00400         OSExpressionTree *osExpressionTree;
00401         
00405         Nl();
00406 
00410         ~Nl();
00411 };//end Nl
00412 
00417 class NonlinearExpressions {
00418     public:
00419     
00421         NonlinearExpressions();
00422         
00424         ~NonlinearExpressions();
00425         
00430         int numberOfNonlinearExpressions;
00431         
00434     Nl **nl;
00435 }; // NonlinearExpression
00436  
00452 class InstanceData{
00453 public:
00454 
00456         InstanceData();
00457         
00459         ~InstanceData();
00460         
00462         Variables *variables;
00463         
00465         Objectives *objectives;
00466         
00468         Constraints *constraints;
00469         
00473         LinearConstraintCoefficients *linearConstraintCoefficients;
00474         
00478         QuadraticCoefficients* quadraticCoefficients;
00479         
00483         NonlinearExpressions* nonlinearExpressions;
00484 }; // class InstanceData
00485 
00486 
00513 class OSInstance {
00514 public:
00515 
00517         OSInstance(); 
00518         
00520         ~OSInstance();
00521         
00523         InstanceHeader *instanceHeader;
00524         
00526         InstanceData *instanceData;
00527 
00528 private:
00532         std::string m_sInstanceName;
00536         std::string m_sInstanceSource;  
00540         std::string m_sInstanceDescription;
00541         
00545         bool m_bProcessVariables ;
00546         
00550         int m_iVariableNumber;
00551         
00555         int m_iNumberOfIntegerVariables;
00556         
00560         int m_iNumberOfBinaryVariables;
00561         
00565         int m_iNumberOfQuadraticRowIndexes;
00566         
00570         bool m_bQuadraticRowIndexesProcessed;
00571 
00575         int *m_miQuadRowIndexes;
00576         
00580         int m_iNumberOfNonlinearExpressionTreeIndexes;
00581         
00585         bool m_bNonlinearExpressionTreeIndexesProcessed;
00586 
00591         int *m_miNonlinearExpressionTreeIndexes;
00592         
00597         int m_iNumberOfNonlinearExpressionTreeModIndexes;
00598         
00602         bool m_bNonlinearExpressionTreeModIndexesProcessed;
00603 
00608         int *m_miNonlinearExpressionTreeModIndexes;
00609         
00613         std::string* m_msVariableNames;
00614         
00618         double* m_mdVariableInitialValues ;
00619 
00623         std::string* m_msVariableInitialStringValues;
00624 
00629         char* m_mcVariableTypes;
00630 
00634         double* m_mdVariableLowerBounds;
00635 
00639         double* m_mdVariableUpperBounds;
00640 
00644         bool m_bProcessObjectives;
00645 
00649         int m_iObjectiveNumber;
00650         
00654         int m_iObjectiveNumberNonlinear;
00655         
00659         std::string* m_msObjectiveNames;
00660         
00664         std::string* m_msMaxOrMins;
00665         
00669         int* m_miNumberOfObjCoef;
00670         
00674         double* m_mdObjectiveConstants;
00675         
00679         double* m_mdObjectiveWeights;
00680         
00685         SparseVector** m_mObjectiveCoefficients;
00686         
00690         bool m_bGetDenseObjectives;
00691         
00696         double** m_mmdDenseObjectiveCoefficients;
00697 
00701         bool m_bProcessConstraints;
00702         
00706         int m_iConstraintNumber;
00707         
00711         int m_iConstraintNumberNonlinear;
00712 
00716         std::string* m_msConstraintNames;
00717         
00721         double* m_mdConstraintLowerBounds;
00722 
00726         double* m_mdConstraintUpperBounds;
00727         
00732         double* m_mdConstraintConstants;
00733 
00738         char* m_mcConstraintTypes;
00739         
00743         bool m_bProcessLinearConstraintCoefficients;
00744         
00749         int m_iLinearConstraintCoefficientNumber;
00750 
00754         bool m_bColumnMajor;
00755         
00759         bool m_binitForAlgDiff;
00760 
00761 
00766         SparseMatrix* m_linearConstraintCoefficientsInColumnMajor ;
00767 
00772         SparseMatrix* m_linearConstraintCoefficientsInRowMajor ;
00773 
00774         
00778         bool m_bProcessQuadraticTerms ;
00779 
00784         int m_iQuadraticTermNumber ;
00785 
00789     double *m_mdConstraintFunctionValues;
00790     
00794     double *m_mdObjectiveFunctionValues;
00795 
00799         int m_iJacValueSize;
00800     
00804         int *m_miJacStart;
00805         
00809         int *m_miJacIndex;
00810         
00814         double *m_mdJacValue;
00815         
00816         
00821         int *m_miJacNumConTerms;
00822  
00826         SparseJacobianMatrix *m_sparseJacMatrix;
00827         
00832          int m_iHighestTaylorCoeffOrder;
00833         
00838          QuadraticTerms* m_quadraticTerms;
00839          
00842          bool m_bQTermsAdded;
00843          
00848         unsigned int m_iNumberOfNonlinearVariables ;
00849          
00853         bool m_bProcessNonlinearExpressions ;
00854         
00858         int m_iNonlinearExpressionNumber;
00859 
00864         int* m_miNonlinearExpressionIndexes ;
00865         
00869         bool m_bProcessExpressionTrees;
00870         
00874         bool m_bProcessExpressionTreesMod;
00875         
00880         std::map<int, OSExpressionTree*> m_mapExpressionTrees ;
00881         
00882         
00883         
00884         std::map<int, int> m_mapCppADFunRangeIndex ;
00885         
00890         OSExpressionTree *m_LagrangianExpTree ;
00891         
00895         bool m_bLagrangianExpTreeCreated ;
00896         
00900         SparseHessianMatrix* m_LagrangianSparseHessian;
00901         
00906         bool m_bLagrangianSparseHessianCreated;
00907         
00911          std::map<int, int> m_mapAllNonlinearVariablesIndex;
00912 
00916         int *m_miNonLinearVarsReverseMap;
00917          
00922          bool m_bAllNonlinearVariablesIndex;
00923         
00930         std::map<int, OSExpressionTree*> m_mapExpressionTreesMod ;
00931         
00936          bool m_bCppADFunIsCreated;
00937         
00942         bool m_bCppADTapesBuilt;
00943         
00948         bool m_bCppADMustReTape;
00949         
00953         bool m_bDuplicateExpressionTreesMap;
00954         
00958         bool m_bNonLinearStructuresInitialized;
00959 
00963         bool m_bSparseJacobianCalculated;
00964         
00969         std::map<int, std::vector<OSnLNode*> > m_mapExpressionTreesInPostfix ;
00970          
00971         
00976          int m_iHighestOrderEvaluated;
00977          
00982         double **m_mmdObjGradient;
00983         
00984         //define the vectors
00985                 
00989         CppAD::vector< AD<double> > m_vX;       
00990 
00995         std::vector<double> m_vdX;
00996         
01001         std::vector<double> m_vdYval;
01002         
01007         std::vector<double> m_vdYjacval;
01008 
01013         std::vector<double> m_vdw;
01014         
01019         std::vector<double> m_vdLambda;
01020         
01021         
01026         std::vector<double> m_vdDomainUnitVec;
01027         
01032         std::vector<double> m_vdRangeUnitVec;
01033         
01034 
01035         
01042         bool processVariables() ;
01043         
01050         bool processObjectives();
01051         
01052         
01059         bool processConstraints();
01060         
01061         
01068         bool processLinearConstraintCoefficients();
01069         
01070         
01071 public:
01072 
01077         bool bUseExpTreeForFunEval;
01078         
01083         std::string getInstanceName();
01084                 
01085 
01090         std::string getInstanceSource();
01091         
01092         
01098         std::string getInstanceDescription();
01099         
01105         int getVariableNumber();
01106         
01113         std::string* getVariableNames();
01114         
01121         double* getVariableInitialValues();
01122         
01129         std::string* getVariableInitialStringValues();
01130         
01142         char* getVariableTypes();
01143         
01148         int getNumberOfIntegerVariables();
01149         
01154         int getNumberOfBinaryVariables();
01155         
01162         double* getVariableLowerBounds();
01163         
01170         double* getVariableUpperBounds();
01171         
01177         int getObjectiveNumber();
01178         
01179         
01186         std::string* getObjectiveNames();
01187 
01194         std::string* getObjectiveMaxOrMins();
01195         
01204         int* getObjectiveCoefficientNumbers();
01205         
01212         double* getObjectiveConstants();
01213         
01220         double* getObjectiveWeights();
01221         
01232         SparseVector** getObjectiveCoefficients();
01233         
01240         double** getDenseObjectiveCoefficients();
01241         
01247         int getConstraintNumber();
01248         
01255         std::string* getConstraintNames();
01256         
01263         double* getConstraintLowerBounds();
01264         
01271         double *getConstraintUpperBounds();
01272         
01285         char* getConstraintTypes();
01286         
01292         int getLinearConstraintCoefficientNumber();
01293         
01294 
01301         bool getLinearConstraintCoefficientMajor();
01302         
01303         
01310         SparseMatrix* getLinearConstraintCoefficientsInColumnMajor();
01311         
01318         SparseMatrix* getLinearConstraintCoefficientsInRowMajor();
01319         
01325         int getNumberOfQuadraticTerms();
01326         
01335         QuadraticTerms* getQuadraticTerms();
01336         
01344         int* getQuadraticRowIndexes();
01345         
01351         int getNumberOfQuadraticRowIndexes();
01352         
01358         int getNumberOfNonlinearExpressions();
01359         
01360         
01366         OSExpressionTree* getNonlinearExpressionTree(int rowIdx);
01367         
01374         OSExpressionTree* getNonlinearExpressionTreeMod(int rowIdx);
01375         
01382         std::vector<OSnLNode*> getNonlinearExpressionTreeInPostfix( int rowIdx); 
01383         
01391         std::vector<OSnLNode*> getNonlinearExpressionTreeModInPostfix( int rowIdx);  
01392         
01399         std::vector<OSnLNode*> getNonlinearExpressionTreeInPrefix( int rowIdx);  
01400         
01408         std::vector<OSnLNode*> getNonlinearExpressionTreeModInPrefix( int rowIdx);      
01409 
01410         
01414         int getNumberOfNonlinearObjectives();
01415 
01419         int getNumberOfNonlinearConstraints();
01420         
01424         std::map<int, OSExpressionTree* > getAllNonlinearExpressionTrees();
01425         
01426         
01430         std::map<int, OSExpressionTree* > getAllNonlinearExpressionTreesMod();
01431         
01437         int* getNonlinearExpressionTreeIndexes(); 
01438         
01439         
01445         int getNumberOfNonlinearExpressionTreeIndexes(); 
01446         
01447         
01454         int* getNonlinearExpressionTreeModIndexes(); 
01455         
01456         
01463         int getNumberOfNonlinearExpressionTreeModIndexes(); 
01464         
01465         
01466         // the set() methods
01467         
01468         
01475         bool setInstanceSource(std::string source);
01476         
01483         bool setInstanceDescription(std::string description);
01484         
01485                                         
01492         bool setInstanceName(std::string name);
01493         
01500         bool setVariableNumber(int number);
01501         
01518         bool addVariable(int index, std::string name, double lowerBound, double upperBound, char type, double init, std::string initString);
01519         
01535         bool setVariables(int number, std::string* names, double* lowerBounds, 
01536                 double* upperBounds, char* types, double* inits, std::string* initsString);
01537 
01544         bool setObjectiveNumber(int number);
01545         
01563         bool addObjective(int index, std::string name, std::string maxOrMin, double constant, double weight, SparseVector* objectiveCoefficients);
01564 
01580         bool setObjectives(int number, std::string *names, std::string *maxOrMins, double *constants, double *weights, SparseVector **objectitiveCoefficients);
01581                                         
01588         bool setConstraintNumber(int number);
01589 
01603 bool addConstraint(int index, std::string name, double lowerBound, double upperBound, double constant);
01604 
01616 bool setConstraints(int number, std::string* names, double* lowerBounds, double* upperBounds, double* constants);
01617 
01636 bool setLinearConstraintCoefficients(int numberOfValues, bool isColumnMajor, 
01637         double* values, int valuesBegin, int valuesEnd, 
01638         int* indexes, int indexesBegin, int indexesEnd,                         
01639         int* starts, int startsBegin, int startsEnd);
01640         
01656         bool setQuadraticTerms(int number, 
01657                 int* rowIndexes, int* varOneIndexes, int* varTwoIndexes, double* coefficients,
01658                 int begin, int end);
01659                 
01673         bool setQuadraticTermsInNonlinearExpressions(int number, 
01674                 int* rowIndexes, int* varOneIndexes, int* varTwoIndexes, double* coefficients);
01675                 
01676                 
01677                 
01678         // nonlinear API methods
01679         
01680         
01686         bool initializeNonLinearStructures( );
01687         
01701         double calculateFunctionValue(int idx, double* x, bool new_x);
01702         
01717         double *calculateAllConstraintFunctionValues(double* x, double *objLambda, double *conLambda,
01718                 bool new_x, int highestOrder);
01719                 
01733         double *calculateAllConstraintFunctionValues(double* x, bool new_x);
01734         
01750         double *calculateAllObjectiveFunctionValues(double* x, double *objLambda, double *conLambda,
01751                 bool new_x, int highestOrder);
01752         
01766         double *calculateAllObjectiveFunctionValues(double* x, bool new_x);     
01767                 
01768         
01783         SparseJacobianMatrix *calculateAllConstraintFunctionGradients(double* x, double *objLambda, 
01784                 double *conLambda, bool new_x, int highestOrder);               
01785                 
01786 
01802         SparseVector *calculateConstraintFunctionGradient(double* x, double *objLambda, double *conLambda,
01803                 int idx, bool new_x, int highestOrder);
01804                 
01818         SparseVector *calculateConstraintFunctionGradient(double* x, int idx, bool new_x );
01819         
01834         double **calculateAllObjectiveFunctionGradients(double* x, double *objLambda, double *conLambda,
01835                 bool new_x, int highestOrder);          
01836 
01852         double *calculateObjectiveFunctionGradient(double* x, double *objLambda, double *conLambda,
01853                 int objIdx, bool new_x, int highestOrder);
01854                 
01868         double *calculateObjectiveFunctionGradient(double* x, int objIdx, bool new_x );
01869 
01887         SparseHessianMatrix *calculateLagrangianHessian( double* x, double *objLambda, double *conLambda,
01888                 bool new_x, int highestOrder);
01889                 
01902         SparseHessianMatrix *calculateHessian( double* x, int idx, bool new_x);
01903         
01904                                 
01909         bool getSparseJacobianFromColumnMajor();
01910         
01915         bool getSparseJacobianFromRowMajor();
01916         
01921         OSExpressionTree* getLagrangianExpTree( );
01922 
01927         std::map<int, int> getAllNonlinearVariablesIndexMap( ); 
01928         
01929         
01934         SparseHessianMatrix* getLagrangianHessianSparsityPattern();
01935         
01936 
01937         
01942         bool addQTermsToExressionTree();
01943         
01948         SparseJacobianMatrix *getJacobianSparsityPattern();
01949         
01954         void duplicateExpressionTreesMap();
01955         
01956          
01961         CppAD::ADFun<double> *Fad;
01962 
01974         bool createCppADFun(std::vector<double> vdX );
01975         
01986         std::vector<double> forwardAD(int p, std::vector<double> vdX);
01987 
01998         std::vector<double> reverseAD(int p, std::vector<double> vdlambda);
01999          
02019         bool getIterateResults(double *x, double *objLambda, double *conLambda,  
02020                         bool new_x, int highestOrder);
02021                         
02022                         
02023                         
02036         bool getZeroOrderResults(double *x, double *objLambda, double *conLambda);
02037                         
02050         bool getFirstOrderResults(double *x, double *objLambda, double *conLambda );
02051                         
02064         bool getSecondOrderResults(double *x, double *objLambda, double *conLambda );
02065                         
02066 
02076         bool initForAlgDiff();
02077         
02087         bool initObjGradients();
02088         
02089                                                                                                                                                                                                                                                                                                                                                                                                                         
02090 }; //class OSInstance
02091 
02092 #endif
02093 

Generated on Thu May 15 22:15:04 2008 by  doxygen 1.4.7