FLOPC++
|
00001 // ******************** FlopCpp ********************************************** 00002 // File: MP_variable.cpp 00003 // $Id$ 00004 // Author: Tim Helge Hultberg (thh@mat.ua.pt) 00005 // Copyright (C) 2003 Tim Helge Hultberg 00006 // All Rights Reserved. 00007 //**************************************************************************** 00008 00009 #include <iostream> 00010 #include <sstream> 00011 using std::cout; 00012 using std::endl; 00013 00014 #include <OsiSolverInterface.hpp> 00015 #include "MP_variable.hpp" 00016 #include "MP_domain.hpp" 00017 #include "MP_constant.hpp" 00018 #include "MP_model.hpp" 00019 using namespace flopc; 00020 00021 00022 MP_variable::MP_variable(const MP_set_base &s1, 00023 const MP_set_base &s2, 00024 const MP_set_base &s3, 00025 const MP_set_base &s4, 00026 const MP_set_base &s5) : 00027 RowMajor(s1.size(),s2.size(),s3.size(),s4.size(),s5.size()), 00028 upperLimit(s1,s2,s3,s4,s5), 00029 lowerLimit(s1,s2,s3,s4,s5), 00030 S1(&s1),S2(&s2),S3(&s3),S4(&s4),S5(&s5), 00031 offset(-1) 00032 { 00033 lowerLimit.initialize(0.0); 00034 upperLimit.initialize(MP_model::getDefaultModel().getInfinity()); 00035 type = continuous; 00036 } 00037 00038 double MP_variable::level(int lcl_i1, int lcl_i2, int lcl_i3, int lcl_i4, int lcl_i5) { 00039 return M->Solver->getColSolution()[offset + f(lcl_i1,lcl_i2,lcl_i3,lcl_i4,lcl_i5)]; 00040 } 00041 00042 void MP_variable::operator()() const { 00043 if (S1!=&MP_set::getEmpty()) cout << i1.evaluate() << " "; 00044 if (S2!=&MP_set::getEmpty()) cout << i2.evaluate() << " "; 00045 if (S3!=&MP_set::getEmpty()) cout << i3.evaluate() << " "; 00046 if (S4!=&MP_set::getEmpty()) cout << i4.evaluate() << " "; 00047 if (S5!=&MP_set::getEmpty()) cout << i5.evaluate() << " "; 00048 cout<<" "<< M->Solver->getColSolution()[offset + 00049 f(i1.evaluate(), 00050 i2.evaluate(), 00051 i3.evaluate(), 00052 i4.evaluate(), 00053 i5.evaluate())]<<endl; 00054 } 00055 00056 void MP_variable::display(const std::string &s) { 00057 cout<<s<<endl; 00058 if (offset >= 0) { 00059 ((*S1)(i1)*(*S2)(i2)*(*S3)(i3)*(*S4)(i4)*(*S5)(i5)).forall(this); 00060 } else { 00061 cout<<"No solution available!"<<endl; 00062 } 00063 }