13 #include "OsiSolverInterface.hpp"
15 #include "CoinPackedVector.hpp"
16 #include "CoinPackedMatrix.hpp"
17 #include "CoinHelperFunctions.hpp"
24 using namespace Ipopt;
25 using namespace Couenne;
28 void CouenneDisjCuts::OsiSI2MatrVec (CoinPackedMatrix &M,
30 OsiSolverInterface &si)
const {
33 const CoinPackedMatrix *A = si.getMatrixByRow ();
36 nrows = A -> getMajorDim (),
37 ncols = A -> getMinorDim (),
38 nel = A -> getNumElements ();
40 const char *sen = si.getRowSense ();
43 *rac = si.getRowActivity (),
44 *
x = si.getColSolution (),
45 *rlb = si.getRowLower (),
46 *rub = si.getRowUpper (),
47 *clb = si.getColLower (),
48 *cub = si.getColUpper (),
49 *el = A -> getElements ();
52 *len = A -> getVectorLengths (),
53 *start = A -> getVectorStarts (),
54 *ind = A -> getIndices ();
61 for (
int i=0; i<nrows; i++, sen++, len++)
71 double *mEl =
new double [nel + ndupEl + 2*ncols];
73 r.reserve (nrows + ndupRows + 2*ncols + 1);
79 *mIn =
new int [nel + ndupEl + 2*ncols],
80 *mSt =
new int [nrows + ndupRows + 2*ncols + 1],
81 *mLe =
new int [nrows + ndupRows + 2*ncols];
84 if (jnlst_ -> ProduceOutput (J_MATRIX,
J_DISJCUTS)) {
85 printf (
"matrix A (%d %d) %d elements:\n", nrows, ncols, nel);
87 printf (
"start: ");
for (
int i=0; i <= nrows; i++) printf (
"%d ", start [i]);
88 printf (
"\nlen: ");
for (
int i=0; i < nrows; i++) printf (
"%d ", len [i]);
90 printf (
"\nElements:\n");
91 for (
int i=0,
j=0; i<nrows; i++) {
92 for (
int k=0;
k<start [i+1] - start [i];
k++,
j++)
93 printf (
"(%d %g) ", ind [
j], el [j]);
94 printf (
" in [%g,%g]\n", rlb [i], rub [i]);
109 for (
int i=0; i<nrows; i++, rac++, rlb++, rub++, sen++, start++, curA += *len++) {
119 CoinCopyN (ind + curA, *len, mIn + curM);
120 CoinCopyN (el + curA, *len, mEl + curM);
122 if (*rub != 0.) r.insert (mRows, *rub);
129 CoinCopyN (ind + curA, *len, mIn + curM);
130 CoinInvN (el + curA, *len, mEl + curM);
132 if (*rlb != 0.) r.insert (mRows, -*rlb);
139 for (
int i=0; i<ncols; i++,
x++, clb++, cub++) {
144 (couenneCG_ -> Problem () -> Var (i) -> Multiplicity () <= 0))
152 if (*clb != 0.) r.insert (mRows, -*clb);
161 if (*cub != 0.) r.insert (mRows, *cub);
171 if (jnlst_ -> ProduceOutput (J_MATRIX,
J_DISJCUTS)) {
172 printf (
"matrix (%d %d) %d elements:\n", mRows, ncols, curM);
174 printf (
"start: ");
for (
int i=0; i<=mRows; i++) printf (
"%d ", mSt [i]);
175 printf (
"\nlen: ");
for (
int i=0; i<mRows; i++) printf (
"%d ", mLe [i]);
177 printf (
"\nElements:\n");
178 for (
int i=0,
j=0; i<mRows; i++) {
179 for (
int k=0;
k<mSt[i+1] - mSt[i];
k++,
j++)
180 printf (
"(%d %g) ", mIn [
j], mEl [j]);
184 printf (
"vector:\n");
185 for (
int i=0; i<r.getNumElements (); i++)
186 printf (
"(%d %g) ", r.getIndices () [i], r.getElements () [i]);
190 M.assignMatrix (
true,
void CoinInvN(register const double *orig, register int n, register double *inverted)
invert all contents
const Ipopt::EJournalCategory J_DISJCUTS(Ipopt::J_USER6)
void fint fint fint real fint real real real real real real real * r
void fint fint fint real fint real * x