1 | function solver = definesolvers |
---|
2 | |
---|
3 | % **************************** |
---|
4 | % Create a default solver |
---|
5 | % **************************** |
---|
6 | emptysolver.tag = ''; |
---|
7 | emptysolver.version = ''; |
---|
8 | emptysolver.checkfor= {''}; |
---|
9 | emptysolver.testcode= {''}; |
---|
10 | emptysolver.call = ''; |
---|
11 | emptysolver.subcall = ''; |
---|
12 | emptysolver.show = 1; |
---|
13 | |
---|
14 | emptysolver.objective.linear = 0; |
---|
15 | emptysolver.objective.quadratic.convex = 0; |
---|
16 | emptysolver.objective.quadratic.nonconvex = 0; |
---|
17 | emptysolver.objective.polynomial = 0; |
---|
18 | emptysolver.objective.maxdet = 0; |
---|
19 | emptysolver.objective.sigmonial = 0; |
---|
20 | |
---|
21 | emptysolver.constraint.equalities.linear = 0; |
---|
22 | emptysolver.constraint.equalities.quadratic = 0; |
---|
23 | emptysolver.constraint.equalities.polynomial = 0; |
---|
24 | emptysolver.constraint.equalities.sigmonial = 0; |
---|
25 | |
---|
26 | emptysolver.constraint.inequalities.elementwise.linear = 0; |
---|
27 | emptysolver.constraint.inequalities.elementwise.quadratic.convex = 0; |
---|
28 | emptysolver.constraint.inequalities.elementwise.quadratic.nonconvex = 0; |
---|
29 | emptysolver.constraint.inequalities.elementwise.polynomial = 0; |
---|
30 | emptysolver.constraint.inequalities.elementwise.sigmonial = 0; |
---|
31 | |
---|
32 | emptysolver.constraint.inequalities.semidefinite.linear = 0; |
---|
33 | emptysolver.constraint.inequalities.semidefinite.quadratic = 0; |
---|
34 | emptysolver.constraint.inequalities.semidefinite.polynomial = 0; |
---|
35 | emptysolver.constraint.inequalities.semidefinite.sigmonial = 0; |
---|
36 | emptysolver.constraint.inequalities.rank = 0; |
---|
37 | |
---|
38 | emptysolver.constraint.inequalities.secondordercone = 0; |
---|
39 | emptysolver.constraint.inequalities.rotatedsecondordercone = 0; |
---|
40 | |
---|
41 | emptysolver.constraint.integer = 0; |
---|
42 | emptysolver.constraint.binary = 0; |
---|
43 | |
---|
44 | emptysolver.dual = 0; |
---|
45 | emptysolver.complex = 0; |
---|
46 | emptysolver.parametric = 0; |
---|
47 | emptysolver.evaluation = 0; |
---|
48 | emptysolver.uncertain = 0; |
---|
49 | |
---|
50 | |
---|
51 | % ************************************** |
---|
52 | % Some standard solvers to simplify code |
---|
53 | % ************************************** |
---|
54 | |
---|
55 | % LP solver |
---|
56 | lpsolver = emptysolver; |
---|
57 | lpsolver.objective.linear = 1; |
---|
58 | lpsolver.constraint.equalities.linear = 1; |
---|
59 | lpsolver.constraint.inequalities.elementwise.linear = 1; |
---|
60 | lpsolver.dual = 1; |
---|
61 | |
---|
62 | % QP solver |
---|
63 | qpsolver = emptysolver; |
---|
64 | qpsolver.objective.linear = 1; |
---|
65 | qpsolver.objective.quadratic.convex = 1; |
---|
66 | qpsolver.constraint.equalities.linear = 1; |
---|
67 | qpsolver.constraint.inequalities.elementwise.linear = 1; |
---|
68 | qpsolver.dual = 1; |
---|
69 | |
---|
70 | % SDP solver |
---|
71 | sdpsolver = emptysolver; |
---|
72 | sdpsolver.objective.linear = 1; |
---|
73 | sdpsolver.constraint.equalities.linear = 1; |
---|
74 | sdpsolver.constraint.inequalities.elementwise.linear = 1; |
---|
75 | sdpsolver.constraint.inequalities.semidefinite.linear = 1; |
---|
76 | sdpsolver.dual = 1; |
---|
77 | |
---|
78 | % **************************** |
---|
79 | % INITIALIZE COUNTER |
---|
80 | % **************************** |
---|
81 | i = 1; |
---|
82 | |
---|
83 | % **************************** |
---|
84 | % DEFINE SOLVERS |
---|
85 | % **************************** |
---|
86 | |
---|
87 | solver(i) = qpsolver; |
---|
88 | solver(i).tag = 'CPLEX'; |
---|
89 | solver(i).version = 'CPLEXINT'; |
---|
90 | solver(i).checkfor= {'cplexint'}; |
---|
91 | solver(i).call = 'callcplexint'; |
---|
92 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
93 | solver(i).constraint.integer = 1; |
---|
94 | solver(i).constraint.binary = 1; |
---|
95 | i = i+1; |
---|
96 | |
---|
97 | solver(i) = lpsolver; |
---|
98 | solver(i).tag = 'GLPK'; |
---|
99 | solver(i).version = 'GLPKMEX'; |
---|
100 | solver(i).checkfor= {'glpkmex.m'}; |
---|
101 | solver(i).call = 'callglpk'; |
---|
102 | solver(i).constraint.integer = 1; |
---|
103 | i = i+1; |
---|
104 | |
---|
105 | solver(i) = lpsolver; |
---|
106 | solver(i).tag = 'CDD'; |
---|
107 | solver(i).version = 'CDDMEX'; |
---|
108 | solver(i).checkfor= {'cddmex'}; |
---|
109 | solver(i).call = 'callcdd'; |
---|
110 | i = i+1; |
---|
111 | |
---|
112 | solver(i) = lpsolver; |
---|
113 | solver(i).tag = 'NAG'; |
---|
114 | solver(i).version = 'e04mbf'; |
---|
115 | solver(i).checkfor= {'e04mbf'}; |
---|
116 | solver(i).call = 'callnage04mbf'; |
---|
117 | i = i+1; |
---|
118 | |
---|
119 | solver(i) = qpsolver; |
---|
120 | solver(i).tag = 'NAG'; |
---|
121 | solver(i).version = 'e04naf'; |
---|
122 | solver(i).checkfor= {'e04naf'}; |
---|
123 | solver(i).call = 'callnage04naf'; |
---|
124 | i = i+1; |
---|
125 | |
---|
126 | solver(i) = lpsolver; |
---|
127 | solver(i).tag = 'CLP'; |
---|
128 | solver(i).version = 'CLPMEX-LP'; |
---|
129 | solver(i).checkfor= {'mexclp'}; |
---|
130 | solver(i).call = 'callclp'; |
---|
131 | %solver(i).constraint.integer = 1; |
---|
132 | i = i+1; |
---|
133 | |
---|
134 | solver(i) = qpsolver; |
---|
135 | solver(i).tag = 'XPRESS'; |
---|
136 | solver(i).version = 'MEXPRESS 1.1'; |
---|
137 | solver(i).checkfor= {'xpress.m'}; |
---|
138 | solver(i).call = 'callmexpress11'; |
---|
139 | solver(i).constraint.integer = 1; |
---|
140 | solver(i).constraint.binary = 1; |
---|
141 | i = i+1; |
---|
142 | |
---|
143 | solver(i) = qpsolver; |
---|
144 | solver(i).tag = 'XPRESS'; |
---|
145 | solver(i).version = 'MEXPRESS 1.0'; |
---|
146 | solver(i).checkfor= {'mexpress.m'}; |
---|
147 | solver(i).call = 'callmexpress'; |
---|
148 | solver(i).constraint.integer = 1; |
---|
149 | solver(i).constraint.binary = 1; |
---|
150 | i = i+1; |
---|
151 | |
---|
152 | solver(i) = lpsolver; |
---|
153 | solver(i).tag = 'QSOPT'; |
---|
154 | solver(i).version = 'MEXQSOPT'; |
---|
155 | solver(i).checkfor= {'qsopt.m'}; |
---|
156 | solver(i).call = 'callqsopt'; |
---|
157 | i = i+1; |
---|
158 | |
---|
159 | solver(i) = lpsolver; |
---|
160 | solver(i).tag = 'LPSOLVE'; |
---|
161 | solver(i).version = 'MXLPSOLVE'; |
---|
162 | solver(i).checkfor= {'lp_solve.m'}; |
---|
163 | solver(i).call = 'calllpsolve'; |
---|
164 | solver(i).constraint.integer = 1; |
---|
165 | i = i+1; |
---|
166 | |
---|
167 | solver(i) = qpsolver; |
---|
168 | solver(i).tag = 'MOSEK'; |
---|
169 | solver(i).version = 'LP/QP'; |
---|
170 | solver(i).checkfor= {'mosekopt'}; |
---|
171 | solver(i).call = 'callmosek'; |
---|
172 | solver(i).constraint.integer = 1; |
---|
173 | i = i+1; |
---|
174 | |
---|
175 | solver(i) = lpsolver; |
---|
176 | solver(i).tag = 'MOSEK'; |
---|
177 | solver(i).version = 'SOCP'; |
---|
178 | solver(i).checkfor= {'mosekopt'}; |
---|
179 | solver(i).call = 'callmosek'; |
---|
180 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
181 | i = i+1; |
---|
182 | |
---|
183 | solver(i) = lpsolver; |
---|
184 | solver(i).tag = 'MOSEK'; |
---|
185 | solver(i).version = 'GEOMETRIC'; |
---|
186 | solver(i).checkfor= {'mosekopt'}; |
---|
187 | solver(i).call = 'callmosek'; |
---|
188 | solver(i).objective.sigmonial = 1; |
---|
189 | solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
190 | solver(i).constraint.equalities.elementwise.nonlinear = 1; |
---|
191 | i = i+1; |
---|
192 | |
---|
193 | solver(i) = qpsolver; |
---|
194 | solver(i).tag = 'CPLEX'; |
---|
195 | solver(i).version = 'CPLEXMEX'; |
---|
196 | solver(i).checkfor= {'cplexmex'}; |
---|
197 | solver(i).call = 'callcplexmex'; |
---|
198 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
199 | solver(i).constraint.integer = 1; |
---|
200 | solver(i).constraint.binary = 1; |
---|
201 | i = i+1; |
---|
202 | |
---|
203 | solver(i) = lpsolver; |
---|
204 | solver(i).tag = 'CPLEX'; |
---|
205 | solver(i).version = 'LP-CPLEXINT'; |
---|
206 | solver(i).checkfor= {'lp_cplex.m'}; |
---|
207 | solver(i).call = 'calllp_cplex'; |
---|
208 | i = i+1; |
---|
209 | |
---|
210 | solver(i) = qpsolver; |
---|
211 | solver(i).tag = 'CPLEX'; |
---|
212 | solver(i).version = 'QP-CPLEXINT'; |
---|
213 | solver(i).checkfor= {'qp_cplex.m'}; |
---|
214 | solver(i).call = 'callqp_cplex'; |
---|
215 | i = i+1; |
---|
216 | |
---|
217 | solver(i) = lpsolver; |
---|
218 | solver(i).tag = 'CPLEX'; |
---|
219 | solver(i).version = 'MILP-CPLEXINT'; |
---|
220 | solver(i).checkfor= {'milp_cplex.m'}; |
---|
221 | solver(i).call = 'callmilp_cplex'; |
---|
222 | solver(i).constraint.integer = 1; |
---|
223 | solver(i).constraint.binary = 1; |
---|
224 | i = i+1; |
---|
225 | |
---|
226 | solver(i) = qpsolver; |
---|
227 | solver(i).tag = 'CPLEX'; |
---|
228 | solver(i).version = 'MIQP-CPLEXINT'; |
---|
229 | solver(i).checkfor= {'miqp_cplex.m'}; |
---|
230 | solver(i).call = 'callmiqp_cplex'; |
---|
231 | solver(i).constraint.integer = 1; |
---|
232 | solver(i).constraint.binary = 1; |
---|
233 | i = i+1; |
---|
234 | |
---|
235 | solver(i) = lpsolver; |
---|
236 | solver(i).tag = 'LINPROG'; |
---|
237 | solver(i).version = ''; |
---|
238 | solver(i).checkfor= {'linprog'}; |
---|
239 | solver(i).call = 'calllinprog'; |
---|
240 | i = i+1; |
---|
241 | |
---|
242 | solver(i) = lpsolver; |
---|
243 | solver(i).tag = 'BINTPROG'; |
---|
244 | solver(i).version = ''; |
---|
245 | solver(i).checkfor= {'bintprog.m'}; |
---|
246 | solver(i).call = 'callbintprog'; |
---|
247 | solver(i).constraint.binary = 1; |
---|
248 | solver(i).constraint.integer = 1; |
---|
249 | solver(i).dual = 0; |
---|
250 | i = i+1; |
---|
251 | |
---|
252 | solver(i) = qpsolver; |
---|
253 | solver(i).tag = 'BPMPD'; |
---|
254 | solver(i).version = ''; |
---|
255 | solver(i).checkfor= {'bp'}; |
---|
256 | solver(i).call = 'callbpmpd'; |
---|
257 | i = i+1; |
---|
258 | |
---|
259 | solver(i) = qpsolver; |
---|
260 | solver(i).tag = 'CLP'; |
---|
261 | solver(i).version = 'CLPMEX-QP'; |
---|
262 | solver(i).checkfor= {'clp.m'}; |
---|
263 | solver(i).call = 'callclp'; |
---|
264 | %solver(i).constraint.integer = 1; |
---|
265 | i = i+1; |
---|
266 | |
---|
267 | solver(i) = qpsolver; |
---|
268 | solver(i).tag = 'QUADPROG'; |
---|
269 | solver(i).version = ''; |
---|
270 | solver(i).checkfor= {'quadprog'}; |
---|
271 | solver(i).call = 'callquadprog'; |
---|
272 | i = i+1; |
---|
273 | |
---|
274 | solver(i) = qpsolver; |
---|
275 | solver(i).tag = 'OOQP'; |
---|
276 | solver(i).version = ''; |
---|
277 | solver(i).checkfor= {'ooqp.m'}; |
---|
278 | solver(i).call = 'callooqp'; |
---|
279 | i = i+1; |
---|
280 | |
---|
281 | solver(i) = qpsolver; |
---|
282 | solver(i).tag = 'lindo'; |
---|
283 | solver(i).version = 'MIQP'; |
---|
284 | solver(i).checkfor= {'mxlindo'}; |
---|
285 | solver(i).call = 'calllindo_miqp'; |
---|
286 | solver(i).constraint.integer = 1; |
---|
287 | i = i+1; |
---|
288 | |
---|
289 | solver(i) = sdpsolver; |
---|
290 | solver(i).tag = 'SeDuMi'; |
---|
291 | solver(i).version = '1.1'; |
---|
292 | solver(i).checkfor= {'sedumi.m','ada_pcg.m','install_sedumi'}; |
---|
293 | solver(i).call = 'callsedumi'; |
---|
294 | solver(i).constraint.equalities.linear = 1; |
---|
295 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
296 | solver(i).constraint.inequalities.rotatedsecondordercone = 1; |
---|
297 | solver(i).complex = 1; |
---|
298 | i = i+1; |
---|
299 | |
---|
300 | solver(i) = sdpsolver; |
---|
301 | solver(i).tag = 'SeDuMi'; |
---|
302 | solver(i).version = '1.05'; |
---|
303 | solver(i).checkfor= {'sedumi.m','ada_pcg.m','vecreal'}; |
---|
304 | solver(i).call = 'callsedumi'; |
---|
305 | solver(i).constraint.equalities.linear = 1; |
---|
306 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
307 | solver(i).constraint.inequalities.rotatedsecondordercone = 1; |
---|
308 | solver(i).complex = 1; |
---|
309 | i = i+1; |
---|
310 | |
---|
311 | solver(i) = sdpsolver; |
---|
312 | solver(i).tag = 'SeDuMi'; |
---|
313 | solver(i).version = '1.03'; |
---|
314 | solver(i).checkfor= {'sedumi.m','doinfac.m'}; |
---|
315 | solver(i).call = 'callsedumi'; |
---|
316 | solver(i).constraint.equalities.linear = 1; |
---|
317 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
318 | solver(i).constraint.inequalities.rotatedsecondordercone = 1; |
---|
319 | solver(i).complex = 1; |
---|
320 | i = i+1; |
---|
321 | |
---|
322 | solver(i) = sdpsolver; |
---|
323 | solver(i).tag = 'SDPT3'; |
---|
324 | solver(i).version = '4'; |
---|
325 | solver(i).checkfor= {'sqlp','skron','symqmr','blkbarrier'}; |
---|
326 | solver(i).call = 'callsdpt34'; |
---|
327 | solver(i).constraint.equalities.linear = 1; |
---|
328 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
329 | solver(i).objective.maxdet = 1; |
---|
330 | i = i+1; |
---|
331 | |
---|
332 | solver(i) = sdpsolver; |
---|
333 | solver(i).tag = 'SDPT3'; |
---|
334 | solver(i).version = '3.1'; |
---|
335 | solver(i).checkfor= {'sqlp','skron','symqmr'}; |
---|
336 | solver(i).call = 'callsdpt331'; |
---|
337 | solver(i).constraint.equalities.linear = 1; |
---|
338 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
339 | i = i+1; |
---|
340 | |
---|
341 | solver(i) = sdpsolver; |
---|
342 | solver(i).tag = 'SDPT3'; |
---|
343 | solver(i).version = '3.02'; |
---|
344 | solver(i).checkfor= {'sqlp','skron','schursysolve'}; |
---|
345 | solver(i).call = 'callsdpt3302'; |
---|
346 | solver(i).constraint.equalities.linear = 1; |
---|
347 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
348 | i = i+1; |
---|
349 | |
---|
350 | solver(i) = sdpsolver; |
---|
351 | solver(i).tag = 'SDPT3'; |
---|
352 | solver(i).version = '3.0'; |
---|
353 | solver(i).checkfor= {'sqlp','mexexec'}; |
---|
354 | solver(i).call = 'callsdpt330'; |
---|
355 | solver(i).constraint.equalities.linear = 1; |
---|
356 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
357 | i = i+1; |
---|
358 | |
---|
359 | solver(i) = sdpsolver; |
---|
360 | solver(i).tag = 'SDPA'; |
---|
361 | solver(i).version = 'M'; |
---|
362 | solver(i).checkfor= {'sdpam.m'}; |
---|
363 | solver(i).call = 'callsdpa'; |
---|
364 | solver(i).constraint.equalities.linear = 0; |
---|
365 | i = i+1; |
---|
366 | |
---|
367 | solver(i) = sdpsolver; |
---|
368 | solver(i).tag = 'DSDP'; |
---|
369 | solver(i).version = '5'; |
---|
370 | solver(i).checkfor= {'dsdp','dvec'}; |
---|
371 | solver(i).call = 'calldsdp5'; |
---|
372 | solver(i).constraint.equalities.linear = 0; |
---|
373 | i = i+1; |
---|
374 | |
---|
375 | solver(i) = sdpsolver; |
---|
376 | solver(i).tag = 'DSDP'; |
---|
377 | solver(i).version = '4'; |
---|
378 | solver(i).checkfor= {'dsdp'}; |
---|
379 | solver(i).call = 'calldsdp'; |
---|
380 | solver(i).constraint.equalities.linear = 0; |
---|
381 | i = i+1; |
---|
382 | |
---|
383 | solver(i) = sdpsolver; |
---|
384 | solver(i).tag = 'SDPLR'; |
---|
385 | solver(i).version = ''; |
---|
386 | solver(i).checkfor= {'sdplr'}; |
---|
387 | solver(i).call = 'callsdplr'; |
---|
388 | solver(i).constraint.equalities.linear = 0; |
---|
389 | |
---|
390 | i = i+1; |
---|
391 | |
---|
392 | solver(i) = sdpsolver; |
---|
393 | solver(i).tag = 'CSDP'; |
---|
394 | solver(i).version = ''; |
---|
395 | solver(i).checkfor= {'csdp','readsol','writesdpa'}; |
---|
396 | solver(i).call = 'callcsdp'; |
---|
397 | solver(i).constraint.equalities.linear = 0; |
---|
398 | i = i+1; |
---|
399 | |
---|
400 | solver(i) = sdpsolver; |
---|
401 | solver(i).tag = 'MAXDET'; |
---|
402 | solver(i).version = ''; |
---|
403 | solver(i).checkfor= {'maxdet.m'}; |
---|
404 | solver(i).call = 'callmaxdet'; |
---|
405 | solver(i).objective.maxdet = 1; |
---|
406 | solver(i).dual = 0; |
---|
407 | i = i+1; |
---|
408 | |
---|
409 | |
---|
410 | % solver(i) = sdpsolver; |
---|
411 | % solver(i).tag = 'SPECSDP'; |
---|
412 | % solver(i).version = ''; |
---|
413 | % solver(i).checkfor= {'specsdp'}; |
---|
414 | % solver(i).call = 'callspecsdp'; |
---|
415 | % solver(i).constraint.equalities.linear = 0; % Does not handle equality constraints |
---|
416 | % solver(i).constraint.inequalities.semidefinite.quadratic = 1; |
---|
417 | % i = i+1; |
---|
418 | |
---|
419 | solver(i) = sdpsolver; |
---|
420 | solver(i).tag = 'PENSDP'; |
---|
421 | solver(i).version = 'PENOPT'; |
---|
422 | solver(i).checkfor= {'pensdpm'}; |
---|
423 | solver(i).call = 'callpensdpm'; |
---|
424 | solver(i).constraint.equalities.linear = 0; |
---|
425 | i = i+1; |
---|
426 | |
---|
427 | solver(i) = sdpsolver; |
---|
428 | solver(i).tag = 'PENSDP'; |
---|
429 | solver(i).version = 'TOMLAB'; |
---|
430 | solver(i).checkfor= {'pensdp'}; |
---|
431 | solver(i).call = 'callpensdp'; |
---|
432 | solver(i).constraint.equalities.linear = 0; |
---|
433 | i = i+1; |
---|
434 | |
---|
435 | solver(i) = sdpsolver; |
---|
436 | solver(i).tag = 'PENBMI'; |
---|
437 | solver(i).version = 'PENOPT'; |
---|
438 | solver(i).checkfor= {'penbmim'}; |
---|
439 | solver(i).call = 'callpenbmim'; |
---|
440 | solver(i).objective.quadratic.convex = 1; |
---|
441 | solver(i).objective.quadratic.nonconvex = 1; |
---|
442 | solver(i).constraint.equalities.linear = 0; |
---|
443 | solver(i).constraint.inequalities.semidefinite.quadratic = 1; |
---|
444 | solver(i).constraint.inequalities.semidefinite.polynomial = 1; |
---|
445 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
446 | solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
447 | solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
448 | i = i+1; |
---|
449 | |
---|
450 | solver(i) = sdpsolver; |
---|
451 | solver(i).tag = 'PENBMI'; |
---|
452 | solver(i).version = 'TOMLAB'; |
---|
453 | solver(i).checkfor= {'penbmi'}; |
---|
454 | solver(i).call = 'callpenbmi'; |
---|
455 | solver(i).objective.quadratic.convex = 1; |
---|
456 | solver(i).objective.quadratic.nonconvex = 1; |
---|
457 | solver(i).constraint.equalities.linear = 0; |
---|
458 | solver(i).constraint.inequalities.semidefinite.quadratic = 1; |
---|
459 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
460 | solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
461 | i = i+1; |
---|
462 | |
---|
463 | solver(i) = sdpsolver; |
---|
464 | solver(i).tag = 'LMILAB'; |
---|
465 | solver(i).version = ''; |
---|
466 | solver(i).checkfor= {'setlmis'}; |
---|
467 | solver(i).call = 'calllmilab'; |
---|
468 | solver(i).dual = 0; |
---|
469 | solver(i).constraint.equalities.linear = 0; |
---|
470 | i = i+1; |
---|
471 | |
---|
472 | solver(i) = sdpsolver; |
---|
473 | solver(i).tag = 'LMIRANK'; |
---|
474 | solver(i).version = ''; |
---|
475 | solver(i).checkfor= {'lmirank'}; |
---|
476 | solver(i).call = 'calllmirank'; |
---|
477 | solver(i).dual = 0; |
---|
478 | solver(i).constraint.inequalities.rank = 1; |
---|
479 | solver(i).objective.linear = 0; |
---|
480 | solver(i).constraint.equalities.linear = 0; |
---|
481 | i = i+1; |
---|
482 | |
---|
483 | solver(i) = emptysolver; |
---|
484 | solver(i).tag = 'MPT'; |
---|
485 | solver(i).version = ''; |
---|
486 | solver(i).checkfor= {'mpt_mpqp'}; |
---|
487 | solver(i).call = 'callmpt'; |
---|
488 | solver(i).objective.linear = 1; |
---|
489 | solver(i).objective.quadratic.convex = 1; |
---|
490 | solver(i).objective.quadratic.nonconvex = 1; |
---|
491 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
492 | solver(i).constraint.equalities.linear = 1; |
---|
493 | %solver(i).constraint.equalities.polynomial = 1; |
---|
494 | %solver(i).constraint.equalities.quadratic = 1; |
---|
495 | solver(i).parametric = 1; |
---|
496 | solver(i).constraint.binary = 1; |
---|
497 | i = i+1; |
---|
498 | |
---|
499 | solver(i) = emptysolver; |
---|
500 | solver(i).tag = 'MPLCP'; |
---|
501 | solver(i).version = ''; |
---|
502 | solver(i).checkfor= {'mplcp.m'}; |
---|
503 | solver(i).call = 'callmplcp'; |
---|
504 | solver(i).objective.linear = 1; |
---|
505 | solver(i).objective.quadratic.convex = 1; |
---|
506 | solver(i).objective.quadratic.nonconvex = 1; |
---|
507 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
508 | solver(i).constraint.equalities.linear = 1; |
---|
509 | solver(i).parametric = 1; |
---|
510 | solver(i).constraint.binary = 1; |
---|
511 | i = i+1; |
---|
512 | |
---|
513 | solver(i) = sdpsolver; |
---|
514 | solver(i).tag = 'KYPD'; |
---|
515 | solver(i).version = ''; |
---|
516 | solver(i).checkfor= {'kypd_solver'}; |
---|
517 | solver(i).call = 'callkypd'; |
---|
518 | i = i+1; |
---|
519 | |
---|
520 | solver(i) = emptysolver; |
---|
521 | solver(i).tag = 'fmincon'; |
---|
522 | solver(i).version = 'geometric'; |
---|
523 | solver(i).checkfor= {'fmincon.m'}; |
---|
524 | solver(i).call = 'callfmincongp'; |
---|
525 | solver(i).objective.sigmonial = 1; |
---|
526 | solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
527 | solver(i).constraint.equalities.linear = 1; |
---|
528 | solver(i).constraint.equalities.quadratic = 1; |
---|
529 | solver(i).constraint.equalities.polynomial = 1; |
---|
530 | solver(i).constraint.equalities.sigmonial = 1; |
---|
531 | i = i+1; |
---|
532 | |
---|
533 | solver(i) = emptysolver; |
---|
534 | solver(i).tag = 'fmincon'; |
---|
535 | solver(i).version = 'standard'; |
---|
536 | solver(i).checkfor= {'fmincon.m'}; |
---|
537 | solver(i).call = 'callfmincon'; |
---|
538 | solver(i).objective.linear = 1; |
---|
539 | solver(i).objective.quadratic.convex = 1; |
---|
540 | solver(i).objective.quadratic.nonconvex = 1; |
---|
541 | solver(i).objective.polynomial = 1; |
---|
542 | solver(i).objective.sigmonial = 1; |
---|
543 | solver(i).constraint.equalities.linear = 1; |
---|
544 | solver(i).constraint.equalities.quadratic = 1; |
---|
545 | solver(i).constraint.equalities.polynomial = 1; |
---|
546 | solver(i).constraint.equalities.sigmonial = 1; |
---|
547 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
548 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
549 | solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
550 | solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
551 | solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
552 | solver(i).dual = 1; |
---|
553 | solver(i).evaluation = 1; |
---|
554 | i = i+1; |
---|
555 | |
---|
556 | % solver(i) = emptysolver; |
---|
557 | % solver(i).tag = 'lindo'; |
---|
558 | % solver(i).version = 'geometric'; |
---|
559 | % solver(i).checkfor= {'mxlindo'}; |
---|
560 | % solver(i).call = 'calllindo_geo'; |
---|
561 | % solver(i).objective.sigmonial = 1; |
---|
562 | % solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
563 | % solver(i).constraint.equalities.linear = 1; |
---|
564 | % solver(i).constraint.equalities.quadratic = 1; |
---|
565 | % solver(i).constraint.equalities.polynomial = 1; |
---|
566 | % solver(i).constraint.equalities.sigmonial = 1; |
---|
567 | % i = i+1; |
---|
568 | |
---|
569 | solver(i) = emptysolver; |
---|
570 | solver(i).tag = 'lindo'; |
---|
571 | solver(i).version = 'NLP'; |
---|
572 | solver(i).checkfor= {'mxlindo'}; |
---|
573 | solver(i).call = 'calllindo_nlp'; |
---|
574 | solver(i).objective.linear = 1; |
---|
575 | solver(i).objective.quadratic.convex = 1; |
---|
576 | solver(i).objective.quadratic.nonconvex = 1; |
---|
577 | solver(i).objective.polynomial = 1; |
---|
578 | solver(i).objective.sigmonial = 1; |
---|
579 | solver(i).constraint.equalities.linear = 1; |
---|
580 | solver(i).constraint.equalities.quadratic = 1; |
---|
581 | solver(i).constraint.equalities.polynomial = 1; |
---|
582 | solver(i).constraint.equalities.sigmonial = 1; |
---|
583 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
584 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
585 | solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
586 | solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
587 | solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
588 | solver(i).dual = 1; |
---|
589 | solver(i).evaluation = 1; |
---|
590 | solver(i).constraint.integer = 1; |
---|
591 | |
---|
592 | i = i+1; |
---|
593 | |
---|
594 | |
---|
595 | % solver(i) = emptysolver; |
---|
596 | % solver(i).tag = 'ipopt'; |
---|
597 | % solver(i).version = 'standard'; |
---|
598 | % solver(i).checkfor= {'Ipopt.m'}; |
---|
599 | % solver(i).call = 'callipoptmex'; |
---|
600 | % solver(i).objective.linear = 1; |
---|
601 | % solver(i).objective.quadratic.convex = 1; |
---|
602 | % solver(i).objective.quadratic.nonconvex = 1; |
---|
603 | % solver(i).objective.polynomial = 1; |
---|
604 | % solver(i).objective.sigmonial = 1; |
---|
605 | % solver(i).constraint.equalities.linear = 1; |
---|
606 | % solver(i).constraint.equalities.quadratic = 1; |
---|
607 | % solver(i).constraint.equalities.polynomial = 1; |
---|
608 | % solver(i).constraint.equalities.sigmonial = 1; |
---|
609 | % solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
610 | % solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
611 | % solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
612 | % solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
613 | % solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
614 | % solver(i).dual = 0; |
---|
615 | % i = i+1; |
---|
616 | |
---|
617 | solver(i) = lpsolver; |
---|
618 | solver(i).tag = 'GPPOSY'; |
---|
619 | solver(i).version = ''; |
---|
620 | solver(i).checkfor= {'gpposy'}; |
---|
621 | solver(i).call = 'callgpposy'; |
---|
622 | solver(i).objective.sigmonial = 1; |
---|
623 | solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
624 | solver(i).constraint.equalities.elementwise.nonlinear = 1; |
---|
625 | i = i+1; |
---|
626 | |
---|
627 | % solver(i) = emptysolver; |
---|
628 | % solver(i).tag = 'pennlp'; |
---|
629 | % solver(i).version = 'standard'; |
---|
630 | % solver(i).checkfor= {'pennlp'}; |
---|
631 | % solver(i).call = 'callpennlp'; |
---|
632 | % solver(i).objective.linear = 1; |
---|
633 | % solver(i).objective.quadratic.convex = 1; |
---|
634 | % solver(i).objective.quadratic.nonconvex = 1; |
---|
635 | % solver(i).objective.polynomial = 1; |
---|
636 | % solver(i).objective.sigmonial = 1; |
---|
637 | % solver(i).constraint.equalities.linear = 1; |
---|
638 | % solver(i).constraint.equalities.quadratic = 1; |
---|
639 | % solver(i).constraint.equalities.polynomial = 1; |
---|
640 | % solver(i).constraint.equalities.sigmonial = 1; |
---|
641 | % solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
642 | % solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
643 | % solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
644 | % solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
645 | % solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
646 | % solver(i).dual = 1; |
---|
647 | % i = i+1; |
---|
648 | |
---|
649 | % solver(i) = qpsolver; |
---|
650 | % solver(i).tag = 'pennlp'; |
---|
651 | % solver(i).version = 'QP'; |
---|
652 | % solver(i).checkfor= {'pennlpm'}; |
---|
653 | % solver(i).call = 'callpennlp'; |
---|
654 | % solver(i).objective.linear = 1; |
---|
655 | % solver(i).objective.quadratic.convex = 1; |
---|
656 | % solver(i).objective.quadratic.nonconvex = 0; |
---|
657 | % solver(i).constraint.equalities.linear = 1; |
---|
658 | % solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
659 | % solver(i).dual = 1; |
---|
660 | % i = i+1; |
---|
661 | |
---|
662 | % solver(i) = emptysolver; |
---|
663 | % solver(i).tag = 'pennlp'; |
---|
664 | % solver(i).version = 'standard'; |
---|
665 | % solver(i).checkfor= {'pennlpm'}; |
---|
666 | % solver(i).call = 'callpennlp'; |
---|
667 | % solver(i).objective.linear = 1; |
---|
668 | % solver(i).objective.quadratic.convex = 0; |
---|
669 | % solver(i).objective.quadratic.nonconvex = 0; |
---|
670 | % solver(i).objective.polynomial = 1; |
---|
671 | % solver(i).objective.sigmonial = 1; |
---|
672 | % solver(i).constraint.equalities.linear = 1; |
---|
673 | % solver(i).constraint.equalities.quadratic = 1; |
---|
674 | % solver(i).constraint.equalities.polynomial = 1; |
---|
675 | % solver(i).constraint.equalities.sigmonial = 1; |
---|
676 | % solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
677 | % solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
678 | % solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
679 | % solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
680 | % solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
681 | % solver(i).constraint.inequalities.semidefinite.linear = 0; |
---|
682 | % solver(i).constraint.inequalities.semidefinite.quadratic = 0; |
---|
683 | % solver(i).constraint.inequalities.semidefinite.polynomial = 0; |
---|
684 | % solver(i).dual = 1; |
---|
685 | % i = i+1; |
---|
686 | |
---|
687 | |
---|
688 | solver(i) = emptysolver; |
---|
689 | solver(i).tag = 'fminsearch'; |
---|
690 | solver(i).version = ''; |
---|
691 | solver(i).checkfor= {'fminsearch.m'}; |
---|
692 | solver(i).call = 'callfminsearch'; |
---|
693 | solver(i).objective.linear = 1; |
---|
694 | solver(i).objective.quadratic.convex = 1; |
---|
695 | solver(i).objective.quadratic.nonconvex = 1; |
---|
696 | solver(i).objective.polynomial = 1; |
---|
697 | solver(i).objective.sigmonial = 1; |
---|
698 | solver(i).dual = 0; |
---|
699 | i = i+1; |
---|
700 | |
---|
701 | % solver(i) = emptysolver; |
---|
702 | % solver(i).tag = 'mpcvx'; |
---|
703 | % solver(i).tag = 'mpcvx'; |
---|
704 | % solver(i).version = ''; |
---|
705 | % solver(i).checkfor= {'mpcvx'}; |
---|
706 | % solver(i).call = 'mpcvx'; |
---|
707 | % solver(i).objective.linear = 1; |
---|
708 | % solver(i).objective.quadratic.convex = 1; |
---|
709 | % solver(i).objective.quadratic.nonconvex = 1; |
---|
710 | % solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
711 | % solver(i).constraint.inequalities.secondordercone = 1; |
---|
712 | % solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
713 | % solver(i).parametric = 1; |
---|
714 | % i = i+1; |
---|
715 | |
---|
716 | % % *************************************** |
---|
717 | % % SOMEWHAT MORE COMPLEX DEFINITIONS OF |
---|
718 | % % THE INTERNAL MICP SOLVER |
---|
719 | % % *************************************** |
---|
720 | solver(i) = emptysolver; |
---|
721 | solver(i).tag = 'BNB'; |
---|
722 | solver(i).version = ''; |
---|
723 | solver(i).checkfor= {'bnb'}; |
---|
724 | solver(i).call = 'bnb'; |
---|
725 | solver(i).objective.linear = 1; |
---|
726 | solver(i).objective.sigmonial = 1; |
---|
727 | solver(i).objective.polynomial = 1; |
---|
728 | solver(i).objective.quadratic.convex = 1; |
---|
729 | solver(i).constraint.equalities.linear = 1; |
---|
730 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
731 | solver(i).constraint.inequalities.elementwise.sigmonial = 1; |
---|
732 | solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
733 | solver(i).constraint.inequalities.semidefinite.linear = 1; |
---|
734 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
735 | solver(i).constraint.inequalities.rotatedsecondordercone = 1; |
---|
736 | solver(i).constraint.integer = 1; |
---|
737 | solver(i).constraint.binary = 1; |
---|
738 | solver(i).evaluation = 1; |
---|
739 | i = i+1; |
---|
740 | |
---|
741 | |
---|
742 | % % *************************************** |
---|
743 | % % Experimental min-max solver |
---|
744 | % % *************************************** |
---|
745 | % solver(i) = emptysolver; |
---|
746 | % solver(i).tag = 'minmax'; |
---|
747 | % solver(i).version = ''; |
---|
748 | % solver(i).checkfor= {'callminmax'}; |
---|
749 | % solver(i).call = 'callminmax'; |
---|
750 | % solver(i).objective.linear = 1; |
---|
751 | % solver(i).objective.sigmonial = 0; |
---|
752 | % solver(i).objective.polynomial = 0; |
---|
753 | % solver(i).objective.quadratic.convex = 0; |
---|
754 | % solver(i).constraint.equalities.linear = 1; |
---|
755 | % solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
756 | % solver(i).constraint.inequalities.elementwise.sigmonial = 0; |
---|
757 | % solver(i).constraint.inequalities.elementwise.polynomial = 0; |
---|
758 | % solver(i).constraint.inequalities.semidefinite.linear = 0; |
---|
759 | % solver(i).constraint.inequalities.secondordercone = 0; |
---|
760 | % solver(i).constraint.inequalities.rotatedsecondordercone = 0; |
---|
761 | % solver(i).constraint.integer = 0; |
---|
762 | % solver(i).constraint.binary = 0; |
---|
763 | % i = i+1; |
---|
764 | |
---|
765 | % % *************************************** |
---|
766 | % % SOMEWHAT MORE COMPLEX DEFINITIONS OF |
---|
767 | % % THE INTERNAL MICP SOLVER |
---|
768 | % % *************************************** |
---|
769 | solver(i) = emptysolver; |
---|
770 | solver(i).tag = 'CUTSDP'; |
---|
771 | solver(i).version = ''; |
---|
772 | solver(i).checkfor= {'cutsdp'}; |
---|
773 | solver(i).call = 'cutsdp'; |
---|
774 | solver(i).objective.linear = 1; |
---|
775 | solver(i).objective.sigmonial = 0; |
---|
776 | solver(i).objective.polynomial = 0; |
---|
777 | solver(i).objective.quadratic.convex = 1; |
---|
778 | solver(i).constraint.equalities.linear = 1; |
---|
779 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
780 | solver(i).constraint.inequalities.semidefinite.linear = 1; |
---|
781 | solver(i).constraint.integer = 1; |
---|
782 | solver(i).constraint.binary = 1; |
---|
783 | solver(i).dual = 1; |
---|
784 | i = i+1; |
---|
785 | |
---|
786 | % *************************************** |
---|
787 | % SOMEWHAT MORE COMPLEX DEFINITIONS OF |
---|
788 | % THE INTERNAL GLOBAL BMI SOLVER |
---|
789 | % *************************************** |
---|
790 | solver(i) = emptysolver; |
---|
791 | solver(i).tag = 'BMIBNB'; |
---|
792 | solver(i).version = ''; |
---|
793 | solver(i).checkfor= {'bmibnb'}; |
---|
794 | solver(i).call = 'bmibnb'; |
---|
795 | solver(i).objective.linear = 1; |
---|
796 | solver(i).objective.quadratic.convex = 1; |
---|
797 | solver(i).objective.quadratic.nonconvex = 1; |
---|
798 | solver(i).objective.polynomial = 1; |
---|
799 | solver(i).constraint.equalities.linear = 1; |
---|
800 | solver(i).constraint.equalities.polynomial = 1; |
---|
801 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
802 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
803 | solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
804 | solver(i).constraint.inequalities.elementwise.polynomial = 1; |
---|
805 | solver(i).constraint.inequalities.semidefinite.linear = 1; |
---|
806 | solver(i).constraint.inequalities.semidefinite.quadratic = 1; |
---|
807 | solver(i).constraint.inequalities.semidefinite.polynomial = 1; |
---|
808 | solver(i).constraint.inequalities.secondordercone = 1; |
---|
809 | solver(i).constraint.inequalities.rotatedsecondordercone = 1; |
---|
810 | solver(i).constraint.inequalities.rank = 0; |
---|
811 | solver(i).constraint.binary = 1; |
---|
812 | solver(i).constraint.integer = 1; |
---|
813 | solver(i).evaluation = 1; |
---|
814 | i = i+1; |
---|
815 | |
---|
816 | solver(i) = qpsolver; |
---|
817 | solver(i).tag = 'kktqp'; |
---|
818 | solver(i).version = ''; |
---|
819 | solver(i).checkfor= {'kktqp'}; |
---|
820 | solver(i).call = 'kktqp'; |
---|
821 | solver(i).objective.linear = 1; |
---|
822 | solver(i).objective.quadratic.convex = 1; |
---|
823 | solver(i).objective.quadratic.nonconvex = 1; |
---|
824 | solver(i).constraint.equalities.linear = 0; |
---|
825 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
826 | i = i+1; |
---|
827 | |
---|
828 | solver(i) = emptysolver; |
---|
829 | solver(i).tag = 'none'; |
---|
830 | solver(i).version = ''; |
---|
831 | solver(i).checkfor= {'callnone.m'}; |
---|
832 | solver(i).call = 'callnone'; |
---|
833 | solver(i).objective.linear = 1; |
---|
834 | solver(i).constraint.equalities.linear = 1; |
---|
835 | solver(i).constraint.inequalities.elementwise.linear = 1; |
---|
836 | solver(i).constraint.inequalities.elementwise.quadratic.convex = 1; |
---|
837 | solver(i).constraint.inequalities.elementwise.quadratic.nonconvex = 1; |
---|
838 | solver(i).constraint.inequalities.semidefinite.linear = 1; |
---|
839 | solver(i).constraint.inequalities.semidefinite.quadratic = 1; |
---|
840 | i = i+1; |
---|