/usr/share/doc/coinor-libsymphony-doc/examples/milpOsi2.c is in coinor-libsymphony-doc 5.2.4-1.2ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | /*===========================================================================*/
/* */
/* This file is part of the SYMPHONY MILP Solver Framework. */
/* */
/* SYMPHONY was jointly developed by Ted Ralphs (ted@lehigh.edu) and */
/* Laci Ladanyi (ladanyi@us.ibm.com). */
/* */
/* The author of this file is Menal Guzelsoy */
/* */
/* (c) Copyright 2005-2008 Lehigh University. All Rights Reserved. */
/* */
/* This software is licensed under the Common Public License. Please see */
/* accompanying file for terms. */
/* */
/*===========================================================================*/
#include "OsiSymSolverInterface.hpp"
#include <iostream>
int main(int argc, char **argv)
{
/* This example shows how to do some simple stuff with the Osi interface */
/* Create an OsiSym object */
OsiSymSolverInterface si;
/* Parse the command line */
si.parseCommandLine(argc, argv);
/* Read in the problem */
si.loadProblem();
int numberofrowstodrop(0);
int numberofcolstodrop(0);
int *rowsToDrop(new int[1000]);
int *colsToDrop(new int[1000]);
double eps = .0000001;
int i, j;
/* Find empty rows */
const double *rhs(si.getRightHandSide());
const double *obj(si.getObjCoefficients());
const CoinPackedMatrix *mat(si.getMatrixByCol());
int numrows = si.getNumRows();
int numcols = si.getNumCols();
for (i = 0; i < numrows; i++) {
if (fabs(rhs[i]) > eps)
continue;
for (j = 0; j < numcols; j++)
if (fabs(mat->getCoefficient(i,j)) > eps ){
break;
}
if (j == numcols){
cout << "Dropping row " << i << endl;
rowsToDrop[numberofrowstodrop++] = i;
}
}
/* Find empty columns */
for (i = 0; i < numcols; i++) {
if (fabs(obj[i]) > eps)
continue;
for (j = 0; j < numrows; j++)
if (fabs(mat->getCoefficient(j,i)) > eps ){
break;
}
if (j == numcols){
cout << "Dropping column " << i << endl;
rowsToDrop[numberofrowstodrop++] = i;
}
}
si.deleteRows(numberofrowstodrop, rowsToDrop);
si.deleteCols(numberofcolstodrop, colsToDrop);
/* Solve the problem */
si.branchAndBound();
return(0);
}
|