36 Real SPxSolver::provedBound(Vector& dualsol,
const Vector& objvec)
const
38 DVector lhsvec(
dim());
39 DVector rhsvec(
dim());
56 for(
int i = 0; i <
dim(); ++i )
60 if( sen * dualsol[i] > eps )
62 else if( sen * dualsol[i] < -eps )
67 Easyval y(dualsol[i]);
71 <<
", lhs[" << i <<
"] = " << lhsvec[i]
72 <<
", rhs[" << i <<
"] = " << rhsvec[i]
73 <<
" -> ytb = " << ytb << std::endl; )
78 for(
int j = 0; j <
coDim(); ++j )
84 SVector colvec = col.colVector();
85 Easyval diff = objvec[j];
87 <<
" -> diff = " << diff << std::endl; )
89 for(
int i = 0; i < colvec.size(); ++i )
91 Easyval y(dualsol[colvec.index(i)]);
92 Easyval a(colvec.value(i));
95 << dualsol[colvec.index(i)]
96 <<
", a[" << colvec.index(i) <<
"] = "
98 <<
" -> diff = " << diff << std::endl; )
104 <<
" -> diff = " << diff << std::endl
105 <<
" ------------> scalprod = "
106 << scalprod << std::endl; )
111 MSG_INFO1(
spxout <<
"IPROOF01 proved bound = " << scalprod << std::endl; );
115 return scalprod.getInf();
117 return scalprod.getSup();
120 Real SPxSolver::provedDualbound()
const
122 DVector dualsol(
dim());
123 DVector objvec(
coDim());
128 return provedBound(dualsol, objvec);
131 bool SPxSolver::isProvenInfeasible()
const
133 DVector dualfarkas(
dim());
134 DVector zerovec(
coDim());
139 return (provedBound(dualfarkas, zerovec) > 0.0);
144 #endif // WITH_EASYVAL