15 #include <CoinPackedMatrix.hpp>
16 #include <OsiSolverInterface.hpp>
20 #include <CoinTime.hpp>
22 using namespace flopc;
30 cout<<
"FlopCpp: Number of constraint blocks: " <<bm<<endl;
31 cout<<
"FlopCpp: Number of individual constraints: " <<m<<endl;
32 cout<<
"FlopCpp: Number of variable blocks: " <<bn<<endl;
33 cout<<
"FlopCpp: Number of individual variables: " <<n<<endl;
34 cout<<
"FlopCpp: Number of non-zeroes (including rhs): " <<nz<<endl;
38 cout<<
"FlopCpp: Generation time: "<<t<<endl;
42 cout<<
"FlopCpp: Constraint "<<name<<endl;
43 for (
unsigned int j=0; j<cfs.size(); j++) {
46 double elm=cfs[j].val;
47 int stage=cfs[j].stage;
48 cout<<row<<
" "<<col<<
" "<<elm<<
" "<<stage<<endl;
53 cout<<
"Objective "<<endl;
54 for (
unsigned int j=0; j<cfs.size(); j++) {
57 double elm=cfs[j].val;
58 cout<<row<<
" "<<col<<
" "<<elm<<endl;
63 messenger(m), Objective(0), Solver(s),
64 m(0), n(0), nz(0), bl(0),
86 m += constraint->
size();
94 return Solver->getInfinity();
105 vector<MP::Coef> cfs;
110 CoinPackedVector newRow;
112 for (
unsigned int j=0; j<cfs.size(); j++) {
115 double elm=cfs[j].val;
118 newRow.insert(col,elm);
119 }
else if (col==-1) {
125 double local_bl = -rhs;
126 double local_bu = -rhs;
128 double inf =
Solver->getInfinity();
129 switch (constraint->sense) {
141 Solver->addRow(newRow,local_bl,local_bu);
152 constraint(s) = v() >= obj;
161 std::vector<MP::Coef>::const_iterator i = v.begin();
168 while (i!=v.end() && c==i->col && r==i->row) {
184 cout<<
"no solver specified"<<endl;
194 cout<<
"no solver specified"<<endl;
203 cout<<
"no solver specified"<<endl;
213 cout<<
"no solver specified"<<endl;
229 double time = CoinCpuTime();
232 vector<MP::Coef> coefs;
233 vector<MP::Coef> cfs;
235 typedef std::set<MP_variable* >::iterator
varIt;
236 typedef std::set<MP_constraint* >::iterator
conIt;
249 (*i)->coefficients(cfs);
252 cfs.erase(cfs.begin(),cfs.end());
259 Elm =
new double[
nz];
273 const double inf =
Solver->getInfinity();
275 for (
int j=0; j<
n; j++) {
281 for (
int j=0; j<=
n; j++) {
284 for (
int i=0; i<
nz; i++) {
285 int col = coefs[i].col;
292 for (
int j=0; j<=
n; j++) {
295 for (
int i=0; i<=
n; i++) {
298 for (
int i=0; i<
nz; i++) {
299 int col = coefs[i].col;
303 int row = coefs[i].row;
304 double elm = coefs[i].val;
306 Rnr[
Cst[col]+Clg[col]] = row;
311 for (
int i=0; i<
m; i++) {
315 for (
int j=
Cst[n]; j<
Cst[n+1]; j++) {
317 bu[Rnr[j]] = -
Elm[j];
321 if ((*i)->left.isDefined() && (*i)->right.isDefined() ) {
322 int begin = (*i)->offset;
323 int end = (*i)->offset+(*i)->size();
324 switch ((*i)->sense) {
326 for (
int k=begin; k<end; k++) {
331 for (
int k=begin; k<end; k++) {
345 coefs.erase(coefs.begin(),coefs.end());
351 for (
int j=0; j<
n; j++) {
354 for (
size_t i=0; i<coefs.size(); i++) {
355 int col = coefs[i].col;
356 double elm = coefs[i].val;
361 for (
int j=0; j<
n; j++) {
367 for (
int k=0; k<(*i)->size(); k++) {
368 l[(*i)->offset+k] = (*i)->lowerLimit.v[k];
369 u[(*i)->offset+k] = (*i)->upperLimit.v[k];
392 int begin = (*i)->offset;
393 int end = (*i)->offset+(*i)->size();
395 for (
int k=begin; k<end; k++) {
426 }
catch (CoinError e) {
427 cout<<e.message()<<endl;
428 cout<<
"Solving the LP relaxation instead."<<endl;
431 }
catch (CoinError e) {
432 cout<<e.message()<<endl;
438 }
catch (CoinError e) {
439 cout<<e.message()<<endl;
443 if (
Solver->isProvenOptimal() ==
true) {
444 cout<<
"FlopCpp: Optimal obj. value = "<<
Solver->getObjValue()<<endl;
445 cout<<
"FlopCpp: Solver(m, n, nz) = "<<
Solver->getNumRows()<<
" "<<
446 Solver->getNumCols()<<
" "<<
Solver->getNumElements()<<endl;
447 }
else if (
Solver->isProvenPrimalInfeasible() ==
true) {
449 cout<<
"FlopCpp: Problem is primal infeasible."<<endl;
450 }
else if (
Solver->isProvenDualInfeasible() ==
true) {
452 cout<<
"FlopCpp: Problem is dual infeasible."<<endl;
455 cout<<
"FlopCpp: Solution process abandoned."<<endl;
468 os<<
"PRIMAL_INFEASIBLE";
471 os<<
"DUAL_INFEASIBLE";