source: trunk/Clp/examples/driverC.c @ 1559

Last change on this file since 1559 was 1559, checked in by stefan, 10 years ago

merge split branch into trunk

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 4.3 KB
Line 
1/* $Id: driverC.c 1559 2010-06-05 19:42:36Z stefan $ */
2/* Copyright (C) 2003 International Business Machines
3   Corporation and others.  All Rights Reserved. */
4
5/* This example shows the use of the "C" interface */
6
7#include "ClpConfig.h"
8#include "Clp_C_Interface.h"
9#include <stdio.h>
10#include <stdlib.h>
11#include <string.h>
12#include <assert.h>
13
14/* Call back function - just says whenever it gets Clp0005 or Coin0002 */
15static void callBack(Clp_Simplex * model, int messageNumber,
16                     int nDouble, const double * vDouble,
17                     int nInt, const int * vInt,
18                     int nString, char ** vString)
19{
20     if (messageNumber == 1000002) {
21          /* Coin0002 */
22          assert(nString == 1 && nInt == 3);
23          printf("Name of problem is %s\n", vString[0]);
24          printf("row %d col %d el %d\n", vInt[0], vInt[1], vInt[2]);
25     } else if (messageNumber == 5) {
26          /* Clp0005 */
27          int i;
28          assert(nInt == 4 && nDouble == 3);    /* they may not all print */
29          for (i = 0; i < 3; i++)
30               printf("%d %g\n", vInt[i], vDouble[i]);
31     }
32}
33
34
35
36int main(int argc, const char *argv[])
37{
38     /* Get default model */
39     Clp_Simplex  * model = Clp_newModel();
40     int status;
41     /* register callback */
42     Clp_registerCallBack(model, callBack);
43     /* Keep names when reading an mps file */
44     if (argc < 2) {
45#if defined(COIN_HAS_SAMPLE) && defined(SAMPLEDIR)
46          status = Clp_readMps(model, SAMPLEDIR "/p0033.mps", 1, 0);
47#else
48          fprintf(stderr, "Do not know where to find sample MPS files.\n");
49          exit(1);
50#endif
51     } else
52          status = Clp_readMps(model, argv[1], 1, 0);
53
54     if (status) {
55          fprintf(stderr, "Bad readMps %s\n", argv[1]);
56          fprintf(stdout, "Bad readMps %s\n", argv[1]);
57          exit(1);
58     }
59
60     if (argc < 3 || !strstr(argv[2], "primal")) {
61          /* Use the dual algorithm unless user said "primal" */
62          Clp_initialDualSolve(model);
63     } else {
64          Clp_initialPrimalSolve(model);
65     }
66
67     {
68          char modelName[80];
69          Clp_problemName(model, 80, modelName);
70          printf("Model %s has %d rows and %d columns\n",
71                 modelName, Clp_numberRows(model), Clp_numberColumns(model));
72     }
73
74     /* remove this to print solution */
75
76     /*exit(0); */
77
78     {
79          /*
80            Now to print out solution.  The methods used return modifiable
81            arrays while the alternative names return const pointers -
82            which is of course much more virtuous.
83
84            This version just does non-zero columns
85
86          */
87
88          /* Columns */
89
90          int numberColumns = Clp_numberColumns(model);
91          int iColumn;
92
93
94          /* Alternatively getColSolution(model) */
95          double * columnPrimal = Clp_primalColumnSolution(model);
96          /* Alternatively getReducedCost(model) */
97          double * columnDual = Clp_dualColumnSolution(model);
98          /* Alternatively getColLower(model) */
99          double * columnLower = Clp_columnLower(model);
100          /* Alternatively getColUpper(model) */
101          double * columnUpper = Clp_columnUpper(model);
102          /* Alternatively getObjCoefficients(model) */
103          double * columnObjective = Clp_objective(model);
104
105          printf("--------------------------------------\n");
106          /* If we have not kept names (parameter to readMps) this will be 0 */
107          assert(Clp_lengthNames(model));
108
109          printf("                       Primal          Dual         Lower         Upper          Cost\n");
110
111          for (iColumn = 0; iColumn < numberColumns; iColumn++) {
112               double value;
113               value = columnPrimal[iColumn];
114               if (value > 1.0e-8 || value < -1.0e-8) {
115                    char name[20];
116                    Clp_columnName(model, iColumn, name);
117                    printf("%6d %8s", iColumn, name);
118                    printf(" %13g", columnPrimal[iColumn]);
119                    printf(" %13g", columnDual[iColumn]);
120                    printf(" %13g", columnLower[iColumn]);
121                    printf(" %13g", columnUpper[iColumn]);
122                    printf(" %13g", columnObjective[iColumn]);
123                    printf("\n");
124               }
125          }
126          printf("--------------------------------------\n");
127     }
128     return 0;
129}
Note: See TracBrowser for help on using the repository browser.