source: trunk/CoinMP/examples/csharp/Coinmp.cs @ 377

Last change on this file since 377 was 377, checked in by bjarni, 11 years ago

Add new functions to Coinmp.cs

File size: 16.5 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Runtime.InteropServices;
5
6namespace Coin.CoinMP
7{
8    public class CoinMP
9    {
10        public const int SOLV_CALL_SUCCESS = 0;
11        public const int SOLV_CALL_FAILED = -1;
12
13        public const int SOLV_METHOD_DEFAULT = 0;
14
15        public const int SOLV_METHOD_PRIMAL = 0x1;
16        public const int SOLV_METHOD_DUAL = 0x2;
17        public const int SOLV_METHOD_NETWORK = 0x4;
18        public const int SOLV_METHOD_BARRIER = 0x8;
19
20        public const int SOLV_METHOD_BENDERS = 0x100;
21        public const int SOLV_METHOD_DEQ = 0x200;
22        public const int SOLV_METHOD_EV = 0x400;
23
24
25        public const int SOLV_FEATURE_LP = 0x1;
26        public const int SOLV_FEATURE_QP = 0x2;
27        public const int SOLV_FEATURE_QCP = 0x4;
28        public const int SOLV_FEATURE_NLP = 0x8;
29
30        public const int SOLV_FEATURE_MIP = 0x10;
31        public const int SOLV_FEATURE_MIQP = 0x20;
32        public const int SOLV_FEATURE_MIQCP = 0x40;
33        public const int SOLV_FEATURE_MINLP = 0x80;
34
35        public const int SOLV_FEATURE_SP = 0x10000;
36
37        public const int SOLV_OBJSENS_MAX = -1;
38        public const int SOLV_OBJSENS_MIN = 1;
39
40
41        public const int SOLV_FILE_LOG = 0;
42        public const int SOLV_FILE_BASIS = 1;
43        public const int SOLV_FILE_MIPSTART = 2;
44        public const int SOLV_FILE_MPS = 3;
45        public const int SOLV_FILE_LP = 4;
46        public const int SOLV_FILE_BINARY = 5;
47        public const int SOLV_FILE_OUTPUT = 6;
48        public const int SOLV_FILE_BINOUT = 7;
49        public const int SOLV_FILE_IIS = 8;
50
51        public const int SOLV_CHECK_COLCOUNT = 1;
52        public const int SOLV_CHECK_ROWCOUNT = 2;
53        public const int SOLV_CHECK_RANGECOUNT = 3;
54        public const int SOLV_CHECK_OBJSENSE = 4;
55        public const int SOLV_CHECK_ROWTYPE = 5;
56        public const int SOLV_CHECK_MATBEGIN = 6;
57        public const int SOLV_CHECK_MATCOUNT = 7;
58        public const int SOLV_CHECK_MATBEGCNT = 8;
59        public const int SOLV_CHECK_MATBEGNZ = 9;
60        public const int SOLV_CHECK_MATINDEX = 10;
61        public const int SOLV_CHECK_MATINDEXROW = 11;
62        public const int SOLV_CHECK_BOUNDS = 12;
63        public const int SOLV_CHECK_COLTYPE = 13;
64        public const int SOLV_CHECK_COLNAMES = 14;
65        public const int SOLV_CHECK_COLNAMESLEN = 15;
66        public const int SOLV_CHECK_ROWNAMES = 16;
67        public const int SOLV_CHECK_ROWNAMSLEN = 17;
68
69
70        private static string GenerateNamesBuf(string[] namesList)
71        {
72            int i;
73            StringBuilder namesBuf = new StringBuilder();
74
75            if (namesList.GetLength(0) > 0)
76            {
77                namesBuf.Append(namesList[0] + "\0");
78                for (i = 1; i < namesList.GetLength(0); i++)
79                {
80                    namesBuf.Append(namesList[i] + "\0");
81                }
82            }
83            return namesBuf.ToString();
84        }
85
86        public delegate int MsgLogDelegate(string messageStr);
87
88        public delegate int IterDelegate(int    iterCount,
89                                         double objectValue,
90                                         int    isFeasible,
91                                         double infeasValue);
92
93        public delegate int MipNodeDelegate(int    iterCount,
94                                            int    mipNodeCount,
95                                            double bestBound,
96                                            double bestInteger,
97                                            int    isMipImproved);
98
99        [DllImport("coinmp.dll")] public static extern int CoinInitSolver(string licenseStr);
100        [DllImport("coinmp.dll")] public static extern int CoinFreeSolver();
101
102        [DllImport("coinmp.dll")] public static extern string CoinGetSolverName();
103        [DllImport("coinmp.dll")] public static extern int CoinGetSolverNameBuf(StringBuilder solverName, int buflen);
104
105        [DllImport("coinmp.dll")] public static extern string CoinGetVersionStr();
106        [DllImport("coinmp.dll")] public static extern int CoinGetVersionStrBuf(StringBuilder versionStr, int buflen);
107        [DllImport("coinmp.dll")] public static extern double CoinGetVersion();
108
109        [DllImport("coinmp.dll")] public static extern int CoinGetFeatures();
110        [DllImport("coinmp.dll")] public static extern int CoinGetMethods();
111        [DllImport("coinmp.dll")] public static extern double CoinGetInfinity();
112
113        [DllImport("coinmp.dll")] public static extern IntPtr CoinCreateProblem(string problemName);
114
115        [DllImport("coinmp.dll")] public static extern int CoinLoadMatrix(IntPtr hProb, int colCount, int rowCount,
116                        int nzCount, int rangeCount, int objectSense, double objectConst, double[] objectCoeffs,
117                        double[] lowerBounds, double[] upperBounds, char[] rowType, double[] rhsValues,
118                        double[] rangeValues, int[] matrixBegin, int[] matrixCount, int[] matrixIndex,
119                        double[] matrixValues);
120
121        [DllImport("coinmp.dll")] public static extern int CoinLoadNamesBuf(IntPtr hProb, string colNamesBuf, 
122                        string rowNamesBuf, string objName);
123
124        public static int CoinLoadNames(IntPtr hProb, string[] colNames, string[] rowNames, string objName)
125        {
126            return CoinLoadNamesBuf(hProb, GenerateNamesBuf(colNames), GenerateNamesBuf(rowNames), objName);
127        }
128
129        [DllImport("coinmp.dll")] public static extern int CoinLoadProblemBuf(IntPtr hProb, int colCount, int rowCount,
130                        int nzCount, int rangeCount, int objectSense, double objectConst, double[] objectCoeffs,
131                        double[] lowerBounds, double[] upperBounds, char[] rowType, double[] rhsValues,
132                        double[] rangeValues, int[] matrixBegin, int[] matrixCount, int[] matrixIndex,
133                        double[] matrixValues, string colNamesBuf, string rowNamesBuf, string objName);
134
135        public static int CoinLoadProblem(IntPtr hProb, int colCount, int rowCount, int nzCount,
136                        int rangeCount, int objectSense, double objectConst, double[] objectCoeffs,
137                        double[] lowerBounds, double[] upperBounds, char[] rowType, double[] rhsValues,
138                        double[] rangeValues, int[] matrixBegin, int[] matrixCount, int[] matrixIndex,
139                        double[] matrixValues, string[] colNames, string[] rowNames, string objName)
140        {
141            return CoinLoadProblemBuf(hProb, colCount, rowCount, nzCount, rangeCount, objectSense, 
142                        objectConst, objectCoeffs, lowerBounds, upperBounds, rowType, rhsValues, 
143                        rangeValues, matrixBegin, matrixCount, matrixIndex, matrixValues,
144                        GenerateNamesBuf(colNames), GenerateNamesBuf(rowNames), objName);
145
146        }
147
148        // when there is no rowType argument, CoinLoadProblem switches to rowLower and rowUpper arguments
149        public static int CoinLoadProblem(IntPtr hProb, int colCount, int rowCount, int nzCount,
150                        int rangeCount, int objectSense, double objectConst, double[] objectCoeffs,
151                        double[] lowerBounds, double[] upperBounds, double[] rowLower, double[] rowUpper,
152                        int[] matrixBegin, int[] matrixCount, int[] matrixIndex, double[] matrixValues, 
153                        string[] colNames, string[] rowNames, string objName)
154        {
155            return CoinLoadProblemBuf(hProb, colCount, rowCount, nzCount, rangeCount, objectSense,
156                        objectConst, objectCoeffs, lowerBounds, upperBounds, null, rowLower,
157                        rowUpper, matrixBegin, matrixCount, matrixIndex, matrixValues,
158                        GenerateNamesBuf(colNames), GenerateNamesBuf(rowNames), objName);
159
160        }
161
162        [DllImport("coinmp.dll")] public static extern int CoinLoadInitValues(IntPtr hProb, double[] initValues);
163
164        [DllImport("coinmp.dll")] public static extern int CoinLoadInteger(IntPtr hProb, char[] columnType);
165
166
167        [DllImport("coinmp.dll")] public static extern int CoinLoadPriority(IntPtr hProb, int priorCount,
168                        int[] priorIndex, int[] priorValues, int[] PriorBranch);
169
170        [DllImport("coinmp.dll")] public static extern int CoinLoadSos(IntPtr hProb, int sosCount,
171                        int sosNZCount, int[] sosType, int[] sosPrior,
172                        int[] sosBegin, int[] sosIndex, double[] sosRef);
173
174        [DllImport("coinmp.dll")] public static extern int CoinLoadSemiCont(IntPtr hProb, int semiCount,
175                        int[] semiIndex);
176
177        [DllImport("coinmp.dll")] public static extern int CoinLoadQuadratic(IntPtr hProb, int[] quadBegin,
178                        int[] quadCount, int[] quadIndex, double[] quadValues);
179
180        [DllImport("coinmp.dll")] public static extern int CoinLoadNonlinear(IntPtr hProb, int nlpTreeCount,
181                        int nlpLineCount, int[] nlpBegin, int[] nlpOper,
182                        int[] nlpArg1, int[] nlpArg2, int[] nlpIndex1,
183                        int[] nlpIndex2, double[] nlpValue1, double[] nlpValue2);
184
185        [DllImport("coinmp.dll")] public static extern int CoinUnloadProblem(IntPtr hProb);
186
187        [DllImport("coinmp.dll")] public static extern int CoinCheckProblem(IntPtr hProb);
188
189        [DllImport("coinmp.dll")] public static extern string CoinGetProblemName(IntPtr hProb);
190        [DllImport("coinmp.dll")] public static extern int CoinGetProblemNameBuf(IntPtr hProb,
191                        StringBuilder problemName, int buflen);
192
193        [DllImport("coinmp.dll")] public static extern int CoinGetColCount(IntPtr hProb);
194        [DllImport("coinmp.dll")] public static extern int CoinGetRowCount(IntPtr hProb);
195
196        [DllImport("coinmp.dll")] public static extern string CoinGetColName(IntPtr hProb, int col);
197        [DllImport("coinmp.dll")] public static extern int CoinGetColNameBuf(IntPtr hProb, int col,
198                        StringBuilder colName, int buflen);
199
200        [DllImport("coinmp.dll")] public static extern string CoinGetRowName(IntPtr hProb, int row);
201        [DllImport("coinmp.dll")] public static extern int CoinGetRowNameBuf(IntPtr hProb, int row,
202                        StringBuilder rowName, int buflen);
203
204        [DllImport("coinmp.dll")] public static extern int CoinSetMsgLogCallback(IntPtr hProb, MsgLogDelegate msgLogDelegate);
205        [DllImport("coinmp.dll")] public static extern int CoinSetIterCallback(IntPtr hProb, IterDelegate iterDelegate);
206        [DllImport("coinmp.dll")] public static extern int CoinSetMipNodeCallback(IntPtr hProb, MipNodeDelegate mipNodeDelegate);
207
208        [DllImport("coinmp.dll")] public static extern int CoinOptimizeProblem(IntPtr hProb, int method);
209
210        public static int CoinOptimizeProblem(IntPtr hProb)
211        {
212            return CoinOptimizeProblem(hProb, SOLV_METHOD_DEFAULT);
213        }
214
215        [DllImport("coinmp.dll")] public static extern int CoinGetSolutionStatus(IntPtr hProb);
216
217        [DllImport("coinmp.dll")] public static extern string CoinGetSolutionText(IntPtr hProbs);
218        [DllImport("coinmp.dll")] public static extern int CoinGetSolutionTextBuf(IntPtr hProbs,
219                        StringBuilder solutionText, int buflen);
220
221        [DllImport("coinmp.dll")] public static extern double CoinGetObjectValue(IntPtr hProb);
222        [DllImport("coinmp.dll")] public static extern double CoinGetMipBestBound(IntPtr hProb);
223
224        [DllImport("coinmp.dll")] public static extern int CoinGetIterCount(IntPtr hProb);
225        [DllImport("coinmp.dll")] public static extern int CoinGetMipNodeCount(IntPtr hProb);
226
227        [DllImport("coinmp.dll")] public static extern int CoinGetSolutionValues(IntPtr hProb, [In, Out] double[] activity,
228                        [In, Out] double[] reducedCost, [In, Out] double[] slackValues, [In, Out] double[] shadowPrice);
229
230        [DllImport("coinmp.dll")] public static extern int CoinGetSolutionRanges(IntPtr hProb, [In, Out] double[] objLoRange,
231                        [In, Out] double[] objUpRange, [In, Out] double[] rhsLoRange, [In, Out] double[] rhsUpRange);
232
233        [DllImport("coinmp.dll")] public static extern int CoinGetSolutionBasis(IntPtr hProb, [In, Out] int[] colStatus,
234                        [In, Out] double[] rowStatus);
235
236        [DllImport("coinmp.dll")] public static extern int CoinReadFile(IntPtr hProb, int fileType, string readFilename);
237        [DllImport("coinmp.dll")] public static extern int CoinWriteFile(IntPtr hProb, int fileType, string writeFilename);
238
239
240        [DllImport("coinmp.dll")] public static extern int CoinOpenLogFile(IntPtr hProb, string logFilename);
241        [DllImport("coinmp.dll")] public static extern int CoinCloseLogFile(IntPtr hProb);
242
243
244        [DllImport("coinmp.dll")] public static extern int CoinGetOptionCount(IntPtr hProb);
245        [DllImport("coinmp.dll")] public static extern int CoinLocateOptionID(IntPtr hProb, int optionID);
246        [DllImport("coinmp.dll")] public static extern int CoinLocateOptionName(IntPtr hProb, string optionName);
247
248        [DllImport("coinmp.dll")] public static extern int CoinGetOptionID(IntPtr hProb, int optionNr);
249        [DllImport("coinmp.dll")] public static extern int CoinGetOptionInfo(IntPtr hProb, int optionNr, 
250                        [In, Out] int[] optionID, [In, Out] int[] groupType, [In, Out] int[] optionType);
251        [DllImport("coinmp.dll")] public static extern int CoinGetIntOptionMinMax(IntPtr hProb, int optionNr,
252                        [In, Out] int[] minValue, [In, Out] int[] maxValue);
253        [DllImport("coinmp.dll")] public static extern int CoinGetRealOptionMinMax(IntPtr hProb, int optionNr,
254                        [In, Out] double[] minValue, [In, Out] double[] maxValue);
255        [DllImport("coinmp.dll")] public static extern int CoinGetOptionNamesBuf(IntPtr hProb, int optionNr,
256                        StringBuilder optionName, StringBuilder shortName, int buflen);
257
258
259        [DllImport("coinmp.dll")] public static extern int CoinGetOptionGroup(IntPtr hProb, int optionID);
260        [DllImport("coinmp.dll")] public static extern int CoinGetOptionType(IntPtr hProb, int optionID);
261
262        [DllImport("coinmp.dll")] public static extern int CoinGetIntOptionDefaultValue(IntPtr hProb, int optionID);
263        [DllImport("coinmp.dll")] public static extern int CoinGetIntOptionMinValue(IntPtr hProb, int optionID);
264        [DllImport("coinmp.dll")] public static extern int CoinGetIntOptionMaxValue(IntPtr hProb, int optionID);
265
266        [DllImport("coinmp.dll")] public static extern double CoinGetRealOptionDefaultValue(IntPtr hProb, int optionID);
267        [DllImport("coinmp.dll")] public static extern double CoinGetRealOptionMinValue(IntPtr hProb, int optionID);
268        [DllImport("coinmp.dll")] public static extern double CoinGetRealOptionMaxValue(IntPtr hProb, int optionID);
269
270
271        [DllImport("coinmp.dll")] public static extern string CoinGetOptionName(IntPtr hProb, int optionID);
272        [DllImport("coinmp.dll")] public static extern int CoinGetOptionNameBuf(IntPtr hProb, int optionID,
273                        StringBuilder optionName, int buflen);
274
275        [DllImport("coinmp.dll")] public static extern string CoinGetOptionShortName(IntPtr hProb, int optionID);
276        [DllImport("coinmp.dll")] public static extern int CoinGetOptionShortNameBuf(IntPtr hProb, int optionID,
277                        StringBuilder shortName, int buflen);
278
279        [DllImport("coinmp.dll")] public static extern int CoinGetOptionChanged(IntPtr hProb, int optionID);
280
281        [DllImport("coinmp.dll")] public static extern int CoinGetIntOption(IntPtr hProb, int optionID);
282        [DllImport("coinmp.dll")] public static extern int CoinSetIntOption(IntPtr hProb, int optionID, int intValue);
283
284        [DllImport("coinmp.dll")] public static extern int CoinGetRealOption(IntPtr hProb, int optionID);
285        [DllImport("coinmp.dll")] public static extern int CoinSetRealOption(IntPtr hProb, int optionID, double realValue);
286
287        [DllImport("coinmp.dll")] public static extern string CoinGetStringOption(IntPtr hProb, int optionID);
288        [DllImport("coinmp.dll")] public static extern int CoinGetStringOptionBuf(IntPtr hProb, int optionID,
289                        StringBuilder stringValue, int buflen);
290        [DllImport("coinmp.dll")] public static extern int CoinSetStringOption(IntPtr hProb, int optionID,
291                        string stringValue);
292    }
293}
Note: See TracBrowser for help on using the repository browser.