/home/coin/SVN-release/OS-1.1.1/OS/src/OSCommonInterfaces/OSiLWriter.cpp

Go to the documentation of this file.
00001 
00017 #include "OSiLWriter.h"
00018 #include "OSInstance.h"
00019 #include "OSParameters.h" 
00020 #include "OSCommonUtil.h"
00021 #include "OSBase64.h"
00022 #include "OSMathUtil.h"
00023 
00024 #include <sstream>  
00025 
00026 using std::cout;
00027 using std::endl;
00028 using std::ostringstream; 
00029 
00030 //#define USE_DTOA
00031 
00032 
00033 OSiLWriter::OSiLWriter( ) {     
00034         m_bWriteBase64 = false;
00035         m_bWhiteSpace = false;
00036 }
00037 
00038 OSiLWriter::~OSiLWriter(){
00039 }
00040 
00041 std::string OSiLWriter::writeOSiL( const OSInstance *theosinstance){
00042 
00043         m_OSInstance = theosinstance;
00044         ostringstream outStr;
00045         int i, j;
00046         if(m_OSInstance == NULL)  return outStr.str();
00047         outStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ;
00048         outStr << "<osil xmlns=\"os.optimizationservices.org\"   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/OSiL.xsd\" >" ;
00049         outStr << "<instanceHeader>" ;
00050         if( m_bWhiteSpace == true) outStr << endl;
00051         if(m_OSInstance->instanceHeader != NULL){
00052                 if(m_OSInstance->instanceHeader->name.length() > 0){
00053                         outStr << "<name>" + m_OSInstance->instanceHeader->name + "</name>"  ;
00054                 }
00055 
00056                 if(m_OSInstance->instanceHeader->source.length() > 0){
00057                         outStr << "<source>" + m_OSInstance->instanceHeader->source + "</source>"  ;
00058                 }
00059                 if(m_OSInstance->instanceHeader->description.length() > 0){
00060                         outStr << "<description>" + m_OSInstance->instanceHeader->description  + "</description>";
00061                 }
00062         }
00063         outStr << "</instanceHeader>" ;
00064         if( m_bWhiteSpace == true) outStr << endl;
00065         if(m_OSInstance->instanceData != NULL){
00066                 outStr << "<instanceData>" ;
00067                 if( m_bWhiteSpace == true) outStr << endl;
00068                 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0){
00069                         outStr << "<variables " ;
00070                         outStr << "numberOfVariables=\"";
00071                         outStr << m_OSInstance->instanceData->variables->numberOfVariables ;
00072                         outStr << "\"" ;
00073                         outStr << ">" ;
00074                         if( m_bWhiteSpace == true) outStr << endl;
00075                         // get variable information
00076                         for(i = 0; i < m_OSInstance->instanceData->variables->numberOfVariables; i++){
00077                                 if(m_OSInstance->instanceData->variables->var[i] != NULL){
00078                                         outStr << "<var" ;
00079                                         if(m_OSInstance->instanceData->variables->var[i]->name.length() > 0){
00080                                                 outStr << " name=\"" ;
00081                                                 outStr << m_OSInstance->instanceData->variables->var[i]->name ;
00082                                                 outStr <<  "\"";
00083                                         }
00084                                         if( m_OSInstance->instanceData->variables->var[i]->type != 'C'){
00085                                                 outStr << " type=\"" ;
00086                                                 outStr << m_OSInstance->instanceData->variables->var[i]->type ;
00087                                                 outStr <<  "\"";
00088                                         }
00089                                         if( m_OSInstance->instanceData->variables->var[i]->lb != 0.0){
00090                                                 outStr << " lb=\"" ;
00091                                                 outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->lb) ;
00092                                                 outStr <<  "\"";  
00093                                         }
00094                                         if( m_OSInstance->instanceData->variables->var[i]->ub != OSDBL_MAX
00095                                                 && m_OSInstance->instanceData->variables->var[i]->ub != OSNAN ) {
00096                                                 outStr << " ub=\"" ;
00097                                                 outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->ub) ;
00098                                                 outStr <<  "\"";
00099                                         }
00100                                         /*
00101                                         if(CommonUtil::ISOSNAN(m_OSInstance->instanceData->variables->var[i]->init) == false){
00102                                                 outStr << " init=\"" ;
00103                                                 outStr << os_dtoa_format(m_OSInstance->instanceData->variables->var[i]->init) ;
00104                                                 outStr <<  "\"";
00105                                         }
00106                                         */
00107                                         if(m_OSInstance->instanceData->variables->var[i]->initString != ""){
00108                                                 outStr << " initString=\"" ;
00109                                                 outStr << m_OSInstance->instanceData->variables->var[i]->initString ;
00110                                                 outStr <<  "\"";
00111                                         }
00112                                         outStr << "/>" ;
00113                                         if( m_bWhiteSpace == true) outStr << endl;
00114                                 }
00115                         } // end the for loop
00116                         outStr << "</variables>" ;
00117                         if( m_bWhiteSpace == true) outStr << endl;
00118                 }
00119                 if(m_OSInstance->instanceData->objectives != NULL && m_OSInstance->instanceData->objectives->numberOfObjectives > 0){
00120                         outStr << "<objectives " ; 
00121                         outStr << "numberOfObjectives=\"";
00122                         outStr << m_OSInstance->instanceData->objectives->numberOfObjectives ;
00123                         outStr << "\"" ;
00124                         outStr << ">" ;
00125                         if( m_bWhiteSpace == true) outStr << endl;
00126                         for (j = 0; j < m_OSInstance->instanceData->objectives->numberOfObjectives; j++){
00127                                 if(m_OSInstance->instanceData->objectives->obj[j] != NULL){
00128                                         outStr << "<obj" ;
00129                                         if(m_OSInstance->instanceData->objectives->obj[j]->maxOrMin.length() > 0){
00130                                                 outStr << " maxOrMin=\"" ;
00131                                                 outStr << m_OSInstance->instanceData->objectives->obj[j]->maxOrMin  ;
00132                                                 outStr <<  "\"";
00133                                         }
00134                                         if(m_OSInstance->instanceData->objectives->obj[j]->constant != 0.0){
00135                                                 outStr << " constant=\"" ;
00136                                                 outStr <<  os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->constant)  ;
00137                                                 outStr <<  "\"";
00138                                         }
00139                                         if(m_OSInstance->instanceData->objectives->obj[j]->weight != 1.0){
00140                                                 outStr << " weight=\"" ;
00141                                                 outStr <<  os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->weight)  ;
00142                                                 outStr <<  "\"";
00143                                         }
00144                                         if(m_OSInstance->instanceData->objectives->obj[j]->name.length() > 0){
00145                                                 outStr << " name=\"" ;
00146                                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->name  ;
00147                                                 outStr <<  "\"";
00148                                         }
00149                                         outStr << " numberOfObjCoef=\"" ;
00150                                         outStr <<  m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef  ;
00151                                         outStr <<  "\"";
00152                                         outStr << ">" ;
00153                                         if( m_bWhiteSpace == true) outStr << endl;
00154                                         if(m_OSInstance->instanceData->objectives->obj[j]->coef != NULL){
00155                                                 for (i = 0; i < m_OSInstance->instanceData->objectives->obj[ j]->numberOfObjCoef; i++){
00156                                                         if(m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx > -1 ){
00157                                                                 outStr << "<coef" ;
00158                                                                 outStr << " idx=\"" ;
00159                                                                 outStr <<  m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx ;
00160                                                                 outStr <<  "\"";
00161                                                                 outStr << ">";
00162                                                                 //
00163                                                                 //
00164                                                                 outStr << os_dtoa_format( m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value) ;
00165                                                                 //outStr << m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value ;
00166                                                                 outStr << "</coef>" ;
00167                                                                 if( m_bWhiteSpace == true) outStr << endl;
00168                                                         }
00169                                                 }
00170                                         }
00171                                         outStr << "</obj>" ;
00172                                         if( m_bWhiteSpace == true) outStr << endl;
00173                                 }
00174                         }
00175                         outStr << "</objectives>" ;
00176                         if( m_bWhiteSpace == true) outStr << endl;
00177                 }
00178                 // Now the constraints
00179                 if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0){
00180                         outStr << "<constraints " ;
00181                         outStr << "numberOfConstraints=\"";
00182                         outStr << m_OSInstance->instanceData->constraints->numberOfConstraints ;
00183                         outStr << "\"" ;
00184                         outStr << ">" ;
00185                         if( m_bWhiteSpace == true) outStr << endl;
00186                         for (i = 0; i < m_OSInstance->instanceData->constraints->numberOfConstraints; i++){
00187                                 if(m_OSInstance->instanceData->constraints->con[i] != NULL){
00188                                         outStr << "<con" ; 
00189                                         if(m_OSInstance->instanceData->constraints->con[i]->name.length()){
00190                                                 outStr << " name=\"" ;
00191                                                 outStr << m_OSInstance->instanceData->constraints->con[i]->name ;
00192                                                 outStr <<  "\"";
00193                                         }
00194                                         if(m_OSInstance->instanceData->constraints->con[i]->constant != 0){
00195                                                 outStr << " constant=\"" ;
00196                                                 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->constant) ;
00197                                                 outStr <<  "\"";
00198                                         }
00199                                         if(m_OSInstance->instanceData->constraints->con[i]->lb != -OSDBL_MAX ){
00200                                                 outStr << " lb=\"" ;
00201                                                 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->lb) ;
00202                                                 outStr <<  "\"";
00203                                         }
00204                                         if(m_OSInstance->instanceData->constraints->con[i]->ub != OSDBL_MAX){
00205                                                 outStr << " ub=\"" ;
00206                                                 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->ub) ;
00207                                                 outStr <<  "\"";
00208                                         }
00209                                         outStr << "/>" ;
00210                                         if( m_bWhiteSpace == true) outStr << endl;
00211                                 }
00212                         }
00213                 outStr << "</constraints>" ;
00214                 if( m_bWhiteSpace == true) outStr << endl;
00215                 }
00216                 // now the linearConstraintsCoefficients
00217                 if(m_OSInstance->instanceData->linearConstraintCoefficients != NULL && m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues > 0){
00218                         outStr << "<linearConstraintCoefficients " ;
00219                         outStr << "numberOfValues=\"";
00220                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues ;
00221                         outStr << "\"" ;
00222                         outStr << ">" ;
00223                         if( m_bWhiteSpace == true) outStr << endl;
00224                         if( (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx != NULL) &&
00225                                 (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el != NULL) ){
00226                                         if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL){
00227                                                 outStr << "<start>" ;
00228                                                 if( m_bWhiteSpace == true) outStr << endl;
00229                                                 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0){
00230                                                         if(m_bWriteBase64 == false){
00231                                                                 for(i = 0; i <= m_OSInstance->instanceData->variables->numberOfVariables; i++){
00232                                                                         outStr << "<el>" ;
00233                                                                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00234                                                                         outStr << "</el>" ;
00235                                                                         if( m_bWhiteSpace == true) outStr << endl;
00236                                                                 }
00237                                                         }
00238                                                         else{
00239                                                                 //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00240                                                                 outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00241                                                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el, 
00242                                                                         (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00243                                                                 outStr<< "</base64BinaryData>" ;
00244                                                                 if( m_bWhiteSpace == true) outStr << endl;
00245                                                         }
00246                                                 }
00247                                                 outStr << "</start>" ;
00248                                                 if( m_bWhiteSpace == true) outStr << endl;
00249                                         }
00250                                         outStr << "<rowIdx>" ;
00251                                         if( m_bWhiteSpace == true) outStr << endl;
00252                                         if(m_bWriteBase64 == false){            
00253                                                 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues; i++){
00254                                                         outStr << "<el>" ;
00255                                                         outStr << m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i] ;
00256                                                         outStr << "</el>"  ;
00257                                                         if( m_bWhiteSpace == true) outStr << endl;
00258                                                 }
00259                                         }
00260                                         else{
00261                                                 //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00262                                                 outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00263                                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el, 
00264                                                         m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00265                                                 outStr<< "</base64BinaryData>" ;
00266                                                 if( m_bWhiteSpace == true) outStr << endl;
00267                                         }
00268                                         outStr << "</rowIdx>" ;
00269                                         if( m_bWhiteSpace == true) outStr << endl;
00270                         }
00271                         else{
00272                                 if( (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx != NULL)  &&
00273                                         (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el != NULL) ){
00274                                                 if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL){
00275                                                         outStr << "<start>" ;
00276                                                         if( m_bWhiteSpace == true) outStr << endl;
00277                                                         if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0){
00278                                                                 if(m_bWriteBase64 == false){
00279                                                                         for(i = 0; i <= m_OSInstance->instanceData->constraints->numberOfConstraints; i++){
00280                                                                                 outStr << "<el>" ;
00281                                                                                 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00282                                                                                 outStr << "</el>" ;
00283                                                                                 if( m_bWhiteSpace == true) outStr << endl;
00284                                                                         }
00285                                                                 }
00286                                                                 else{
00287                                                                         //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00288                                                                         outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00289                                                                         outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el, 
00290                                                                                 (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00291                                                                         outStr<< "</base64BinaryData>" ;
00292                                                                         if( m_bWhiteSpace == true) outStr << endl;
00293                                                                 }
00294                                                         }
00295                                                         outStr << "</start>" ;
00296                                                         if( m_bWhiteSpace == true) outStr << endl;
00297                                                 }
00298                                                 outStr << "<colIdx>";
00299                                                 if( m_bWhiteSpace == true) outStr << endl;
00300                                                 if(m_bWriteBase64 == false){
00301                                                         for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues; i++){
00302                                                                 outStr << "<el>" ;
00303                                                                 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i] ;
00304                                                                 outStr << "</el>"  ;
00305                                                                 if( m_bWhiteSpace == true) outStr << endl;
00306                                                         }
00307                                                 }
00308                                                 else{
00309                                                         //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
00310                                                         outStr << "<base64BinaryData sizeOf=\"4\"  >" ;
00311                                                         outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el, 
00312                                                                 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00313                                                         outStr<< "</base64BinaryData>" ;
00314                                                         if( m_bWhiteSpace == true) outStr << endl;
00315                                                 }
00316                                                 outStr << "</colIdx>" ;
00317                                                 if( m_bWhiteSpace == true) outStr << endl;
00318                                         }
00319                         }
00320                         if(m_OSInstance->instanceData->linearConstraintCoefficients->value != NULL){
00321                                 outStr << "<value>" ;
00322                                 if( m_bWhiteSpace == true) outStr << endl;
00323                                 if(m_OSInstance->instanceData->linearConstraintCoefficients->value->el != NULL){
00324                                         if(m_bWriteBase64 == false){
00325                                                 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues; i++){
00326                                                         outStr << "<el>";
00327                                                         outStr <<   os_dtoa_format( m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i] );
00328                                                         //outStr <<   m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i] ;
00329                                                         outStr << "</el>" ;
00330                                                         if( m_bWhiteSpace == true) outStr << endl;              
00331                                                 }
00332                                         }
00333                                         else{
00334                                                 //outStr << "<base64BinaryData sizeOf=\"8\" numericType=\"double\" >" ;
00335                                                 outStr << "<base64BinaryData sizeOf=\"8\"  >" ;
00336                                                 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->value->el, 
00337                                                         m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof( double) );
00338                                                 outStr<< "</base64BinaryData>" ;
00339                                                 if( m_bWhiteSpace == true) outStr << endl;
00340                                         }
00341                                 }
00342                                 outStr << "</value>" ;
00343                                 if( m_bWhiteSpace == true) outStr << endl;
00344                         }
00345                         outStr << "</linearConstraintCoefficients>" ;
00346                         if( m_bWhiteSpace == true) outStr << endl;
00347                 }
00348                 if(m_OSInstance->instanceData->quadraticCoefficients != NULL && m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms > 0){
00349                         outStr << "<quadraticCoefficients";
00350                         outStr << "  numberOfQuadraticTerms=\"";
00351                         outStr << m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms;
00352                         outStr << "\" >"  ;
00353                         if( m_bWhiteSpace == true) outStr << endl;
00354                         for(i = 0; i < m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms; i++){
00355                                 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]){
00356                                         outStr << "<qTerm" ;
00357                                         // the following attributes are required 
00358                                         outStr << "  idx=\"";
00359                                         outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idx;
00360                                         outStr << "\"";
00361                                         outStr << "  idxOne=\"";
00362                                         outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxOne;
00363                                         outStr << "\"";
00364                                         outStr << "  idxTwo=\"";
00365                                         outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxTwo;
00366                                         outStr << "\"";
00367                                         if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef != 0){
00368                                                 outStr << "  coef=\"";
00369                                                 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef;
00370                                                 outStr << "\"";
00371                                         }
00372                                         outStr << "/>" ;
00373                                         if( m_bWhiteSpace == true) outStr << endl;
00374                                 }
00375                         } 
00376                         outStr << "</quadraticCoefficients>";
00377                         if( m_bWhiteSpace == true) outStr << endl;
00378                 }
00379                 if(m_OSInstance->instanceData->nonlinearExpressions != NULL && m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions > 0){     
00380                         outStr << "<nonlinearExpressions";
00381                         outStr << "  numberOfNonlinearExpressions=\"";
00382                         outStr << m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions;
00383                         outStr << "\" >"  ;
00384                         if( m_bWhiteSpace == true) outStr << endl;
00385                         for(i = 0; i < m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions; i++){
00386                                 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i] != NULL){
00387                                         outStr << "<nl" ;
00388                                         // the following attribute is required 
00389                                         outStr << "  idx=\"";
00390                                         outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->idx;
00391                                         outStr << "\">";
00392                                         if(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot != NULL)
00393                                         outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
00394                                         outStr << "</nl>";
00395                                 }
00396                                 if( m_bWhiteSpace == true) outStr << endl;
00397                         }
00398                         outStr << "</nonlinearExpressions>";
00399                         if( m_bWhiteSpace == true) outStr << endl;
00400                 }       
00401                 outStr << "</instanceData>"  ;
00402                 if( m_bWhiteSpace == true) outStr << endl;
00403         } // end instanceData if
00404         outStr << "</osil>" ;
00405         if( m_bWhiteSpace == true) outStr << endl;
00406         outStr << endl;
00407         return outStr.str();
00408 } // end writeOSiL

Generated on Tue Sep 30 03:01:24 2008 by  doxygen 1.4.7