My Project
OSiLWriter.cpp
Go to the documentation of this file.
1/* $Id$ */
15
16#include "OSiLWriter.h"
17#include "OSStringUtil.h"
18#include "OSInstance.h"
19#include "OSParameters.h"
20#include "OSBase64.h"
21#include "OSMathUtil.h"
22#include "CoinFinite.hpp"
23
24#include <sstream>
25
26using std::endl;
27using std::ostringstream;
28
29
31{
32 m_bWriteBase64 = false;
33 m_bWhiteSpace = false;
34}
35
39
40std::string OSiLWriter::writeOSiL( const OSInstance *theosinstance)
41{
42 m_OSInstance = theosinstance;
43 ostringstream outStr;
44 int i, j, k, kk;
45 int mult;
46 int incr;
47 std::string tmpname, tmpsense;
48 double tmplb, tmpub, tmpconst, tmpweight;
49 char tmptype;
50 int tmpnum;
51
52 if(m_OSInstance == NULL) return outStr.str();
53 outStr << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" ;
54 if( m_bWhiteSpace == true) outStr << endl;
55 outStr << "<osil xmlns=\"os.optimizationservices.org\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
56 outStr << "xsi:schemaLocation=\"os.optimizationservices.org http://www.optimizationservices.org/schemas/";
57 outStr << OS_SCHEMA_VERSION;
58 outStr << "/OSiL.xsd\" >" ;
59 if( m_bWhiteSpace == true) outStr << endl;
60 outStr << "<instanceHeader>";
61 if( m_bWhiteSpace == true) outStr << endl;
62 if(m_OSInstance->instanceHeader != NULL)
63 {
64 if(m_OSInstance->instanceHeader->name.length() > 0)
65 {
66 outStr << "<name>" + m_OSInstance->instanceHeader->name + "</name>" ;
67 if( m_bWhiteSpace == true) outStr << endl;
68 }
69
70 if(m_OSInstance->instanceHeader->source.length() > 0)
71 {
72 outStr << "<source>" + m_OSInstance->instanceHeader->source + "</source>" ;
73 if( m_bWhiteSpace == true) outStr << endl;
74 }
75 if(m_OSInstance->instanceHeader->description.length() > 0)
76 {
77 outStr << "<description>" + m_OSInstance->instanceHeader->description + "</description>";
78 if( m_bWhiteSpace == true) outStr << endl;
79 }
80 if(m_OSInstance->instanceHeader->fileCreator.length() > 0)
81 {
82 outStr << "<fileCreator>" + m_OSInstance->instanceHeader->fileCreator + "</fileCreator>";
83 if( m_bWhiteSpace == true) outStr << endl;
84 }
85 if(m_OSInstance->instanceHeader->licence.length() > 0)
86 {
87 outStr << "<licence>" + m_OSInstance->instanceHeader->licence + "</licence>";
88 if( m_bWhiteSpace == true) outStr << endl;
89 }
90 }
91 outStr << "</instanceHeader>" ;
92 if( m_bWhiteSpace == true) outStr << endl;
93 outStr << "<instanceData>" ;
94 if(m_OSInstance->instanceData != NULL)
95 {
96 if( m_bWhiteSpace == true) outStr << endl;
97 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0)
98 {
99 outStr << "<variables " ;
100 outStr << "numberOfVariables=\"";
101 outStr << m_OSInstance->instanceData->variables->numberOfVariables ;
102 outStr << "\"" ;
103 outStr << ">" ;
104 if (m_bWhiteSpace == true) outStr << endl;
105 // get variable information
106 for (i = 0; i < m_OSInstance->instanceData->variables->numberOfVariables;)
107 {
108 mult = 1;
109 if (m_OSInstance->instanceData->variables->var[i] != NULL)
110 {
111 if (i < m_OSInstance->instanceData->variables->numberOfVariables - 1)
112 {
113 tmpname = m_OSInstance->instanceData->variables->var[i]->name;
114 tmptype = m_OSInstance->instanceData->variables->var[i]->type;
115 tmplb = m_OSInstance->instanceData->variables->var[i]->lb;
116 tmpub = m_OSInstance->instanceData->variables->var[i]->ub;
117 for (k=i+1; k < m_OSInstance->instanceData->variables->numberOfVariables; k++)
118 {
119 if (tmpname != m_OSInstance->instanceData->variables->var[k]->name) break;
120 if (tmptype != m_OSInstance->instanceData->variables->var[k]->type) break;
121 if (tmplb != m_OSInstance->instanceData->variables->var[k]->lb) break;
122 if (tmpub != m_OSInstance->instanceData->variables->var[k]->ub) break;
123 mult++;
124 }
125 }
126 outStr << "<var" ;
127 if (m_OSInstance->instanceData->variables->var[i]->name.length() > 0)
128 {
129 outStr << " name=" ;
130 outStr << writeStringData(m_OSInstance->instanceData->variables->var[i]->name);
131 }
132 if( m_OSInstance->instanceData->variables->var[i]->type != 'C')
133 {
134 outStr << " type=\"" ;
135 outStr << m_OSInstance->instanceData->variables->var[i]->type ;
136 outStr << "\"";
137 }
138 if( m_OSInstance->instanceData->variables->var[i]->lb != 0.0)
139 {
140 outStr << " lb=\"" ;
141 outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->lb) ;
142 outStr << "\"";
143 }
144 if( m_OSInstance->instanceData->variables->var[i]->ub != OSDBL_MAX
145 && m_OSInstance->instanceData->variables->var[i]->ub != OSNaN() )
146 {
147 outStr << " ub=\"" ;
148 outStr << os_dtoa_format( m_OSInstance->instanceData->variables->var[i]->ub) ;
149 outStr << "\"";
150 }
151 if (mult > 1)
152 outStr << " mult=\"" << mult << "\"";
153 outStr << "/>" ;
154 if( m_bWhiteSpace == true) outStr << endl;
155 }
156 i += mult;
157 } // end the for loop
158 outStr << "</variables>" ;
159 if( m_bWhiteSpace == true) outStr << endl;
160 }
161 if(m_OSInstance->instanceData->objectives != NULL && m_OSInstance->instanceData->objectives->numberOfObjectives > 0)
162 {
163 outStr << "<objectives " ;
164 outStr << "numberOfObjectives=\"";
165 outStr << m_OSInstance->instanceData->objectives->numberOfObjectives ;
166 outStr << "\"" ;
167 outStr << ">" ;
168 if( m_bWhiteSpace == true) outStr << endl;
169 for (j = 0; j < m_OSInstance->instanceData->objectives->numberOfObjectives;)
170 {
171 mult = 1;
172 if(m_OSInstance->instanceData->objectives->obj[j] != NULL)
173 {
174 if (j < m_OSInstance->instanceData->objectives->numberOfObjectives - 1)
175 {
176 tmpname = m_OSInstance->instanceData->objectives->obj[j]->name;
177 tmpsense = m_OSInstance->instanceData->objectives->obj[j]->maxOrMin;
178 tmpconst = m_OSInstance->instanceData->objectives->obj[j]->constant;
179 tmpweight = m_OSInstance->instanceData->objectives->obj[j]->weight;
180 tmpnum = m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef;
181 for (k=j+1; k < m_OSInstance->instanceData->objectives->numberOfObjectives; k++)
182 {
183 if (tmpname != m_OSInstance->instanceData->objectives->obj[k]->name) break;
184 if (tmpsense != m_OSInstance->instanceData->objectives->obj[k]->maxOrMin) break;
185 if (tmpconst != m_OSInstance->instanceData->objectives->obj[k]->constant) break;
186 if (!OSIsEqual(tmpweight, m_OSInstance->instanceData->objectives->obj[k]->weight)) break;
187 if (tmpnum != m_OSInstance->instanceData->objectives->obj[k]->numberOfObjCoef) break;
188 for (kk=0; kk < tmpnum; kk++)
189 {
190 if (m_OSInstance->instanceData->objectives->obj[k]->coef[kk]->idx !=
191 m_OSInstance->instanceData->objectives->obj[j]->coef[kk]->idx) break;
192 if (m_OSInstance->instanceData->objectives->obj[k]->coef[kk]->value !=
193 m_OSInstance->instanceData->objectives->obj[j]->coef[kk]->value) break;
194 }
195 if ( kk < tmpnum) break;
196 mult++;
197 }
198 }
199 outStr << "<obj" ;
200 if(m_OSInstance->instanceData->objectives->obj[j]->maxOrMin.length() > 0)
201 {
202 outStr << " maxOrMin=\"" ;
203 outStr << m_OSInstance->instanceData->objectives->obj[j]->maxOrMin ;
204 outStr << "\"";
205 }
206 if(m_OSInstance->instanceData->objectives->obj[j]->constant != 0.0)
207 {
208 outStr << " constant=\"" ;
209 outStr << os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->constant) ;
210 outStr << "\"";
211 }
212 if (!OSIsEqual(m_OSInstance->instanceData->objectives->obj[j]->weight,OSNaN()))
213 {
214 outStr << " weight=\"" ;
215 outStr << os_dtoa_format(m_OSInstance->instanceData->objectives->obj[j]->weight) ;
216 outStr << "\"";
217 }
218 if(m_OSInstance->instanceData->objectives->obj[j]->name.length() > 0)
219 {
220 outStr << " name=" ;
221 outStr << writeStringData(m_OSInstance->instanceData->objectives->obj[j]->name);
222 }
223 outStr << " numberOfObjCoef=\"" ;
224 outStr << m_OSInstance->instanceData->objectives->obj[j]->numberOfObjCoef ;
225 outStr << "\"";
226 if (mult > 1)
227 outStr << " mult=\"" << mult << "\"";
228 outStr << ">" ;
229 if( m_bWhiteSpace == true) outStr << endl;
230 if(m_OSInstance->instanceData->objectives->obj[j]->coef != NULL)
231 {
232 for (i = 0; i < m_OSInstance->instanceData->objectives->obj[ j]->numberOfObjCoef; i++)
233 {
234 if(m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx > -1 )
235 {
236 outStr << "<coef" ;
237 outStr << " idx=\"" ;
238 outStr << m_OSInstance->instanceData->objectives->obj[j]->coef[i]->idx ;
239 outStr << "\"";
240 outStr << ">";
241 //
242 //
243 outStr << os_dtoa_format( m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value) ;
244 //outStr << m_OSInstance->instanceData->objectives->obj[j]->coef[i]->value ;
245 outStr << "</coef>" ;
246 if( m_bWhiteSpace == true) outStr << endl;
247 }
248 }
249 }
250 outStr << "</obj>" ;
251 if( m_bWhiteSpace == true) outStr << endl;
252 }
253 j += mult;
254 }
255 outStr << "</objectives>" ;
256 if( m_bWhiteSpace == true) outStr << endl;
257 }
258 // Now the constraints
259 if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0)
260 {
261 outStr << "<constraints " ;
262 outStr << "numberOfConstraints=\"";
263 outStr << m_OSInstance->instanceData->constraints->numberOfConstraints ;
264 outStr << "\"" ;
265 outStr << ">" ;
266 if( m_bWhiteSpace == true) outStr << endl;
267 for (i = 0; i < m_OSInstance->instanceData->constraints->numberOfConstraints;)
268 {
269 mult = 1;
270 if(m_OSInstance->instanceData->constraints->con[i] != NULL)
271 {
272 if (i < m_OSInstance->instanceData->constraints->numberOfConstraints - 1)
273 {
274 tmpname = m_OSInstance->instanceData->constraints->con[i]->name;
275 tmpconst = m_OSInstance->instanceData->constraints->con[i]->constant;
276 tmplb = m_OSInstance->instanceData->constraints->con[i]->lb;
277 tmpub = m_OSInstance->instanceData->constraints->con[i]->ub;
278 for (k=i+1; k < m_OSInstance->instanceData->constraints->numberOfConstraints; k++)
279 {
280 if (tmpname != m_OSInstance->instanceData->constraints->con[k]->name) break;
281 if (tmpconst != m_OSInstance->instanceData->constraints->con[k]->constant) break;
282 if (tmplb != m_OSInstance->instanceData->constraints->con[k]->lb) break;
283 if (tmpub != m_OSInstance->instanceData->constraints->con[k]->ub) break;
284 mult++;
285 }
286 }
287 outStr << "<con" ;
288 if(m_OSInstance->instanceData->constraints->con[i]->name.length())
289 {
290 outStr << " name=" ;
291 outStr << writeStringData(m_OSInstance->instanceData->constraints->con[i]->name);
292 }
293 if(m_OSInstance->instanceData->constraints->con[i]->constant != 0)
294 {
295 outStr << " constant=\"" ;
296 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->constant) ;
297 outStr << "\"";
298 }
299 if(m_OSInstance->instanceData->constraints->con[i]->lb != -OSDBL_MAX )
300 {
301 outStr << " lb=\"" ;
302 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->lb) ;
303 outStr << "\"";
304 }
305 if(m_OSInstance->instanceData->constraints->con[i]->ub != OSDBL_MAX)
306 {
307 outStr << " ub=\"" ;
308 outStr << os_dtoa_format( m_OSInstance->instanceData->constraints->con[i]->ub) ;
309 outStr << "\"";
310 }
311 if (mult > 1)
312 outStr << " mult=\"" << mult << "\"";
313 outStr << "/>" ;
314 if( m_bWhiteSpace == true) outStr << endl;
315 }
316 i += mult;
317 }
318 outStr << "</constraints>" ;
319 if( m_bWhiteSpace == true) outStr << endl;
320 }
321 // now the linearConstraintsCoefficients
322 if(m_OSInstance->instanceData->linearConstraintCoefficients != NULL && m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues > 0)
323 {
324 outStr << "<linearConstraintCoefficients " ;
325 outStr << "numberOfValues=\"";
326 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues ;
327 outStr << "\"" ;
328 outStr << ">" ;
329 if( m_bWhiteSpace == true) outStr << endl;
330 if( (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx != NULL) &&
331 (m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el != NULL) )
332 {
333 if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL)
334 {
335 outStr << "<start>" ;
336 if( m_bWhiteSpace == true) outStr << endl;
337 if(m_OSInstance->instanceData->variables != NULL && m_OSInstance->instanceData->variables->numberOfVariables > 0)
338 {
339 if(m_bWriteBase64 == false)
340 {
341 for(i = 0; i <= m_OSInstance->instanceData->variables->numberOfVariables;)
342 {
343 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i]),
344 &mult, &incr, (m_OSInstance->instanceData->variables->numberOfVariables) + 1-i,1);
345 if (mult == 1)
346 outStr << "<el>" ;
347 else if (incr == 0)
348 outStr << "<el mult=\"" << mult << "\">";
349 else
350 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
351 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
352 outStr << "</el>" ;
353 if( m_bWhiteSpace == true) outStr << endl;
354 i += mult;
355 }
356 }
357 else
358 {
359 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
360 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el,
361 (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
362 outStr << "</base64BinaryData>" ;
363 if( m_bWhiteSpace == true) outStr << endl;
364 }
365 }
366 outStr << "</start>" ;
367 if( m_bWhiteSpace == true) outStr << endl;
368 }
369 outStr << "<rowIdx>" ;
370 if( m_bWhiteSpace == true) outStr << endl;
371 if(m_bWriteBase64 == false)
372 {
373 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
374 {
375 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i]),
376 &mult, &incr, (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i,1);
377 if (mult == 1)
378 outStr << "<el>" ;
379 else if (incr == 0)
380 outStr << "<el mult=\"" << mult << "\">";
381 else
382 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
383 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el[i];
384 outStr << "</el>" ;
385 if( m_bWhiteSpace == true) outStr << endl;
386 i += mult;
387 }
388 }
389 else
390 {
391 //outStr << "<base64BinaryData sizeOf=\"4\" numericType=\"int\" >" ;
392 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
393 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->rowIdx->el,
394 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
395 outStr << "</base64BinaryData>" ;
396 if( m_bWhiteSpace == true) outStr << endl;
397 }
398 outStr << "</rowIdx>" ;
399 if( m_bWhiteSpace == true) outStr << endl;
400 }
401 else
402 {
403 if( (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx != NULL) &&
404 (m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el != NULL) )
405 {
406 if(m_OSInstance->instanceData->linearConstraintCoefficients->start->el != NULL)
407 {
408 outStr << "<start>" ;
409 if( m_bWhiteSpace == true) outStr << endl;
410 if(m_OSInstance->instanceData->constraints != NULL && m_OSInstance->instanceData->constraints->numberOfConstraints > 0)
411 {
412 if(m_bWriteBase64 == false)
413 {
414 for(i = 0; i <= m_OSInstance->instanceData->constraints->numberOfConstraints;)
415 {
416 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i]),
417 &mult, &incr, (m_OSInstance->instanceData->constraints->numberOfConstraints) + 1-i,1);
418 if (mult == 1)
419 outStr << "<el>" ;
420 else if (incr == 0)
421 outStr << "<el mult=\"" << mult << "\">";
422 else
423 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
424 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->start->el[i];
425 outStr << "</el>" ;
426 if( m_bWhiteSpace == true) outStr << endl;
427 i += mult;
428 }
429 }
430 else
431 {
432 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
433 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->start->el,
434 (m_OSInstance->instanceData->variables->numberOfVariables + 1)*sizeof(int) );
435 outStr << "</base64BinaryData>" ;
436 if( m_bWhiteSpace == true) outStr << endl;
437 }
438 }
439 outStr << "</start>" ;
440 if( m_bWhiteSpace == true) outStr << endl;
441 }
442 outStr << "<colIdx>";
443 if( m_bWhiteSpace == true) outStr << endl;
444 if(m_bWriteBase64 == false)
445 {
446 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
447 {
448 getMultIncr(&(m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i]),
449 &mult, &incr, (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i,1);
450 if (mult == 1)
451 outStr << "<el>" ;
452 else if (incr == 0)
453 outStr << "<el mult=\"" << mult << "\">";
454 else
455 outStr << "<el mult=\"" << mult << "\" incr=\"" << incr << "\">";
456 outStr << m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el[i];
457 outStr << "</el>" ;
458 if( m_bWhiteSpace == true) outStr << endl;
459 i += mult;
460 }
461 }
462 else
463 {
464 outStr << "<base64BinaryData sizeOf=\"" << sizeof(int) << "\" >" ;
465 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->colIdx->el,
466 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof(int) );
467 outStr << "</base64BinaryData>" ;
468 if( m_bWhiteSpace == true) outStr << endl;
469 }
470 outStr << "</colIdx>" ;
471 if( m_bWhiteSpace == true) outStr << endl;
472 }
473 }
474 if(m_OSInstance->instanceData->linearConstraintCoefficients->value != NULL)
475 {
476 outStr << "<value>" ;
477 if( m_bWhiteSpace == true) outStr << endl;
478 if(m_OSInstance->instanceData->linearConstraintCoefficients->value->el != NULL)
479 {
480 if(m_bWriteBase64 == false)
481 {
482 for(i = 0; i < m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues;)
483 {
484 mult = getMult(&(m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i]),
485 (m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues)-i);
486 if (mult == 1)
487 outStr << "<el>" ;
488 else
489 outStr << "<el mult=\"" << mult << "\">";
490 outStr << os_dtoa_format( m_OSInstance->instanceData->linearConstraintCoefficients->value->el[i] );
491 outStr << "</el>" ;
492 if( m_bWhiteSpace == true) outStr << endl;
493 i += mult;
494 }
495 }
496 else
497 {
498 outStr << "<base64BinaryData sizeOf=\"" << sizeof(double) << "\" >" ;
499 outStr << Base64::encodeb64( (char*)m_OSInstance->instanceData->linearConstraintCoefficients->value->el,
500 m_OSInstance->instanceData->linearConstraintCoefficients->numberOfValues*sizeof( double) );
501 outStr << "</base64BinaryData>" ;
502 if( m_bWhiteSpace == true) outStr << endl;
503 }
504 }
505 outStr << "</value>" ;
506 if( m_bWhiteSpace == true) outStr << endl;
507 }
508 outStr << "</linearConstraintCoefficients>" ;
509 if( m_bWhiteSpace == true) outStr << endl;
510 }
511 if(m_OSInstance->instanceData->quadraticCoefficients != NULL && m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms > 0)
512 {
513 outStr << "<quadraticCoefficients";
514 outStr << " numberOfQuadraticTerms=\"";
515 outStr << m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms;
516 outStr << "\">" ;
517 if( m_bWhiteSpace == true) outStr << endl;
518 for(i = 0; i < m_OSInstance->instanceData->quadraticCoefficients->numberOfQuadraticTerms; i++)
519 {
520 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i])
521 {
522 outStr << "<qTerm" ;
523 // the following attributes are required
524 outStr << " idx=\"";
525 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idx;
526 outStr << "\"";
527 outStr << " idxOne=\"";
528 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxOne;
529 outStr << "\"";
530 outStr << " idxTwo=\"";
531 outStr << m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->idxTwo;
532 outStr << "\"";
533 if(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef != 0)
534 {
535 outStr << " coef=\"";
536 outStr << os_dtoa_format(m_OSInstance->instanceData->quadraticCoefficients->qTerm[i]->coef);
537 outStr << "\"";
538 }
539 outStr << "/>" ;
540 if( m_bWhiteSpace == true) outStr << endl;
541 }
542 }
543 outStr << "</quadraticCoefficients>";
544 if( m_bWhiteSpace == true) outStr << endl;
545 }
546 //Now the nonlinear expressions
547 if(m_OSInstance->instanceData->nonlinearExpressions != NULL && m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions > 0)
548 {
549 outStr << "<nonlinearExpressions";
550 outStr << " numberOfNonlinearExpressions=\"";
551 outStr << m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions;
552 outStr << "\">" ;
553 if( m_bWhiteSpace == true) outStr << endl;
554 for(i = 0; i < m_OSInstance->instanceData->nonlinearExpressions->numberOfNonlinearExpressions; i++)
555 {
556 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i] != NULL)
557 {
558 outStr << "<nl" ;
559 // the following attribute is required
560 outStr << " idx=\"";
561 outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->idx;
562 outStr << "\"";
563
564 // shape is an optional attribute, new since stable 2.9
565 std::string tempStr = returnExprShapeString(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->shape);
566 if (tempStr != "" && tempStr != "general")
567 {
568 outStr << " shape=\"" << tempStr << "\"";
569 }
570 outStr << ">";
571 if(m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot != NULL)
572 outStr << m_OSInstance->instanceData->nonlinearExpressions->nl[i]->osExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
573 outStr << "</nl>";
574 }
575 if( m_bWhiteSpace == true) outStr << endl;
576 }
577 outStr << "</nonlinearExpressions>";
578 if( m_bWhiteSpace == true) outStr << endl;
579 }
580 // Now the matrices element
581 if(m_OSInstance->instanceData->matrices != NULL && m_OSInstance->instanceData->matrices->numberOfMatrices > 0)
582 {
583 outStr << "<matrices";
584 outStr << " numberOfMatrices=\"";
585 outStr << m_OSInstance->instanceData->matrices->numberOfMatrices ;
586 outStr << "\"" ;
587 outStr << ">" ;
588 if( m_bWhiteSpace == true) outStr << endl;
589 for (i = 0; i < m_OSInstance->instanceData->matrices->numberOfMatrices;i++)
590 {
591 if (m_OSInstance->instanceData->matrices->matrix[i] != NULL)
592 outStr << m_OSInstance->instanceData->matrices->matrix[i]->getMatrixNodeInXML();
593 }
594 if( m_bWhiteSpace == true) outStr << endl;
595 outStr << "</matrices>" << endl;
596 }
597 // Now the cones element
598 if(m_OSInstance->instanceData->cones != NULL && m_OSInstance->instanceData->cones->numberOfCones > 0)
599 {
600 outStr << "<cones";
601 outStr << " numberOfCones=\"";
602 outStr << m_OSInstance->instanceData->cones->numberOfCones ;
603 outStr << "\"" ;
604 outStr << ">" ;
605 if( m_bWhiteSpace == true) outStr << endl;
606 for (i = 0; i < m_OSInstance->instanceData->cones->numberOfCones;i++)
607 {
608 if (m_OSInstance->instanceData->cones->cone[i] != NULL)
609 {
610 switch ( m_OSInstance->instanceData->cones->cone[i]->coneType )
611 {
613 outStr << ((NonnegativeCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
614 break;
616 outStr << ((NonpositiveCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
617 break;
619 outStr << ((OrthantCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
620 break;
622 outStr << ((QuadraticCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
623 break;
625 outStr << ((RotatedQuadraticCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
626 break;
628 outStr << ((SemidefiniteCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
629 break;
631 outStr << ((ProductCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
632 break;
634 outStr << ((IntersectionCone*)m_OSInstance->instanceData->cones->cone[i])->getConeInXML();
635 break;
636 }
637 }
638 }
639 if( m_bWhiteSpace == true) outStr << endl;
640 outStr << "</cones>" << endl;
641 }
642 // Now the matrixProgramming element
643 if (m_OSInstance->instanceData->matrixProgramming != NULL)
644 {
645 outStr << "<matrixProgramming>";
646
647 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables != NULL)
648 {
649 outStr << "<matrixVariables";
650 outStr << " numberOfMatrixVar=\"";
651 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->numberOfMatrixVar << "\">";
652 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixVariables->numberOfMatrixVar; i++)
653 {
654 outStr << "<matrixVar";
655 outStr << " numberOfRows=\"";
656 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->numberOfRows << "\"";
657 outStr << " numberOfColumns=\"";
658 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->numberOfColumns << "\"";
659
660 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->templateMatrixIdx >= 0)
661 {
662 outStr << " templateMatrixIdx=\"";
663 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->templateMatrixIdx << "\"";
664 }
665
666 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varReferenceMatrixIdx >= 0)
667 {
668 outStr << " varReferenceMatrixIdx=\"";
669 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varReferenceMatrixIdx << "\"";
670 }
671
672 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbMatrixIdx >= 0)
673 {
674 outStr << " lbMatrixIdx=\"";
675 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbMatrixIdx << "\"";
676 }
677
678 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbConeIdx >= 0)
679 {
680 outStr << " lbConeIdx=\"";
681 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->lbConeIdx << "\"";
682 }
683
684 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubMatrixIdx >= 0)
685 {
686 outStr << " ubMatrixIdx=\"";
687 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubMatrixIdx << "\"";
688 }
689
690 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubConeIdx >= 0)
691 {
692 outStr << " ubConeIdx=\"";
693 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->ubConeIdx << "\"";
694 }
695
696 if (m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->name != "")
697 {
698 outStr << " name=\"";
699 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->name << "\"";
700 }
701
702 if (verifyVarType(m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varType) && m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varType != 'C')
703 {
704 outStr << " varType=\"";
705 outStr << m_OSInstance->instanceData->matrixProgramming->matrixVariables->matrixVar[i]->varType << "\"";
706 }
707
708 outStr << "/>" << endl;
709 }
710 outStr << "</matrixVariables>" << endl;
711 }
712
713 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives != NULL)
714 {
715 outStr << "<matrixObjectives";
716 outStr << " numberOfMatrixObj=\"";
717 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->numberOfMatrixObj << "\">";
718 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixObjectives->numberOfMatrixObj; i++)
719 {
720 outStr << "<matrixObj";
721 outStr << " numberOfRows=\"";
722 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->numberOfRows << "\"";
723 outStr << " numberOfColumns=\"";
724 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->numberOfColumns << "\"";
725
726 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->templateMatrixIdx >= 0)
727 {
728 outStr << " templateMatrixIdx=\"";
729 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->templateMatrixIdx << "\"";
730 }
731
732 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->objReferenceMatrixIdx >= 0)
733 {
734 outStr << " objReferenceMatrixIdx=\"";
735 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->objReferenceMatrixIdx << "\"";
736 }
737
738 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->orderConeIdx >= 0)
739 {
740 outStr << " orderConeIdx=\"";
741 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->orderConeIdx << "\"";
742 }
743
744 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->constantMatrixIdx >= 0)
745 {
746 outStr << " constantMatrixIdx=\"";
747 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->constantMatrixIdx << "\"";
748 }
749
750 if (m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->name != "")
751 {
752 outStr << " name=\"";
753 outStr << m_OSInstance->instanceData->matrixProgramming->matrixObjectives->matrixObj[i]->name << "\"";
754 }
755
756 outStr << "/>" << endl;
757 }
758 outStr << "</matrixObjectives>" << endl;
759 }
760
761 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints != NULL)
762 {
763 outStr << "<matrixConstraints";
764 outStr << " numberOfMatrixCon=\"";
765 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->numberOfMatrixCon << "\">";
766 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixConstraints->numberOfMatrixCon; i++)
767 {
768 outStr << "<matrixCon";
769 outStr << " numberOfRows=\"";
770 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->numberOfRows << "\"";
771 outStr << " numberOfColumns=\"";
772 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->numberOfColumns << "\"";
773
774 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->templateMatrixIdx >= 0)
775 {
776 outStr << " templateMatrixIdx=\"";
777 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->templateMatrixIdx << "\"";
778 }
779
780 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->conReferenceMatrixIdx >= 0)
781 {
782 outStr << " conReferenceMatrixIdx=\"";
783 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->conReferenceMatrixIdx << "\"";
784 }
785
786 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbMatrixIdx >= 0)
787 {
788 outStr << " lbMatrixIdx=\"";
789 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbMatrixIdx << "\"";
790 }
791
792 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbConeIdx >= 0)
793 {
794 outStr << " lbConeIdx=\"";
795 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->lbConeIdx << "\"";
796 }
797
798 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubMatrixIdx >= 0)
799 {
800 outStr << " ubMatrixIdx=\"";
801 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubMatrixIdx << "\"";
802 }
803
804 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubConeIdx >= 0)
805 {
806 outStr << " ubConeIdx=\"";
807 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->ubConeIdx << "\"";
808 }
809
810 if (m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->name != "")
811 {
812 outStr << " name=\"";
813 outStr << m_OSInstance->instanceData->matrixProgramming->matrixConstraints->matrixCon[i]->name << "\"";
814 }
815
816 outStr << "/>" << endl;
817 }
818 outStr << "</matrixConstraints>" << endl;
819 }
820
821 if (m_OSInstance->instanceData->matrixProgramming->matrixExpressions != NULL)
822 {
823 outStr << "<matrixExpressions";
824 outStr << " numberOfExpr=\"";
825 outStr << m_OSInstance->instanceData->matrixProgramming->matrixExpressions->numberOfExpr << "\">";
826 if( m_bWhiteSpace == true) outStr << endl;
827 for (int i=0; i < m_OSInstance->instanceData->matrixProgramming->matrixExpressions->numberOfExpr; i++)
828 {
829 if (m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i] != NULL)
830 {
831 outStr << "<expr";
832
833 // the following attribute is required
834 outStr << " idx=\"";
835 outStr << m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->idx;
836 outStr << "\"";
837
838 // shape is an optional attribute, new since stable 2.9
839 std::string tempStr = returnExprShapeString(m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->shape);
840 if (tempStr != "" && tempStr != "general");
841 {
842 outStr << " shape=\"" << tempStr << "\"";
843 }
844
845 outStr << ">";
846 if(m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->matrixExpressionTree->m_treeRoot != NULL)
847 outStr << m_OSInstance->instanceData->matrixProgramming->matrixExpressions->expr[i]->matrixExpressionTree->m_treeRoot->getNonlinearExpressionInXML();
848 outStr << "</expr>";
849 if( m_bWhiteSpace == true) outStr << endl;
850 }
851 }
852 outStr << "</matrixExpressions>";
853 if( m_bWhiteSpace == true) outStr << endl;
854 }
855
856 outStr << "</matrixProgramming>" << endl;
857 }
858 if( m_bWhiteSpace == true) outStr << endl;
859 } // end instanceData if
860 outStr << "</instanceData>";
861 outStr << "</osil>" ;
862 if( m_bWhiteSpace == true) outStr << endl;
863 outStr << endl;
864 return outStr.str();
865} // end writeOSiL
bool OSIsEqual(double x, double y)
Definition OSGeneral.h:985
std::string os_dtoa_format(double x)
void getMultIncr(int *i, int *mult, int *incr, int size, int defaultIncr)
getMultIncr
Definition OSMathUtil.h:168
int getMult(int *i, int size)
getMult
Definition OSMathUtil.h:246
double OSNaN()
returns the value for NaN used in OS
std::string writeStringData(std::string str)
writeStringData
static Bigint * mult(Bigint *a, Bigint *b)
Definition OSdtoa.cpp:857
static std::string encodeb64(char *bytes, int size)
encode the data in base 64
Definition OSBase64.cpp:33
The in-memory representation of an intersection cone.
The NonnegativeCone Class.
Definition OSInstance.h:610
The NonpositiveCone Class.
Definition OSInstance.h:668
The in-memory representation of an OSiL instance..
OSiLWriter()
Default constructor.
~OSiLWriter()
Class destructor.
std::string writeOSiL(const OSInstance *theosinstance)
create an osil string from an OSInstance object
const OSInstance * m_OSInstance
m_OSInstance is an object in the class OSInstance
Definition OSiLWriter.h:35
bool m_bWriteBase64
m_bWriteBase64 is set to true if we encode the linear constraint coefficients in base64 binary
Definition OSiLWriter.h:64
bool m_bWhiteSpace
m_bWhiteSpace is set to true if we write white space in the file
Definition OSiLWriter.h:68
The OrthantCone Class.
Definition OSInstance.h:727
The in-memory representation of a product cone.
The in-memory representation of a quadratic cone.
Definition OSInstance.h:861
The in-memory representation of a rotated quadratic cone.
Definition OSInstance.h:952
The in-memory representation of a cone of semidefinite matrices.
This file defines the OSInstance class along with its supporting classes.
bool verifyVarType(char vt)
#define OS_SCHEMA_VERSION
std::string returnExprShapeString(ENUM_NL_EXPR_SHAPE shape)
@ ENUM_CONE_TYPE_orthant
@ ENUM_CONE_TYPE_nonnegative
@ ENUM_CONE_TYPE_product
@ ENUM_CONE_TYPE_quadratic
@ ENUM_CONE_TYPE_nonpositive
@ ENUM_CONE_TYPE_rotatedQuadratic
@ ENUM_CONE_TYPE_intersection
@ ENUM_CONE_TYPE_semidefinite
#define OSDBL_MAX