00001
00017 #include "OSResult.h"
00018 #include "OSParameters.h"
00019 #include "OSErrorClass.h"
00020
00021
00022 #include "OSDataStructures.h"
00023 #include "OSParameters.h"
00024 #include "OSCommonUtil.h"
00025 #include "OSMathUtil.h"
00026
00027 #include<iostream>
00028 #include<sstream>
00029 #define DEBUG
00030
00031 using namespace std;
00032
00033 GeneralStatus::GeneralStatus():
00034 type( ""),
00035 description( "")
00036 {
00037 #ifdef DEBUG
00038 cout << "Inside GeneralStatus Constructor" << endl;
00039 #endif
00040 }
00041
00042 GeneralStatus::~GeneralStatus(){
00043 #ifdef DEBUG
00044 cout << "GeneralStatus Destructor Called" << endl;
00045 #endif
00046 }
00047
00048 OSResult::OSResult():
00049 m_iVariableNumber( -1),
00050 m_iObjectiveNumber( -1),
00051 m_iConstraintNumber( -1),
00052 m_iNumberOfOtherVariableResults( -1),
00053 m_mdPrimalValues( NULL),
00054 m_mdDualValues( NULL)
00055
00056 {
00057 #ifdef DEBUG
00058 cout << "Inside OSResult Constructor" << endl;
00059 #endif
00060 this->general = new GeneralResult();
00061 this->system = new SystemResult();
00062 this->service = new ServiceResult();
00063 this->job = new JobResult();
00064 this->optimization = new OptimizationResult();
00065 }
00066
00067 OSResult::~OSResult(){
00068 #ifdef DEBUG
00069 cout << "OSResult Destructor Called" << endl;
00070 #endif
00071
00072
00073 if(general != NULL) delete general;
00074 general = NULL;
00075
00076 if(system != NULL) delete system;
00077 system = NULL;
00078
00079 if(service != NULL) delete service;
00080 service = NULL;
00081
00082 if(job != NULL) delete job;
00083 job = NULL;
00084
00085 if(optimization != NULL) delete optimization;
00086 optimization = NULL;
00087
00088 if(m_mdPrimalValues != NULL) delete[] m_mdPrimalValues;
00089 m_mdPrimalValues = 0;
00090 if(m_mdDualValues != NULL) delete[] m_mdDualValues;
00091 m_mdDualValues = 0;
00092 }
00093
00094
00095 GeneralResult::GeneralResult():
00096 serviceURI(""),
00097 serviceName(""),
00098 instanceName(""),
00099 jobID(""),
00100 time("0.0"),
00101 message("")
00102 {
00103 #ifdef DEBUG
00104 cout << "Inside the GeneralResult Constructor" << endl;
00105 #endif
00106 generalStatus = new GeneralStatus();
00107 }
00108
00109
00110 GeneralResult::~GeneralResult(){
00111 #ifdef DEBUG
00112 cout << "Inside the GeneralResult Destructor" << endl;
00113 #endif
00114 delete generalStatus;
00115 generalStatus = NULL;
00116 }
00117
00118
00119 SystemResult::SystemResult()
00120 {
00121 #ifdef DEBUG
00122 cout << "Inside the SystemResult Constructor" << endl;
00123 #endif
00124 }
00125
00126
00127 SystemResult::~SystemResult(){
00128 #ifdef DEBUG
00129 cout << "Inside the SystemResult Destructor" << endl;
00130 #endif
00131 }
00132
00133
00134
00135 ServiceResult::ServiceResult()
00136 {
00137 #ifdef DEBUG
00138 cout << "Inside the ServiceResult Constructor" << endl;
00139 #endif
00140 }
00141
00142
00143 ServiceResult::~ServiceResult(){
00144 #ifdef DEBUG
00145 cout << "Inside the ServiceResult Destructor" << endl;
00146 #endif
00147 }
00148
00149
00150 Time::Time():
00151 type("elapsedTime"),
00152 category("total"),
00153 unit("second"),
00154 description(""),
00155 value(0.0)
00156 {
00157 #ifdef DEBUG
00158 cout << "Inside the Time Constructor" << endl;
00159 #endif
00160 }
00161
00162
00163 Time::~Time(){
00164 #ifdef DEBUG
00165 cout << "Inside the Time Destructor" << endl;
00166 #endif
00167
00168 }
00169
00170 TimingInformation::TimingInformation():
00171 numberOfTimes(0)
00172 {
00173 #ifdef DEBUG
00174 cout << "Inside the TimingInformation Constructor" << endl;
00175 #endif
00176 time = NULL;
00177 }
00178
00179
00180 TimingInformation::~TimingInformation(){
00181 #ifdef DEBUG
00182 cout << "Inside the TimingInformation Destructor" << endl;
00183 #endif
00184 if (time != NULL)
00185 {
00186 for (int i = 0; i < numberOfTimes; i++)
00187 { delete time[i];
00188 time[i] = NULL;
00189 }
00190 delete [] time;
00191 time = NULL;
00192 }
00193 }
00194
00195
00196 JobResult::JobResult()
00197 {
00198 #ifdef DEBUG
00199 cout << "Inside the JobResult Constructor" << endl;
00200 #endif
00201 timingInformation = NULL;
00202 }
00203
00204
00205 JobResult::~JobResult(){
00206 #ifdef DEBUG
00207 cout << "Inside the JobResult Destructor" << endl;
00208 #endif
00209 if (timingInformation != NULL) delete timingInformation;
00210 timingInformation = NULL;
00211 }
00212
00213 VarValue::VarValue():
00214 idx( -1),
00215 value( 0)
00216 {
00217 #ifdef DEBUG
00218 cout << "Inside the VarValue Constructor" << endl;
00219 #endif
00220 }
00221
00222
00223 VarValue::~VarValue(){
00224 #ifdef DEBUG
00225 cout << "Inside the VarValue Destructor" << endl;
00226 #endif
00227 }
00228
00229
00230 OtherVarResult::OtherVarResult():
00231 idx( -1),
00232 value( "")
00233 {
00234 #ifdef DEBUG
00235 cout << "Inside the OtherVarResult Constructor" << endl;
00236 #endif
00237 }
00238
00239
00240 OtherVarResult::~OtherVarResult(){
00241 #ifdef DEBUG
00242 cout << "Inside the OtherVarResult Destructor" << endl;
00243 #endif
00244 }
00245
00246
00247 OtherObjResult::OtherObjResult():
00248 idx( -1),
00249 value( "")
00250 {
00251 #ifdef DEBUG
00252 cout << "Inside the OtherObjResult Constructor" << endl;
00253 #endif
00254 }
00255
00256
00257 OtherObjResult::~OtherObjResult(){
00258 #ifdef DEBUG
00259 cout << "Inside the OtherObjResult Destructor" << endl;
00260 #endif
00261 }
00262
00263
00264 OtherConResult::OtherConResult():
00265 idx( -1),
00266 value( "")
00267 {
00268 #ifdef DEBUG
00269 cout << "Inside the OtherConResult Constructor" << endl;
00270 #endif
00271 }
00272
00273
00274 OtherConResult::~OtherConResult(){
00275 #ifdef DEBUG
00276 cout << "Inside the OtherConResult Destructor" << endl;
00277 #endif
00278 }
00279
00280
00281 ObjValue::ObjValue():
00282 idx( -1),
00283 value( OSNAN)
00284 {
00285 #ifdef DEBUG
00286 cout << "Inside the ObjValue Constructor" << endl;
00287 #endif
00288 }
00289
00290 ObjValue::~ObjValue(){
00291 #ifdef DEBUG
00292 cout << "Inside the ObjValue Destructor" << endl;
00293 #endif
00294 }
00295
00296 DualVarValue::DualVarValue():
00297 idx( -1),
00298 lbValue( 0),
00299 ubValue( 0),
00300 value( 0)
00301 {
00302 #ifdef DEBUG
00303 cout << "Inside the DualVarValue Constructor" << endl;
00304 #endif
00305 }
00306
00307
00308 DualVarValue::~DualVarValue(){
00309 #ifdef DEBUG
00310 cout << "Inside the DualVarValue Destructor" << endl;
00311 #endif
00312 }
00313
00314
00315
00316 VariableValues::VariableValues() {
00317 #ifdef DEBUG
00318 cout << "Inside the VariableValues Constructor" << endl;
00319 #endif
00320
00321 }
00322
00323
00324 VariableValues::~VariableValues(){
00325 #ifdef DEBUG
00326 cout << "Inside the VariableValues Destructor" << endl;
00327 #endif
00328 int n = var.size();
00329 if(n > 0 ){
00330 for(int i = 0; i < n; i++){
00331 delete var[i];
00332 var[i] = NULL;
00333 }
00334 }
00335 var.clear();
00336
00337 }
00338
00339
00340 OtherVariableResult::OtherVariableResult():
00341 numberOfVar(-1),
00342 value(""),
00343 name(""),
00344 description("")
00345 {
00346 #ifdef DEBUG
00347 cout << "Inside the OtherVariableResult Constructor" << endl;
00348 #endif
00349
00350 }
00351
00352
00353 OtherVariableResult::~OtherVariableResult(){
00354 #ifdef DEBUG
00355 cout << "Inside the OtherVariableResult Destructor" << endl;
00356 #endif
00357 int n = var.size();
00358 if (n > 0) {
00359 for(int i = 0; i < n; i++){
00360 delete var[i];
00361 var[i] = NULL;
00362 }
00363 }
00364 var.clear();
00365 #ifdef DEBUG
00366 cout << "Inside the OtherVariableResult Destructor - Done" << endl;
00367 #endif
00368 }
00369
00370
00371 OtherObjectiveResult::OtherObjectiveResult():
00372 name(""),
00373 description("")
00374 {
00375 #ifdef DEBUG
00376 cout << "Inside the OtherObjectiveResult Constructor" << endl;
00377 #endif
00378 }
00379
00380
00381 OtherObjectiveResult::~OtherObjectiveResult(){
00382 #ifdef DEBUG
00383 cout << "Inside the OtherObjectiveResult Destructor" << endl;
00384 #endif
00385 int n = obj.size();
00386 if(n > 0) {
00387 for(int i = 0; i < n; i++){
00388 delete obj[i];
00389 obj[i] = NULL;
00390 }
00391 }
00392 obj.clear();
00393 }
00394
00395
00396 OtherConstraintResult::OtherConstraintResult():
00397 name(""),
00398 description("")
00399 {
00400 #ifdef DEBUG
00401 cout << "Inside the OtherConstraintResult Constructor" << endl;
00402 #endif
00403 }
00404
00405
00406 OtherConstraintResult::~OtherConstraintResult(){
00407 #ifdef DEBUG
00408 cout << "Inside the OtherConstraintResult Destructor" << endl;
00409 #endif
00410 int n = con.size();
00411 if(n > 0){
00412 for(int i = 0; i < n; i++){
00413 delete con[i];
00414 con[i] = NULL;
00415 }
00416 }
00417 con.clear();
00418 }
00419
00420
00421 ObjectiveValues::ObjectiveValues() {
00422 #ifdef DEBUG
00423 cout << "Inside the ObjectiveValues Constructor" << endl;
00424 #endif
00425
00426 }
00427
00428
00429 ObjectiveValues::~ObjectiveValues(){
00430 #ifdef DEBUG
00431 cout << "Inside the ObjectiveValues Destructor" << endl;
00432 #endif
00433 int n = obj.size();
00434 if(n > 0 ){
00435 for(int i = 0; i < n; i++){
00436 delete obj[i];
00437 obj[i] = NULL;
00438 }
00439 }
00440 obj.clear();
00441
00442 }
00443
00444
00445
00446 DualVariableValues::DualVariableValues() {
00447 #ifdef DEBUG
00448 cout << "Inside the DualVariableValues Constructor" << endl;
00449 #endif
00450
00451 }
00452
00453
00454 DualVariableValues::~DualVariableValues(){
00455 #ifdef DEBUG
00456 cout << "Inside the DualVariableValues Destructor" << endl;
00457 #endif
00458 int n = con.size();
00459 if(n > 0){
00460 for(int i = 0; i < n; i++){
00461 delete con[i];
00462 con[i] = NULL;
00463 }
00464 }
00465 con.clear();
00466 }
00467
00468
00469
00470 VariableSolution::VariableSolution():
00471 numberOfOtherVariableResults( 0),
00472 values( NULL),
00473 other( NULL)
00474
00475 {
00476 #ifdef DEBUG
00477 cout << "Inside the VariableSolution Constructor" << endl;
00478 #endif
00479 }
00480
00481
00482 VariableSolution::~VariableSolution(){
00483 #ifdef DEBUG
00484 cout << "Inside the VariableSolution Destructor" << endl;
00485 #endif
00486 delete values;
00487 values = NULL;
00488 if(numberOfOtherVariableResults > 0 && other != NULL){
00489 for(int i = 0; i < numberOfOtherVariableResults; i++){
00490 delete other[i];
00491 other[i] = NULL;
00492 }
00493 }
00494 delete[] other;
00495 other = NULL;
00496 }
00497
00498 ObjectiveSolution::ObjectiveSolution():
00499 numberOfOtherObjectiveResults( 0),
00500 values( NULL),
00501 other( NULL)
00502
00503 {
00504 #ifdef DEBUG
00505 cout << "Inside the ObjectiveSolution Constructor" << endl;
00506 #endif
00507 }
00508
00509
00510 ObjectiveSolution::~ObjectiveSolution(){
00511 #ifdef DEBUG
00512 cout << "Inside the ObjectieSolution Destructor" << endl;
00513 #endif
00514 delete values;
00515 values = NULL;
00516 if(numberOfOtherObjectiveResults > 0 && other != NULL){
00517 for(int i = 0; i < numberOfOtherObjectiveResults; i++){
00518 delete other[i];
00519 other[i] = NULL;
00520 }
00521 }
00522 delete[] other;
00523 other = NULL;
00524 }
00525
00526
00527
00528 ConstraintSolution::ConstraintSolution():
00529 numberOfOtherConstraintResults( 0),
00530 dualValues( NULL),
00531 other( NULL)
00532 {
00533 #ifdef DEBUG
00534 cout << "Inside the ConstraintSolution Constructor" << endl;
00535 #endif
00536 }
00537
00538
00539 ConstraintSolution::~ConstraintSolution(){
00540 #ifdef DEBUG
00541 cout << "Inside the ConstraintSolution Destructor" << endl;
00542 #endif
00543 delete dualValues;
00544 dualValues = NULL;
00545 if(numberOfOtherConstraintResults > 0 && other != NULL){
00546 for(int i = 0; i < numberOfOtherConstraintResults; i++){
00547 delete other[i];
00548 other[i] = NULL;
00549 }
00550 }
00551 delete[] other;
00552 other = NULL;
00553 }
00554
00555
00556
00557 OptimizationSolutionStatus::OptimizationSolutionStatus():
00558 type(""),
00559 description("")
00560
00561 {
00562 #ifdef DEBUG
00563 cout << "Inside the OptimizationSolutionStatus Constructor" << endl;
00564 #endif
00565 }
00566
00567
00568 OptimizationSolutionStatus::~OptimizationSolutionStatus(){
00569 #ifdef DEBUG
00570 cout << "Inside the OptimzationSolutionStatus Destructor" << endl;
00571 #endif
00572 }
00573
00574
00575 OptimizationSolution::OptimizationSolution():
00576 targetObjectiveIdx( -1),
00577 message( ""),
00578 variables( NULL),
00579 objectives( NULL),
00580 constraints( NULL)
00581
00582 {
00583 #ifdef DEBUG
00584 cout << "Inside the OptimizationSolution Constructor" << endl;
00585 #endif
00586 status = new OptimizationSolutionStatus();
00587 }
00588
00589
00590 OptimizationSolution::~OptimizationSolution(){
00591 #ifdef DEBUG
00592 cout << "Inside the OptimzationSolution Destructor" << endl;
00593 #endif
00594 if(variables != NULL){
00595 delete variables;
00596 variables = NULL;
00597 }
00598 if(constraints != NULL) {
00599 delete constraints;
00600 constraints = NULL;
00601 }
00602 if(objectives != NULL){
00603 delete objectives;
00604 objectives = NULL;
00605 }
00606 if(status != NULL){
00607 delete status;
00608 status = NULL;
00609 }
00610 }
00611
00612
00613 OptimizationResult::OptimizationResult():
00614 numberOfVariables( -1),
00615 numberOfObjectives( -1),
00616 numberOfConstraints(-1),
00617 numberOfSolutions( -1),
00618 solution(NULL)
00619 {
00620 #ifdef DEBUG
00621 cout << "Inside the OptimizationResult Constructor" << endl;
00622 #endif
00623 }
00624
00625
00626 OptimizationResult::~OptimizationResult(){
00627 #ifdef DEBUG
00628 cout << "Inside the OptimzationResult Destructor" << endl;
00629 cout << "Number of solutions = " << this->numberOfSolutions << endl;
00630 #endif
00631 if( solution != NULL){
00632 for(int i = 0; i < this->numberOfSolutions; i++){
00633 delete solution[i];
00634 solution[i] = NULL;
00635 #ifdef DEBUG
00636 cout << "Delelting Solution: " << i << endl;
00637 #endif
00638 i++;
00639 }
00640 }
00641 delete[] solution;
00642 solution = NULL;
00643 }
00644
00645
00646
00647
00648
00649
00650 GeneralStatus* OSResult::getGeneralStatus(){
00651 return general->generalStatus;
00652 }
00653
00654
00655 string OSResult::getGeneralStatusType(){
00656 if(general->generalStatus == NULL) return "";
00657 return general->generalStatus->type;
00658 }
00659
00660 string OSResult::getGeneralStatusDescription(){
00661 if(general->generalStatus == NULL) return NULL;
00662 return general->generalStatus->description;
00663 }
00664
00665 string OSResult::getServiceName(){
00666 return general->serviceName;
00667 }
00668
00669 string OSResult::getServiceURI(){
00670 return general->serviceURI;
00671 }
00672
00673 string OSResult::getInstanceName(){
00674 return general->instanceName;
00675 }
00676
00677 string OSResult::getJobID(){
00678 return general->jobID;
00679 }
00680
00681
00682 string OSResult::getGeneralMessage(){
00683 return general->message;
00684 }
00685
00686
00687 double OSResult::getTimeValue()
00688 { if (job == NULL) return 0.0;
00689 if (job->timingInformation == NULL) return 0.0;
00690 if (job->timingInformation->numberOfTimes <= 0) return 0.0;
00691 return job->timingInformation->time[0]->value;
00692 }
00693
00694
00695 int OSResult::getTimeNumber()
00696 { if (job == NULL) return -1;
00697 if (job->timingInformation == NULL) return -1;
00698 return job->timingInformation->numberOfTimes;
00699 }
00700
00701
00702 int OSResult::getVariableNumber(){
00703 if(m_iVariableNumber == -1){
00704 if(optimization == NULL) return -1;
00705 m_iVariableNumber = optimization->numberOfVariables;
00706 }
00707 return m_iVariableNumber;
00708 }
00709
00710
00711
00712 int OSResult::getObjectiveNumber(){
00713 if(m_iObjectiveNumber == -1){
00714 if(optimization == NULL) return -1;
00715 m_iObjectiveNumber = optimization->numberOfObjectives;
00716 }
00717 return m_iObjectiveNumber;
00718 }
00719
00720
00721 int OSResult::getConstraintNumber(){
00722 if(m_iConstraintNumber == -1){
00723 if(optimization == NULL) return -1;
00724 m_iConstraintNumber = optimization->numberOfConstraints;
00725 }
00726 return m_iConstraintNumber;
00727 }
00728
00729 int OSResult::getSolutionNumber(){
00730 if(optimization == NULL) return 0;
00731 if(optimization->solution == NULL) return 0;
00732 return optimization->numberOfSolutions;
00733 }
00734
00735
00736 int OSResult::getNumberOfOtherVariableResults(int solIdx){
00737 if(m_iNumberOfOtherVariableResults == -1){
00738 if(optimization->solution[solIdx]->variables->other == NULL) return -1;
00739 m_iNumberOfOtherVariableResults = optimization->solution[solIdx]->variables->numberOfOtherVariableResults;
00740 }
00741 return m_iNumberOfOtherVariableResults;
00742 }
00743
00744
00745 OptimizationSolutionStatus* OSResult::getSolutionStatus( int solIdx){
00746 if(optimization == NULL || optimization->solution == NULL) return NULL;
00747 if( optimization->numberOfSolutions <= 0 ||
00748 solIdx < 0 || solIdx >= optimization->numberOfSolutions) return NULL;
00749 if(optimization->solution[solIdx] == NULL) return NULL;
00750 return optimization->solution[solIdx]->status;
00751 }
00752
00753 string OSResult::getSolutionStatusType(int solIdx){
00754 if(optimization == NULL || optimization->solution == NULL) return NULL;
00755 if( optimization->numberOfSolutions <= 0 ||
00756 solIdx < 0 || solIdx >= optimization->numberOfSolutions) return NULL;
00757 if(optimization->solution[solIdx] == NULL) return NULL;
00758 if(optimization->solution[solIdx]->status == NULL) return NULL;
00759 return optimization->solution[solIdx]->status->type;
00760 }
00761
00762 string OSResult::getSolutionStatusDescription(int solIdx){
00763 if(optimization == NULL || optimization->solution == NULL) return NULL;
00764 if( optimization->numberOfSolutions <= 0 ||
00765 solIdx < 0 || solIdx >= optimization->numberOfSolutions) return NULL;
00766 if(optimization->solution[solIdx] == NULL) return NULL;
00767 if(optimization->solution[solIdx]->status == NULL) return NULL;
00768 return optimization->solution[solIdx]->status->description;
00769 }
00770
00771 string OSResult::getSolutionMessage(int solIdx){
00772 if(optimization == NULL) return "there is no solution";
00773 if(optimization->solution == NULL ||
00774 solIdx < 0 || solIdx >= optimization->numberOfSolutions) return "there is no solution";
00775 if(optimization->solution[solIdx] == NULL) return "there is no solution";
00776 return optimization->solution[solIdx]->message;
00777 }
00778
00779 double* OSResult::getOptimalPrimalVariableValues(int objIdx){
00780 if(optimization == NULL || optimization->solution == NULL) return NULL;
00781 int iNumberOfVariables = this->getVariableNumber();
00782 if(iNumberOfVariables <= 0) return NULL;
00783 int iSolutions = this->getSolutionNumber();
00784 for(int i = 0; i < iSolutions; i++){
00785 if(optimization->solution[i] == NULL) continue;
00786 if(optimization->solution[i]->targetObjectiveIdx != objIdx) continue;
00787 if(optimization->solution[i]->variables == NULL) continue;
00788 if(optimization->solution[i]->variables->values == NULL) continue;
00789 if((optimization->solution[i]->status->type.find("ptimal") != string::npos && m_mdPrimalValues == NULL) ||
00790 optimization->solution[i]->status->type.compare("globallyOptimal") == 0){
00791 m_mdPrimalValues = new double[iNumberOfVariables];
00792 for(int j = 0; j < iNumberOfVariables; j++){
00793 m_mdPrimalValues[ j] = optimization->solution[i]->variables->values->var[j]->value;
00794 }
00795 }
00796 if(optimization->solution[i]->status->type.compare("globallyOptimal") == 0){
00797 return m_mdPrimalValues;
00798 }
00799 }
00800 return m_mdPrimalValues;
00801 }
00802
00803
00804 double* OSResult::getOptimalDualVariableValues(int objIdx){
00805 if(optimization == NULL || optimization->solution == NULL) return NULL;
00806 int iNumberOfConstraints = this->getConstraintNumber();
00807 if(iNumberOfConstraints <= 0) return NULL;
00808 int iSolutions = this->getSolutionNumber();
00809 for(int i = 0; i < iSolutions; i++){
00810 if(optimization->solution[i] == NULL) continue;
00811 if(optimization->solution[i]->targetObjectiveIdx != objIdx) continue;
00812 if(optimization->solution[i]->constraints == NULL) continue;
00813 if(optimization->solution[i]->constraints->dualValues == NULL) continue;
00814 if((optimization->solution[i]->status->type.find("ptimal") != string::npos && m_mdDualValues == NULL) ||
00815 optimization->solution[i]->status->type.compare("globallyOptimal") == 0){
00816 m_mdDualValues = new double[iNumberOfConstraints];
00817 for(int j = 0; j < iNumberOfConstraints; j++){
00818 m_mdDualValues[ j] = optimization->solution[i]->constraints->dualValues->con[j]->value;
00819 }
00820 }
00821 if(optimization->solution[i]->status->type.compare("globallyOptimal")){
00822 return m_mdDualValues;
00823 }
00824 }
00825 return m_mdDualValues;
00826 }
00827
00828
00829
00830 bool OSResult::setGeneralStatus(GeneralStatus *status){
00831 general->generalStatus = status;
00832 return true;
00833 }
00834
00835 bool OSResult::setGeneralStatusType(string type){
00836 if(general->generalStatus == NULL) general->generalStatus = new GeneralStatus();
00837 general->generalStatus->type = type;
00838 return true;
00839 }
00840
00841 bool OSResult::addTimingInformation(std::string type, std::string category,
00842 std::string unit, std::string description, double value)
00843 { int nt; int i;
00844 cout << "add timing information: " << endl;
00845 cout << "type " << type << endl;
00846 cout << "category " << category << endl;
00847 cout << "unit " << unit << endl;
00848 cout << "description " << description << endl;
00849 cout << "value " << value << endl;
00850 if (job == NULL) job = new JobResult();
00851 if (job->timingInformation == NULL) job->timingInformation = new TimingInformation();
00852
00853 nt = job->timingInformation->numberOfTimes;
00854 cout << "allocate new pointers" << endl;
00855 Time** temp = new Time*[nt+1];
00856 cout << " copy pointers --- " << nt << endl;
00857 for (i = 0; i < nt; i++)
00858 temp[i] = job->timingInformation->time[i];
00859
00860 cout << "delete old pointers" << endl;
00861 delete[] job->timingInformation->time;
00862
00863
00864 cout << "add new element" << endl;
00865 temp[ nt] = new Time();
00866
00867 temp[ nt]->type = type;
00868 temp[ nt]->category = category;
00869 temp[ nt]->unit = unit;
00870 temp[ nt]->description = description;
00871 temp[ nt]->value = value;
00872
00873 cout << "hook new pointers into OSResult" << endl;
00874 job->timingInformation->time = temp;
00875 job->timingInformation->numberOfTimes = ++nt;
00876
00877 cout << "done" << endl;
00878 return true;
00879 }
00880
00881
00882 bool OSResult::setGeneralStatusDescription(string description){
00883 if(general->generalStatus == NULL) general->generalStatus = new GeneralStatus();
00884 general->generalStatus->description = description;
00885 return true;
00886 }
00887
00888
00889
00890 bool OSResult::setServiceName(string serviceName){
00891 general->serviceName = serviceName;
00892 return true;
00893 }
00894
00895 bool OSResult::setServiceURI(string serviceURI){
00896 general->serviceURI = serviceURI;
00897 return true;
00898 }
00899
00900 bool OSResult::setInstanceName(string instanceName){
00901 general->instanceName = instanceName;
00902 return true;
00903 }
00904
00905 bool OSResult::setJobID(string jobID){
00906 general->jobID = jobID;
00907 return true;
00908 }
00909
00910 bool OSResult::setTime(double time){
00911
00912 return addTimingInformation("elapsedTime", "total", "second", "", time);
00913 }
00914
00915 bool OSResult::setTimeNumber(int timeNumber)
00916 { if (job == NULL) job = new JobResult();
00917 if (job->timingInformation == NULL) job->timingInformation = new TimingInformation();
00918 if (timeNumber <= 0) return false;
00919 job->timingInformation->numberOfTimes = timeNumber;
00920 return true;
00921 }
00922
00923 bool OSResult::setGeneralMessage(string message){
00924 general->message = message;
00925 return true;
00926 }
00927
00928 bool OSResult::setVariableNumber(int variableNumber){
00929 if(variableNumber <= 0){
00930 return false;
00931 }
00932 if(optimization == NULL) optimization = new OptimizationResult();
00933 optimization->numberOfVariables = variableNumber;
00934 return true;
00935 }
00936
00937 bool OSResult::setObjectiveNumber(int objectiveNumber){
00938 if(objectiveNumber < 0){
00939 return false;
00940 }
00941 if(optimization == NULL) optimization = new OptimizationResult();
00942 optimization->numberOfObjectives = objectiveNumber;
00943 return true;
00944 }
00945
00946 bool OSResult::setConstraintNumber(int constraintNumber){
00947 if(constraintNumber < 0){
00948 return false;
00949 }
00950 if(optimization == NULL) optimization = new OptimizationResult();
00951 optimization->numberOfConstraints = constraintNumber;
00952 return true;
00953 }
00954
00955 bool OSResult::setSolutionNumber(int number){
00956
00957
00958
00959 if(number < 0) return false;
00960 if(number == 0) return true;
00961 if(optimization == NULL) optimization = new OptimizationResult();
00962 optimization->numberOfSolutions = number;
00963 optimization->solution = new OptimizationSolution*[number];
00964 for(int i = 0; i < number; i++){
00965 std::cout << "CREATING A NEW OPTIMIZATION SOLUTION" << std::endl;
00966 optimization->solution[i] = new OptimizationSolution();
00967 std::cout << "DONE CREATING A NEW OPTIMIZATION SOLUTION" << std::endl;
00968 }
00969 return true;
00970 }
00971
00972 bool OSResult::setSolutionStatus(int solIdx, string type, string description){
00973 int nSols = this->getSolutionNumber();
00974 if(optimization == NULL) return false;
00975 if(nSols <= 0) return false;
00976 if(optimization->solution == NULL ||
00977 solIdx < 0 || solIdx >= nSols) return false;
00978 if(optimization->solution[solIdx] == NULL){
00979 optimization->solution[solIdx] = new OptimizationSolution();
00980 }
00981 if(optimization->solution[solIdx]->status == NULL){
00982 optimization->solution[solIdx]->status = new OptimizationSolutionStatus();
00983 }
00984
00985 optimization->solution[solIdx]->status->type = type;
00986 optimization->solution[solIdx]->status->description = description;
00987 return true;
00988 }
00989
00990 bool OSResult::setSolutionObjectiveIndex(int solIdx, int objectiveIdx){
00991 int nSols = this->getSolutionNumber();
00992 if(optimization == NULL) return false;
00993 if(nSols <= 0) return false;
00994 if(optimization == NULL) return false;
00995 if(optimization->solution == NULL ||
00996 solIdx < 0 || solIdx >= nSols) return false;
00997 if(optimization->solution[solIdx] == NULL){
00998 optimization->solution[solIdx] = new OptimizationSolution();
00999 }
01000 if(objectiveIdx >= 0) return false;
01001 optimization->solution[solIdx]->targetObjectiveIdx = objectiveIdx;
01002 return true;
01003 }
01004
01005 bool OSResult::setNumberOfPrimalVariableValues(int solIdx, int numberOfVar){
01006 int nSols = this->getSolutionNumber();
01007 int nVar = this->getVariableNumber();
01008 if (numberOfVar <= 0 || numberOfVar > nVar) return false;
01009 if(optimization == NULL) return false;
01010 if(nSols <= 0) return false;
01011 if(optimization->solution == NULL ||
01012 solIdx < 0 || solIdx >= nSols) return false;
01013 if(optimization->solution[solIdx] == NULL){
01014 optimization->solution[solIdx] = new OptimizationSolution();
01015 }
01016 if(optimization->solution[solIdx]->variables == NULL){
01017 optimization->solution[solIdx]->variables = new VariableSolution();
01018 }
01019 if(optimization->solution[solIdx]->variables->values == NULL){
01020 optimization->solution[solIdx]->variables->values = new VariableValues();
01021 }
01022 optimization->solution[solIdx]->variables->values->numberOfVar = numberOfVar;
01023
01024
01025 return true;
01026 }
01027
01028 bool OSResult::setPrimalVariableValues(int solIdx, double *x, int numberOfVar){
01029 int nSols = this->getSolutionNumber();
01030 if(optimization == NULL) return false;
01031 if(nSols <= 0) return false;
01032 if(optimization->solution == NULL ||
01033 solIdx < 0 || solIdx >= nSols) return false;
01034 if(optimization->solution[solIdx] == NULL){
01035 optimization->solution[solIdx] = new OptimizationSolution();
01036 }
01037 if(optimization->solution[solIdx]->variables == NULL){
01038 optimization->solution[solIdx]->variables = new VariableSolution();
01039 }
01040 if(optimization->solution[solIdx]->variables->values == NULL){
01041 optimization->solution[solIdx]->variables->values = new VariableValues();
01042 }
01043 optimization->solution[solIdx]->variables->values->numberOfVar = numberOfVar;
01044 if(x == NULL){
01045
01046 return true;
01047 }
01048 for(int i = 0; i < numberOfVar; i++){
01049 optimization->solution[solIdx]->variables->values->var.push_back(new VarValue());
01050 optimization->solution[solIdx]->variables->values->var[i]->idx = i;
01051 optimization->solution[solIdx]->variables->values->var[i]->value = x[i];
01052 }
01053 return true;
01054 }
01055
01056 bool OSResult::setNumberOfOtherVariableResults(int solIdx, int numberOfOtherVariableResults){
01057 int iNumberOfVariables = this->getVariableNumber();
01058 if(iNumberOfVariables <= 0) return false;
01059 int nSols = this->getSolutionNumber();
01060 if(nSols <= 0) return false;
01061 if(optimization == NULL) return false;
01062 if(optimization->solution == NULL ||
01063 solIdx < 0 || solIdx >= nSols) return false;
01064 if(optimization->solution[solIdx] == NULL){
01065 optimization->solution[solIdx] = new OptimizationSolution();
01066 }
01067 if(optimization->solution[solIdx]->variables == NULL){
01068 optimization->solution[solIdx]->variables = new VariableSolution();
01069 }
01070 optimization->solution[solIdx]->variables->numberOfOtherVariableResults = numberOfOtherVariableResults;
01071 optimization->solution[solIdx]->variables->other = new OtherVariableResult*[ numberOfOtherVariableResults];
01072 for(int i = 0; i < numberOfOtherVariableResults; i++){
01073 optimization->solution[solIdx]->variables->other[ i] = new OtherVariableResult();
01074 }
01075 return true;
01076 }
01077
01078
01079
01080 bool OSResult::setAnOtherVariableResult(int solIdx, int otherIdx, string name, string description, int *indexes, string *s, int numberOfVar){
01081 int iNumberOfVariables = numberOfVar;
01082 if(iNumberOfVariables <= 0) return false;
01083 int nSols = this->getSolutionNumber();
01084 if(optimization == NULL) return false;
01085 if(nSols <= 0) return false;
01086 if(optimization == NULL) return false;
01087 if(optimization->solution == NULL ||
01088 solIdx < 0 || solIdx >= nSols) return false;
01089 if(optimization->solution[solIdx] == NULL) return false;
01090 if(optimization->solution[solIdx]->variables == NULL)return false;
01091 if(optimization->solution[solIdx]->variables->other == NULL) return false;
01092 if(optimization->solution[solIdx]->variables->other[ otherIdx] == NULL) return false;
01093 optimization->solution[solIdx]->variables->other[ otherIdx]->name = name;
01094 optimization->solution[solIdx]->variables->other[ otherIdx]->description = description;
01095 optimization->solution[solIdx]->variables->other[ otherIdx]->numberOfVar = numberOfVar;
01096 for(int i = 0; i < iNumberOfVariables; i++){
01097 optimization->solution[solIdx]->variables->other[ otherIdx]->var.push_back(new OtherVarResult());
01098 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i]->idx = indexes[ i];
01099 optimization->solution[solIdx]->variables->other[ otherIdx]->var[i]->value = s[i];
01100 ;
01101 }
01102 return true;
01103 }
01104
01105 bool OSResult::setNumberOfObjectiveValues(int solIdx, int numberOfObj){
01106 int nSols = this->getSolutionNumber();
01107 int nObj = this->getObjectiveNumber();
01108 if (numberOfObj <= 0 || numberOfObj > nObj) return false;
01109 if(optimization == NULL) return false;
01110 if(nSols <= 0) return false;
01111 if(optimization->solution == NULL ||
01112 solIdx < 0 || solIdx >= nSols) return false;
01113 if(optimization->solution[solIdx] == NULL){
01114 optimization->solution[solIdx] = new OptimizationSolution();
01115 }
01116 if(optimization->solution[solIdx]->objectives == NULL){
01117 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
01118 }
01119 if(optimization->solution[solIdx]->objectives->values == NULL){
01120 optimization->solution[solIdx]->objectives->values = new ObjectiveValues();
01121 }
01122 optimization->solution[solIdx]->objectives->values->numberOfObj = numberOfObj;
01123
01124
01125 return true;
01126 }
01127
01128
01129
01130 bool OSResult::setObjectiveValues(int solIdx, double *objectiveValues, int numberOfObj){
01131 int iNumberOfObjectives = numberOfObj;
01132 if(iNumberOfObjectives < 0) return false;
01133 if(iNumberOfObjectives == 0) return true;
01134 if(objectiveValues == NULL) return false;
01135 int nSols = this->getSolutionNumber();
01136 if(optimization == NULL) return false;
01137 if(nSols <= 0) return false;
01138 if(optimization == NULL) return false;
01139 if(optimization->solution == NULL ||
01140 solIdx < 0 || solIdx >= nSols) return false;
01141 if(optimization->solution[solIdx] == NULL){
01142 optimization->solution[solIdx] = new OptimizationSolution();
01143 }
01144 if(optimization->solution[solIdx]->objectives == NULL){
01145 optimization->solution[solIdx]->objectives = new ObjectiveSolution();
01146 }
01147 if(optimization->solution[solIdx]->objectives->values == NULL){
01148 optimization->solution[solIdx]->objectives->values = new ObjectiveValues();
01149 }
01150 optimization->solution[solIdx]->objectives->values->numberOfObj = iNumberOfObjectives;
01151 for(int i = 0; i < iNumberOfObjectives; i++){
01152 optimization->solution[solIdx]->objectives->values->obj.push_back( new ObjValue());
01153 optimization->solution[solIdx]->objectives->values->obj[i]->idx = -(i+1);
01154 optimization->solution[solIdx]->objectives->values->obj[i]->value = objectiveValues[i];
01155 }
01156 return true;
01157 }
01158
01159 bool OSResult::setNumberOfDualVariableValues(int solIdx, int numberOfCon){
01160 int nSols = this->getSolutionNumber();
01161 int nCon = this->getConstraintNumber();
01162 if (numberOfCon <= 0 || numberOfCon > nCon) return false;
01163 if(optimization == NULL) return false;
01164 if(nSols <= 0) return false;
01165 if(optimization->solution == NULL ||
01166 solIdx < 0 || solIdx >= nSols) return false;
01167 if(optimization->solution[solIdx] == NULL){
01168 optimization->solution[solIdx] = new OptimizationSolution();
01169 }
01170 if(optimization->solution[solIdx]->constraints == NULL){
01171 optimization->solution[solIdx]->constraints = new ConstraintSolution();
01172 }
01173 if(optimization->solution[solIdx]->constraints->values == NULL){
01174 optimization->solution[solIdx]->constraints->values = new DualVariableValues();
01175 }
01176 optimization->solution[solIdx]->constraints->values->numberOfCon = numberOfCon;
01177
01178
01179 return true;
01180 }
01181
01182
01183
01184 bool OSResult::setDualVariableValues(int solIdx, double *lbValues, double *ubValues, int numberOfCon){
01185 int iNumberOfConstraints = numberOfCon;
01186 if(iNumberOfConstraints < 0) return false;
01187 if(iNumberOfConstraints == 0) return true;
01188 int nSols = this->getSolutionNumber();
01189 if(optimization == NULL) return false;
01190 if(nSols <= 0) return false;
01191 if(optimization == NULL) return false;
01192 if(optimization->solution == NULL ||
01193 solIdx < 0 || solIdx >= nSols) return false;
01194 if(optimization->solution[solIdx] == NULL){
01195 optimization->solution[solIdx] = new OptimizationSolution();
01196 }
01197 if(optimization->solution[solIdx]->constraints == NULL){
01198 optimization->solution[solIdx]->constraints = new ConstraintSolution();
01199 }
01200 if(optimization->solution[solIdx]->constraints->dualValues == NULL){
01201 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
01202 }
01203 if(lbValues == NULL && ubValues == NULL){
01204
01205 return true;
01206 }
01207 int iCons = 0;
01208 if(lbValues == NULL){
01209 for(int i = 0; i < iNumberOfConstraints; i++){
01210 if(ubValues[i] != 0) iCons++;
01211 }
01212 }
01213 else if(ubValues == NULL){
01214 for(int i = 0; i < iNumberOfConstraints; i++){
01215 if(lbValues[i] != 0) iCons++;
01216 }
01217 }
01218 else{
01219 for(int i = 0; i < iNumberOfConstraints; i++){
01220 if(lbValues[i] != 0 || ubValues[i] != 0) iCons++;
01221 }
01222 }
01223
01224
01225 optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
01226 for(int i = 0; i < iCons; i++) optimization->solution[solIdx]->constraints->dualValues->con.push_back( new DualVarValue());
01227 int j = 0;
01228 if(lbValues == NULL){
01229 for(int i = 0; i < iNumberOfConstraints; i++){
01230 if(ubValues[i] != 0){
01231 optimization->solution[solIdx]->constraints->dualValues->con[j]->idx = i;
01232 optimization->solution[solIdx]->constraints->dualValues->con[j]->ubValue = 0;
01233 optimization->solution[solIdx]->constraints->dualValues->con[j]->ubValue = ubValues[i];
01234 j++;
01235 }
01236 }
01237 }
01238 else if(ubValues == NULL){
01239 for(int i = 0; i < iNumberOfConstraints; i++){
01240 if(lbValues[i] != 0){
01241 optimization->solution[solIdx]->constraints->dualValues->con[j]->idx = i;
01242 optimization->solution[solIdx]->constraints->dualValues->con[j]->lbValue = lbValues[i];
01243 optimization->solution[solIdx]->constraints->dualValues->con[j]->ubValue = 0;
01244 j++;
01245 }
01246 }
01247 }
01248 else{
01249 for(int i = 0; i < iNumberOfConstraints; i++){
01250 if(lbValues[i] != 0 || ubValues[i] != 0){
01251 optimization->solution[solIdx]->constraints->dualValues->con[j]->idx = i;
01252 optimization->solution[solIdx]->constraints->dualValues->con[j]->lbValue = lbValues[i];
01253 optimization->solution[solIdx]->constraints->dualValues->con[j]->ubValue = ubValues[i];
01254 j++;
01255 }
01256 }
01257 }
01258 return true;
01259 }
01260
01261 bool OSResult::setDualVariableValues(int solIdx, double *y, int numberOfCon){
01262 int iNumberOfConstraints = numberOfCon;
01263 if(iNumberOfConstraints < 0) return false;
01264 if(iNumberOfConstraints == 0) return true;
01265 int nSols = this->getSolutionNumber();
01266 if(optimization == NULL) return false;
01267 if(nSols <= 0) return false;
01268 if(optimization == NULL) return false;
01269 if(optimization->solution == NULL ||
01270 solIdx < 0 || solIdx >= nSols) return false;
01271 if(optimization->solution[solIdx] == NULL){
01272 optimization->solution[solIdx] = new OptimizationSolution();
01273 }
01274 if(optimization->solution[solIdx]->constraints == NULL){
01275 optimization->solution[solIdx]->constraints = new ConstraintSolution();
01276 }
01277 if(optimization->solution[solIdx]->constraints->dualValues == NULL){
01278 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
01279 }
01280 if(y == NULL){
01281 optimization->solution[solIdx]->constraints->dualValues = NULL;
01282 return true;
01283 }
01284 optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
01285 for(int i = 0; i < iNumberOfConstraints; i++){
01286 optimization->solution[solIdx]->constraints->dualValues->con.push_back( new DualVarValue());
01287 optimization->solution[solIdx]->constraints->dualValues->con[i]->idx = i;
01288 optimization->solution[solIdx]->constraints->dualValues->con[i]->value = y[i];
01289 }
01290 return true;
01291 }
01292
01293 bool OSResult::setConstraintValues(int solIdx, double *dualVarValues, int numberOfCon){
01294 int iNumberOfConstraints = numberOfCon;
01295 if(iNumberOfConstraints <= 0) return false;
01296 int nSols = this->getSolutionNumber();
01297 if(optimization == NULL) return false;
01298 if(nSols <= 0) return false;
01299 if(optimization == NULL) return false;
01300 if(optimization->solution == NULL ||
01301 solIdx < 0 || solIdx >= nSols) return false;
01302 if(optimization->solution[solIdx] == NULL){
01303 optimization->solution[solIdx] = new OptimizationSolution();
01304 }
01305 if(optimization->solution[solIdx]->constraints == NULL){
01306 optimization->solution[solIdx]->constraints = new ConstraintSolution();
01307 }
01308 if(optimization->solution[solIdx]->constraints->dualValues == NULL){
01309 optimization->solution[solIdx]->constraints->dualValues = new DualVariableValues();
01310 }
01311 if(dualVarValues == NULL){
01312 optimization->solution[solIdx]->constraints->dualValues = NULL;
01313 return true;
01314 }
01315
01316 optimization->solution[solIdx]->constraints->dualValues->numberOfCon = numberOfCon;
01317 for(int i = 0; i < iNumberOfConstraints; i++){
01318 optimization->solution[solIdx]->constraints->dualValues->con.push_back( new DualVarValue());
01319
01320 optimization->solution[solIdx]->constraints->dualValues->con[i]->idx = i;
01321 optimization->solution[solIdx]->constraints->dualValues->con[i]->value = dualVarValues[i];
01322 }
01323 return true;
01324 }
01325
01326