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

Last change on this file since 1552 was 1552, checked in by mjs, 11 years ago

Format examples with 'astyle -A4 -p'.

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