source: trunk/Clp/examples/driverC.c

Last change on this file was 1662, checked in by lou, 8 years ago

Add EPL license notice in examples.

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