00001
00002
00003
00004
00005
00006
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 }