00001
00016 #include "OSiLWriter.h"
00017 #include "OSStringUtil.h"
00018 #include "OSInstance.h"
00019 #include "OSParameters.h"
00020 #include "OSBase64.h"
00021 #include "OSMathUtil.h"
00022 #include "CoinFinite.hpp"
00023
00024 #include <sstream>
00025
00026 using std::endl;
00027 using std::ostringstream;
00028
00029
00030 OSiLWriter::OSiLWriter( )
00031 {
00032 m_bWriteBase64 = false;
00033 m_bWhiteSpace = false;
00034 }
00035
00036 OSiLWriter::~OSiLWriter()
00037 {
00038 }
00039
00040 std::string OSiLWriter::writeOSiL( const OSInstance *theosinstance)
00041 {
00042 m_OSInstance = theosinstance;
00043 ostringstream outStr;
00044 int i, j, k, kk;
00045 int mult;
00046 int incr;
00047 std::string tmpname, tmpsense;
00048 double tmplb, tmpub, tmpconst, tmpweight;
00049 char tmptype;
00050 int tmpnum;
00051
00052 if(m_OSInstance == NULL) return outStr.str();
00053 outStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ;
00054 if( m_bWhiteSpace == true) outStr << endl;
00055 outStr << "<osil xmlns=\"os.optimizationservices.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
00056 outStr << "xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/";
00057 outStr << OS_SCHEMA_VERSION;
00058 outStr << "/OSiL.xsd\" >" ;
00059 if( m_bWhiteSpace == true) outStr << endl;
00060 outStr << "<instanceHeader>";
00061 if( m_bWhiteSpace == true) outStr << endl;
00062 if(m_OSInstance->instanceHeader != NULL)
00063 {
00064 if(m_OSInstance->instanceHeader->name.length() > 0)
00065 {
00066 outStr << "<name>" + m_OSInstance->instanceHeader->name + "</name>" ;
00067 if( m_bWhiteSpace == true) outStr << endl;
00068 }
00069
00070 if(m_OSInstance->instanceHeader->source.length() > 0)
00071 {
00072 outStr << "<source>" + m_OSInstance->instanceHeader->source + "</source>" ;
00073 if( m_bWhiteSpace == true) outStr << endl;
00074 }
00075 if(m_OSInstance->instanceHeader->description.length() > 0)
00076 {
00077 outStr << "<description>" + m_OSInstance->instanceHeader->description + "</description>";
00078 if( m_bWhiteSpace == true) outStr << endl;
00079 }
00080 if(m_OSInstance->instanceHeader->fileCreator.length() > 0)
00081 {
00082 outStr << "<fileCreator>" + m_OSInstance->instanceHeader->fileCreator + "</fileCreator>";
00083 if( m_bWhiteSpace == true) outStr << endl;
00084 }
00085 if(m_OSInstance->instanceHeader->licence.length() > 0)
00086 {
00087 outStr << "<licence>" + m_OSInstance->instanceHeader->licence + "</licence>";
00088 if( m_bWhiteSpace == true) outStr << endl;
00089 }
00090 }
00091 outStr << "</instanceHeader>" ;
00092 if( m_bWhiteSpace == true) outStr << endl;
00093 outStr << "<instanceData>" ;
00094 if(m_OSInstance->instanceData != NULL)
00095 {
00096 if( m_bWhiteSpace == true) outStr << endl;
00097 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0)
00098 {
00099 outStr << "<variables " ;
00100 outStr << "numberOfVariables=\"";
00101 outStr << m_OSInstance->instanceData->variables->numberOfVariables ;
00102 outStr << "\"" ;
00103 outStr << ">" ;
00104 if (m_bWhiteSpace == true) outStr << endl;
00105
00106 for (i = 0; i < m_OSInstance->instanceData->variables->numberOfVariables;)
00107 {
00108 mult = 1;
00109 if (m_OSInstance->instanceData->variables->var[i] != NULL)
00110 {
00111 if (i < m_OSInstance->instanceData->variables->numberOfVariables - 1)
00112 {
00113 tmpname = m_OSInstance->instanceData->variables->var[i]->name;
00114 tmptype = m_OSInstance->instanceData->variables->var[i]->type;
00115 tmplb = m_OSInstance->instanceData->variables->var[i]->lb;
00116 tmpub = m_OSInstance->instanceData->variables->var[i]->ub;
00117 for (k=i+1; k < m_OSInstance->instanceData->variables->numberOfVariables; k++)
00118 {
00119 if (tmpname != m_OSInstance->instanceData->variables->var[k]->name) break;
00120 if (tmptype != m_OSInstance->instanceData->variables->var[k]->type) break;
00121 if (tmplb != m_OSInstance->instanceData->variables->var[k]->lb) break;
00122 if (tmpub != m_OSInstance->instanceData->variables->var[k]->ub) break;
00123 mult++;
00124 }
00125 }
00126 outStr << "<var" ;
00127 if (m_OSInstance->instanceData->variables->var[i]->name.length() > 0)
00128 {
00129 outStr << " name=" ;
00130 outStr << writeStringData(m_OSInstance->instanceData->variables->var[i]->name);
00131 }
00132 if( m_OSInstance->instanceData->variables->var[i]->type != 'C')
00133 {
00134 outStr << " type=\"" ;
00135 outStr << m_OSInstance->instanceData->variables->var[i]->type ;
00136 outStr << "\"";
00137 }
00138 if( m_OSInstance->instanceData->variables->var[i]->lb != 0.0)
00139 {
00140 outStr << " lb=\"" ;
00141 outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->lb) ;
00142 outStr << "\"";
00143 }
00144 if( m_OSInstance->instanceData->variables->var[i]->ub != OSDBL_MAX
00145 && m_OSInstance->instanceData->variables->var[i]->ub != OSNaN() )
00146 {
00147 outStr << " ub=\"" ;
00148 outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->ub) ;
00149 outStr << "\"";
00150 }
00151 if (mult > 1)
00152 outStr << " mult=\"" << mult << "\"";
00153 outStr << "/>" ;
00154 if( m_bWhiteSpace == true) outStr << endl;
00155 }
00156 i += mult;
00157 }
00158 outStr << "</variables>" ;
00159 if( m_bWhiteSpace == true) outStr << endl;
00160 }
00161 if(m_OSInstance->instanceData->objectives != NULL && m_OSInstance->instanceData->objectives->numberOfObjectives > 0)
00162 {
00163 outStr << "<objectives " ;
00164 outStr << "numberOfObjectives=\"";
00165 outStr << m_OSInstance->instanceData->objectives->numberOfObjectives ;
00166 outStr << "\"" ;
00167 outStr << ">" ;
00168 if( m_bWhiteSpace == true) outStr << endl;
00169 for (j = 0; j < m_OSInstance->instanceData->objectives->numberOfObjectives;)
00170 {
00171 mult = 1;
00172 if(m_OSInstance->instanceData->objectives->obj[j] != NULL)
00173 {
00174 if (j < m_OSInstance->instanceData->objectives->numberOfObjectives - 1)
00175 {
00176 tmpname = m_OSInstance->instanceData->objectives->obj[j]->name;
00177 tmpsense = m_OSInstance->instanceData->objectives->obj[j]->maxOrMin;
00178 tmpconst = m_OSInstance->instanceData->objectives->obj[j]->constant;
00179 tmpweight = m_OSInstance->instanceData->objectives->obj[j]->weight;
00180 tmpnum = m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef;
00181 for (k=j+1; k < m_OSInstance->instanceData->objectives->numberOfObjectives; k++)
00182 {
00183 if (tmpname != m_OSInstance->instanceData->objectives->obj[k]->name) break;
00184 if (tmpsense != m_OSInstance->instanceData->objectives->obj[k]->maxOrMin) break;
00185 if (tmpconst != m_OSInstance->instanceData->objectives->obj[k]->constant) break;
00186 if (!OSIsEqual(tmpweight, m_OSInstance->instanceData->objectives->obj[k]->weight)) break;
00187 if (tmpnum != m_OSInstance->instanceData->objectives->obj[k]->numberOfObjCoef) break;
00188 for (kk=0; kk < tmpnum; kk++)
00189 {
00190 if (m_OSInstance->instanceData->objectives->obj[k]->coef[kk]->idx !=
00191 m_OSInstance->instanceData->objectives->obj[j]->coef[kk]->idx) break;
00192 if (m_OSInstance->instanceData->objectives->obj[k]->coef[kk]->value !=
00193 m_OSInstance->instanceData->objectives->obj[j]->coef[kk]->value) break;
00194 }
00195 if ( kk < tmpnum) break;
00196 mult++;
00197 }
00198 }
00199 outStr << "<obj" ;
00200 if(m_OSInstance->instanceData->objectives->obj[j]->maxOrMin.length() > 0)
00201 {
00202 outStr << " maxOrMin=\"" ;
00203 outStr << m_OSInstance->instanceData->objectives->obj[j]->maxOrMin ;
00204 outStr << "\"";
00205 }
00206 if(m_OSInstance->instanceData->objectives->obj[j]->constant != 0.0)
00207 {
00208 outStr << " constant=\"" ;
00209 outStr << os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->constant) ;
00210 outStr << "\"";
00211 }
00212 if (!OSIsEqual(m_OSInstance->instanceData->objectives->obj[j]->weight,OSNaN()))
00213 {
00214 outStr << " weight=\"" ;
00215 outStr << os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->weight) ;
00216 outStr << "\"";
00217 }
00218 if(m_OSInstance->instanceData->objectives->obj[j]->name.length() > 0)
00219 {
00220 outStr << " name=" ;
00221 outStr << writeStringData(m_OSInstance->instanceData->objectives->obj[j]->name);
00222 }
00223 outStr << " numberOfObjCoef=\"" ;
00224 outStr << m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef ;
00225 outStr << "\"";
00226 if (mult > 1)
00227 outStr << " mult=\"" << mult << "\"";
00228 outStr << ">" ;
00229 if( m_bWhiteSpace == true) outStr << endl;
00230 if(m_OSInstance->instanceData->objectives->obj[j]->coef != NULL)
00231 {
00232 for (i = 0; i < m_OSInstance->instanceData->objectives->obj[ j]->numberOfObjCoef; i++)
00233 {
00234 if(m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx > -1 )
00235 {
00236 outStr << "<coef" ;
00237 outStr << " idx=\"" ;
00238 outStr << m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx ;
00239 outStr << "\"";
00240 outStr << ">";
00241
00242
00243 outStr << os_dtoa_format( m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value) ;
00244
00245 outStr << "</coef>" ;
00246 if( m_bWhiteSpace == true) outStr << endl;
00247 }
00248 }
00249 }
00250 outStr << "</obj>" ;
00251 if( m_bWhiteSpace == true) outStr << endl;
00252 }
00253 j += mult;
00254 }
00255 outStr << "</objectives>" ;
00256 if( m_bWhiteSpace == true) outStr << endl;
00257 }
00258
00259 if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0)
00260 {
00261 outStr << "<constraints " ;
00262 outStr << "numberOfConstraints=\"";
00263 outStr << m_OSInstance->instanceData->constraints->numberOfConstraints ;
00264 outStr << "\"" ;
00265 outStr << ">" ;
00266 if( m_bWhiteSpace == true) outStr << endl;
00267 for (i = 0; i < m_OSInstance->instanceData->constraints->numberOfConstraints;)
00268 {
00269 mult = 1;
00270 if(m_OSInstance->instanceData->constraints->con[i] != NULL)
00271 {
00272 if (i < m_OSInstance->instanceData->constraints->numberOfConstraints - 1)
00273 {
00274 tmpname = m_OSInstance->instanceData->constraints->con[i]->name;
00275 tmpconst = m_OSInstance->instanceData->constraints->con[i]->constant;
00276 tmplb = m_OSInstance->instanceData->constraints->con[i]->lb;
00277 tmpub = m_OSInstance->instanceData->constraints->con[i]->ub;
00278 for (k=i+1; k < m_OSInstance->instanceData->constraints->numberOfConstraints; k++)
00279 {
00280 if (tmpname != m_OSInstance->instanceData->constraints->con[k]->name) break;
00281 if (tmpconst != m_OSInstance->instanceData->constraints->con[k]->constant) break;
00282 if (tmplb != m_OSInstance->instanceData->constraints->con[k]->lb) break;
00283 if (tmpub != m_OSInstance->instanceData->constraints->con[k]->ub) break;
00284 mult++;
00285 }
00286 }
00287 outStr << "<con" ;
00288 if(m_OSInstance->instanceData->constraints->con[i]->name.length())
00289 {
00290 outStr << " name=" ;
00291 outStr << writeStringData(m_OSInstance->instanceData->constraints->con[i]->name);
00292 }
00293 if(m_OSInstance->instanceData->constraints->con[i]->constant != 0)
00294 {
00295 outStr << " constant=\"" ;
00296 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->constant) ;
00297 outStr << "\"";
00298 }
00299 if(m_OSInstance->instanceData->constraints->con[i]->lb != -OSDBL_MAX )
00300 {
00301 outStr << " lb=\"" ;
00302 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->lb) ;
00303 outStr << "\"";
00304 }
00305 if(m_OSInstance->instanceData->constraints->con[i]->ub != OSDBL_MAX)
00306 {
00307 outStr << " ub=\"" ;
00308 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->ub) ;
00309 outStr << "\"";
00310 }
00311 if (mult > 1)
00312 outStr << " mult=\"" << mult << "\"";
00313 outStr << "/>" ;
00314 if( m_bWhiteSpace == true) outStr << endl;
00315 }
00316 i += mult;
00317 }
00318 outStr << "</constraints>" ;
00319 if( m_bWhiteSpace == true) outStr << endl;
00320 }
00321
00322 if(m_OSInstance->instanceData->linearConstraintCoefficients != NULL && m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues > 0)
00323 {
00324 outStr << "<linearConstraintCoefficients " ;
00325 outStr << "numberOfValues=\"";
00326 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues ;
00327 outStr << "\"" ;
00328 outStr << ">" ;
00329 if( m_bWhiteSpace == true) outStr << endl;
00330 if( (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx != NULL) &&
00331 (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el != NULL) )
00332 {
00333 if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL)
00334 {
00335 outStr << "<start>" ;
00336 if( m_bWhiteSpace == true) outStr << endl;
00337 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0)
00338 {
00339 if(m_bWriteBase64 == false)
00340 {
00341 for(i = 0; i <= m_OSInstance->instanceData->variables->numberOfVariables;)
00342 {
00343 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i]),
00344 &mult, &incr, (m_OSInstance->instanceData->variables->numberOfVariables) + 1-i,1);
00345 if (mult == 1)
00346 outStr << "<el>" ;
00347 else if (incr == 0)
00348 outStr << "<el mult=\"" << mult << "\">";
00349 else
00350 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00351 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00352 outStr << "</el>" ;
00353 if( m_bWhiteSpace == true) outStr << endl;
00354 i += mult;
00355 }
00356 }
00357 else
00358 {
00359 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
00360 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el,
00361 (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00362 outStr << "</base64BinaryData>" ;
00363 if( m_bWhiteSpace == true) outStr << endl;
00364 }
00365 }
00366 outStr << "</start>" ;
00367 if( m_bWhiteSpace == true) outStr << endl;
00368 }
00369 outStr << "<rowIdx>" ;
00370 if( m_bWhiteSpace == true) outStr << endl;
00371 if(m_bWriteBase64 == false)
00372 {
00373 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
00374 {
00375 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i]),
00376 &mult, &incr, (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i,1);
00377 if (mult == 1)
00378 outStr << "<el>" ;
00379 else if (incr == 0)
00380 outStr << "<el mult=\"" << mult << "\">";
00381 else
00382 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00383 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i];
00384 outStr << "</el>" ;
00385 if( m_bWhiteSpace == true) outStr << endl;
00386 i += mult;
00387 }
00388 }
00389 else
00390 {
00391
00392 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
00393 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el,
00394 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00395 outStr << "</base64BinaryData>" ;
00396 if( m_bWhiteSpace == true) outStr << endl;
00397 }
00398 outStr << "</rowIdx>" ;
00399 if( m_bWhiteSpace == true) outStr << endl;
00400 }
00401 else
00402 {
00403 if( (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx != NULL) &&
00404 (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el != NULL) )
00405 {
00406 if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL)
00407 {
00408 outStr << "<start>" ;
00409 if( m_bWhiteSpace == true) outStr << endl;
00410 if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0)
00411 {
00412 if(m_bWriteBase64 == false)
00413 {
00414 for(i = 0; i <= m_OSInstance->instanceData->constraints->numberOfConstraints;)
00415 {
00416 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i]),
00417 &mult, &incr, (m_OSInstance->instanceData->constraints->numberOfConstraints) + 1-i,1);
00418 if (mult == 1)
00419 outStr << "<el>" ;
00420 else if (incr == 0)
00421 outStr << "<el mult=\"" << mult << "\">";
00422 else
00423 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00424 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
00425 outStr << "</el>" ;
00426 if( m_bWhiteSpace == true) outStr << endl;
00427 i += mult;
00428 }
00429 }
00430 else
00431 {
00432 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
00433 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el,
00434 (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
00435 outStr << "</base64BinaryData>" ;
00436 if( m_bWhiteSpace == true) outStr << endl;
00437 }
00438 }
00439 outStr << "</start>" ;
00440 if( m_bWhiteSpace == true) outStr << endl;
00441 }
00442 outStr << "<colIdx>";
00443 if( m_bWhiteSpace == true) outStr << endl;
00444 if(m_bWriteBase64 == false)
00445 {
00446 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
00447 {
00448 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i]),
00449 &mult, &incr, (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i,1);
00450 if (mult == 1)
00451 outStr << "<el>" ;
00452 else if (incr == 0)
00453 outStr << "<el mult=\"" << mult << "\">";
00454 else
00455 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
00456 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i];
00457 outStr << "</el>" ;
00458 if( m_bWhiteSpace == true) outStr << endl;
00459 i += mult;
00460 }
00461 }
00462 else
00463 {
00464 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
00465 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el,
00466 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
00467 outStr << "</base64BinaryData>" ;
00468 if( m_bWhiteSpace == true) outStr << endl;
00469 }
00470 outStr << "</colIdx>" ;
00471 if( m_bWhiteSpace == true) outStr << endl;
00472 }
00473 }
00474 if(m_OSInstance->instanceData->linearConstraintCoefficients->value != NULL)
00475 {
00476 outStr << "<value>" ;
00477 if( m_bWhiteSpace == true) outStr << endl;
00478 if(m_OSInstance->instanceData->linearConstraintCoefficients->value->el != NULL)
00479 {
00480 if(m_bWriteBase64 == false)
00481 {
00482 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
00483 {
00484 mult = getMult(&(m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i]),
00485 (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i);
00486 if (mult == 1)
00487 outStr << "<el>" ;
00488 else
00489 outStr << "<el mult=\"" << mult << "\">";
00490 outStr << os_dtoa_format( m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i] );
00491 outStr << "</el>" ;
00492 if( m_bWhiteSpace == true) outStr << endl;
00493 i += mult;
00494 }
00495 }
00496 else
00497 {
00498 outStr << "<base64BinaryData sizeOf=\"" << sizeof(double) << "\" >" ;
00499 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->value->el,
00500 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof( double) );
00501 outStr << "</base64BinaryData>" ;
00502 if( m_bWhiteSpace == true) outStr << endl;
00503 }
00504 }
00505 outStr << "</value>" ;
00506 if( m_bWhiteSpace == true) outStr << endl;
00507 }
00508 outStr << "</linearConstraintCoefficients>" ;
00509 if( m_bWhiteSpace == true) outStr << endl;
00510 }
00511 if(m_OSInstance->instanceData->quadraticCoefficients != NULL && m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms > 0)
00512 {
00513 outStr << "<quadraticCoefficients";
00514 outStr << " numberOfQuadraticTerms=\"";
00515 outStr << m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms;
00516 outStr << "\">" ;
00517 if( m_bWhiteSpace == true) outStr << endl;
00518 for(i = 0; i < m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms; i++)
00519 {
00520 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i])
00521 {
00522 outStr << "<qTerm" ;
00523
00524 outStr << " idx=\"";
00525 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idx;
00526 outStr << "\"";
00527 outStr << " idxOne=\"";
00528 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxOne;
00529 outStr << "\"";
00530 outStr << " idxTwo=\"";
00531 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxTwo;
00532 outStr << "\"";
00533 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef != 0)
00534 {
00535 outStr << " coef=\"";
00536 outStr << os_dtoa_format(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef);
00537 outStr << "\"";
00538 }
00539 outStr << "/>" ;
00540 if( m_bWhiteSpace == true) outStr << endl;
00541 }
00542 }
00543 outStr << "</quadraticCoefficients>";
00544 if( m_bWhiteSpace == true) outStr << endl;
00545 }
00546
00547 if(m_OSInstance->instanceData->nonlinearExpressions != NULL && m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions > 0)
00548 {
00549 outStr << "<nonlinearExpressions";
00550 outStr << " numberOfNonlinearExpressions=\"";
00551 outStr << m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions;
00552 outStr << "\">" ;
00553 if( m_bWhiteSpace == true) outStr << endl;
00554 for(i = 0; i < m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions; i++)
00555 {
00556 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i] != NULL)
00557 {
00558 outStr << "<nl" ;
00559
00560 outStr << " idx=\"";
00561 outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->idx;
00562 outStr << "\"";
00563
00564
00565 std::string tempStr = returnExprShapeString(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->shape);
00566 if (tempStr != "" && tempStr != "general")
00567 {
00568 outStr << " shape=\"" << tempStr << "\"";
00569 }
00570 outStr << ">";
00571 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot != NULL)
00572 outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
00573 outStr << "</nl>";
00574 }
00575 if( m_bWhiteSpace == true) outStr << endl;
00576 }
00577 outStr << "</nonlinearExpressions>";
00578 if( m_bWhiteSpace == true) outStr << endl;
00579 }
00580
00581 if(m_OSInstance->instanceData->matrices != NULL && m_OSInstance->instanceData->matrices->numberOfMatrices > 0)
00582 {
00583 outStr << "<matrices";
00584 outStr << " numberOfMatrices=\"";
00585 outStr << m_OSInstance->instanceData->matrices->numberOfMatrices ;
00586 outStr << "\"" ;
00587 outStr << ">" ;
00588 if( m_bWhiteSpace == true) outStr << endl;
00589 for (i = 0; i < m_OSInstance->instanceData->matrices->numberOfMatrices;i++)
00590 {
00591 if (m_OSInstance->instanceData->matrices->matrix[i] != NULL)
00592 outStr << m_OSInstance->instanceData->matrices->matrix[i]->getMatrixNodeInXML();
00593 }
00594 if( m_bWhiteSpace == true) outStr << endl;
00595 outStr << "</matrices>" << endl;
00596 }
00597
00598 if(m_OSInstance->instanceData->cones != NULL && m_OSInstance->instanceData->cones->numberOfCones > 0)
00599 {
00600 outStr << "<cones";
00601 outStr << " numberOfCones=\"";
00602 outStr << m_OSInstance->instanceData->cones->numberOfCones ;
00603 outStr << "\"" ;
00604 outStr << ">" ;
00605 if( m_bWhiteSpace == true) outStr << endl;
00606 for (i = 0; i < m_OSInstance->instanceData->cones->numberOfCones;i++)
00607 {
00608 if (m_OSInstance->instanceData->cones->cone[i] != NULL)
00609 {
00610 switch ( m_OSInstance->instanceData->cones->cone[i]->coneType )
00611 {
00612 case ENUM_CONE_TYPE_nonnegative:
00613 outStr << ((NonnegativeCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00614 break;
00615 case ENUM_CONE_TYPE_nonpositive:
00616 outStr << ((NonpositiveCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00617 break;
00618 case ENUM_CONE_TYPE_orthant:
00619 outStr << ((OrthantCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00620 break;
00621 case ENUM_CONE_TYPE_quadratic:
00622 outStr << ((QuadraticCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00623 break;
00624 case ENUM_CONE_TYPE_rotatedQuadratic:
00625 outStr << ((RotatedQuadraticCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00626 break;
00627 case ENUM_CONE_TYPE_semidefinite:
00628 outStr << ((SemidefiniteCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00629 break;
00630 case ENUM_CONE_TYPE_product:
00631 outStr << ((ProductCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00632 break;
00633 case ENUM_CONE_TYPE_intersection:
00634 outStr << ((IntersectionCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
00635 break;
00636 }
00637 }
00638 }
00639 if( m_bWhiteSpace == true) outStr << endl;
00640 outStr << "</cones>" << endl;
00641 }
00642
00643 if (m_OSInstance->instanceData->matrixProgramming != NULL)
00644 {
00645 outStr << "<matrixProgramming>";
00646
00647 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables != NULL)
00648 {
00649 outStr << "<matrixVariables";
00650 outStr << " numberOfMatrixVar=\"";
00651 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->numberOfMatrixVar << "\">";
00652 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixVariables->numberOfMatrixVar; i++)
00653 {
00654 outStr << "<matrixVar";
00655 outStr << " numberOfRows=\"";
00656 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->numberOfRows << "\"";
00657 outStr << " numberOfColumns=\"";
00658 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->numberOfColumns << "\"";
00659
00660 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->templateMatrixIdx >= 0)
00661 {
00662 outStr << " templateMatrixIdx=\"";
00663 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->templateMatrixIdx << "\"";
00664 }
00665
00666 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varReferenceMatrixIdx >= 0)
00667 {
00668 outStr << " varReferenceMatrixIdx=\"";
00669 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varReferenceMatrixIdx << "\"";
00670 }
00671
00672 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbMatrixIdx >= 0)
00673 {
00674 outStr << " lbMatrixIdx=\"";
00675 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbMatrixIdx << "\"";
00676 }
00677
00678 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbConeIdx >= 0)
00679 {
00680 outStr << " lbConeIdx=\"";
00681 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbConeIdx << "\"";
00682 }
00683
00684 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubMatrixIdx >= 0)
00685 {
00686 outStr << " ubMatrixIdx=\"";
00687 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubMatrixIdx << "\"";
00688 }
00689
00690 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubConeIdx >= 0)
00691 {
00692 outStr << " ubConeIdx=\"";
00693 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubConeIdx << "\"";
00694 }
00695
00696 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->name != "")
00697 {
00698 outStr << " name=\"";
00699 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->name << "\"";
00700 }
00701
00702 if (verifyVarType(m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varType) && m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varType != 'C')
00703 {
00704 outStr << " varType=\"";
00705 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varType << "\"";
00706 }
00707
00708 outStr << "/>" << endl;
00709 }
00710 outStr << "</matrixVariables>" << endl;
00711 }
00712
00713 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives != NULL)
00714 {
00715 outStr << "<matrixObjectives";
00716 outStr << " numberOfMatrixObj=\"";
00717 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->numberOfMatrixObj << "\">";
00718 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixObjectives->numberOfMatrixObj; i++)
00719 {
00720 outStr << "<matrixObj";
00721 outStr << " numberOfRows=\"";
00722 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->numberOfRows << "\"";
00723 outStr << " numberOfColumns=\"";
00724 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->numberOfColumns << "\"";
00725
00726 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->templateMatrixIdx >= 0)
00727 {
00728 outStr << " templateMatrixIdx=\"";
00729 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->templateMatrixIdx << "\"";
00730 }
00731
00732 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->objReferenceMatrixIdx >= 0)
00733 {
00734 outStr << " objReferenceMatrixIdx=\"";
00735 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->objReferenceMatrixIdx << "\"";
00736 }
00737
00738 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->orderConeIdx >= 0)
00739 {
00740 outStr << " orderConeIdx=\"";
00741 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->orderConeIdx << "\"";
00742 }
00743
00744 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->constantMatrixIdx >= 0)
00745 {
00746 outStr << " constantMatrixIdx=\"";
00747 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->constantMatrixIdx << "\"";
00748 }
00749
00750 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->name != "")
00751 {
00752 outStr << " name=\"";
00753 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->name << "\"";
00754 }
00755
00756 outStr << "/>" << endl;
00757 }
00758 outStr << "</matrixObjectives>" << endl;
00759 }
00760
00761 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints != NULL)
00762 {
00763 outStr << "<matrixConstraints";
00764 outStr << " numberOfMatrixCon=\"";
00765 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->numberOfMatrixCon << "\">";
00766 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixConstraints->numberOfMatrixCon; i++)
00767 {
00768 outStr << "<matrixCon";
00769 outStr << " numberOfRows=\"";
00770 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->numberOfRows << "\"";
00771 outStr << " numberOfColumns=\"";
00772 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->numberOfColumns << "\"";
00773
00774 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->templateMatrixIdx >= 0)
00775 {
00776 outStr << " templateMatrixIdx=\"";
00777 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->templateMatrixIdx << "\"";
00778 }
00779
00780 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->conReferenceMatrixIdx >= 0)
00781 {
00782 outStr << " conReferenceMatrixIdx=\"";
00783 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->conReferenceMatrixIdx << "\"";
00784 }
00785
00786 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbMatrixIdx >= 0)
00787 {
00788 outStr << " lbMatrixIdx=\"";
00789 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbMatrixIdx << "\"";
00790 }
00791
00792 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbConeIdx >= 0)
00793 {
00794 outStr << " lbConeIdx=\"";
00795 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbConeIdx << "\"";
00796 }
00797
00798 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubMatrixIdx >= 0)
00799 {
00800 outStr << " ubMatrixIdx=\"";
00801 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubMatrixIdx << "\"";
00802 }
00803
00804 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubConeIdx >= 0)
00805 {
00806 outStr << " ubConeIdx=\"";
00807 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubConeIdx << "\"";
00808 }
00809
00810 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->name != "")
00811 {
00812 outStr << " name=\"";
00813 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->name << "\"";
00814 }
00815
00816 outStr << "/>" << endl;
00817 }
00818 outStr << "</matrixConstraints>" << endl;
00819 }
00820
00821 if (m_OSInstance->instanceData->matrixProgramming->matrixExpressions != NULL)
00822 {
00823 outStr << "<matrixExpressions";
00824 outStr << " numberOfExpr=\"";
00825 outStr << m_OSInstance->instanceData->matrixProgramming->matrixExpressions->numberOfExpr << "\">";
00826 if( m_bWhiteSpace == true) outStr << endl;
00827 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixExpressions->numberOfExpr; i++)
00828 {
00829 if (m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i] != NULL)
00830 {
00831 outStr << "<expr";
00832
00833
00834 outStr << " idx=\"";
00835 outStr << m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->idx;
00836 outStr << "\"";
00837
00838
00839 std::string tempStr = returnExprShapeString(m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->shape);
00840 if (tempStr != "" && tempStr != "general");
00841 {
00842 outStr << " shape=\"" << tempStr << "\"";
00843 }
00844
00845 outStr << ">";
00846 if(m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->matrixExpressionTree->m_treeRoot != NULL)
00847 outStr << m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->matrixExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
00848 outStr << "</expr>";
00849 if( m_bWhiteSpace == true) outStr << endl;
00850 }
00851 }
00852 outStr << "</matrixExpressions>";
00853 if( m_bWhiteSpace == true) outStr << endl;
00854 }
00855
00856 outStr << "</matrixProgramming>" << endl;
00857 }
00858 if( m_bWhiteSpace == true) outStr << endl;
00859 }
00860 outStr << "</instanceData>";
00861 outStr << "</osil>" ;
00862 if( m_bWhiteSpace == true) outStr << endl;
00863 outStr << endl;
00864 return outStr.str();
00865 }