amino  1.0-beta2
Lightweight Robot Utility Library
opt.h
Go to the documentation of this file.
1 /* -*- mode: C; c-basic-offset: 4 -*- */
2 /* ex: set shiftwidth=4 tabstop=4 expandtab: */
3 /*
4  * Copyright (c) 2016, Rice University
5  * All rights reserved.
6  *
7  * Author(s): Neil T. Dantam <ntd@gatech.edu>
8  *
9  * This file is provided under the following "BSD-style" License:
10  *
11  *
12  * Redistribution and use in source and binary forms, with or
13  * without modification, are permitted provided that the following
14  * conditions are met:
15  * * Redistributions of source code must retain the above copyright
16  * notice, this list of conditions and the following disclaimer.
17  * * Redistributions in binary form must reproduce the above
18  * copyright notice, this list of conditions and the following
19  * disclaimer in the documentation and/or other materials provided
20  * with the distribution.
21  * * Neither the name of copyright holder the names of its
22  * contributors may be used to endorse or promote products derived
23  * from this software without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
26  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
27  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
28  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
29  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
30  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
33  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
34  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
36  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37  * POSSIBILITY OF SUCH DAMAGE.
38  *
39  */
40 #ifndef AMINO_OPT_H
41 #define AMINO_OPT_H
42 
60 };
61 
62 
63 
72 };
73 
74 
81 };
82 
90 };
91 
92 struct aa_opt_cx;
93 
97 AA_API int
98 aa_opt_solve( struct aa_opt_cx *cx, size_t n, double *x );
99 
100 
104 AA_API int
105 aa_opt_destroy( struct aa_opt_cx *cx );
106 
110 AA_API int
111 aa_opt_set_direction( struct aa_opt_cx *cx, enum aa_opt_direction );
112 
116 AA_API int
117 aa_opt_set_obj( struct aa_opt_cx *cx, size_t n, const double * c);
118 
122 AA_API int
123 aa_opt_set_bnd( struct aa_opt_cx *cx, size_t n,
124  const double * x_min, const double *x_max);
125 
126 
130 AA_API int
131 aa_opt_set_cstr_gm( struct aa_opt_cx *cx,
132  size_t m, size_t n,
133  const double *A, size_t lda,
134  const double *b_min, const double *b_max );
135 
140 AA_API int
141 aa_opt_set_quad_obj_crs( struct aa_opt_cx *cx, size_t n,
142  const double *Q_values, int *Q_cols, int *Q_row_ptr );
143 
147 AA_API int
148 aa_opt_set_type( struct aa_opt_cx *cx, size_t i, enum aa_opt_type type );
149 
153 typedef struct aa_opt_cx*
155  size_t m, size_t n,
156  const double *A, size_t ldA,
157  const double *b_lower, const double *b_upper,
158  const double *c,
159  const double *x_lower, const double *x_upper
160  );
161 
162 
163 
167 AA_API struct aa_opt_cx* aa_opt_gmcreate (
168  enum aa_opt_lp_solver solver,
169  size_t m, size_t n,
170  const double *A, size_t ldA,
171  const double *b_lower, const double *b_upper,
172  const double *c,
173  const double *x_lower, const double *x_upper
174  );
175 
176 
177 /*******************************/
179 /*******************************/
180 
184 AA_API struct aa_opt_cx* aa_opt_lpsolve_gmcreate (
185  size_t m, size_t n,
186  const double *A, size_t ldA,
187  const double *b_lower, const double *b_upper,
188  const double *c,
189  const double *x_lower, const double *x_upper
190  );
191 
192 
196 AA_API struct aa_opt_cx* aa_opt_clp_gmcreate (
197  size_t m, size_t n,
198  const double *A, size_t ldA,
199  const double *b_lower, const double *b_upper,
200  const double *c,
201  const double *x_lower, const double *x_upper
202  );
203 
207 AA_API struct aa_opt_cx* aa_opt_glpk_gmcreate (
208  size_t m, size_t n,
209  const double *A, size_t ldA,
210  const double *b_lower, const double *b_upper,
211  const double *c,
212  const double *x_lower, const double *x_upper
213  );
214 
218 AA_API struct aa_opt_cx* aa_opt_lpsolve_crscreate (
219  size_t m, size_t n,
220  const double *A_values, int *A_cols, int *A_row_ptr,
221  const double *b_lower, const double *b_upper,
222  const double *c,
223  const double *x_lower, const double *x_upper );
224 
225 
229 AA_API struct aa_opt_cx* aa_opt_clp_crscreate (
230  size_t m, size_t n,
231  const double *A_values, int *A_cols, int *A_row_ptr,
232  const double *b_lower, const double *b_upper,
233  const double *c,
234  const double *x_lower, const double *x_upper );
235 
236 
240 AA_API struct aa_opt_cx* aa_opt_glpk_crscreate (
241  size_t m, size_t n,
242  const double *A_values, int *A_cols, int *A_row_ptr,
243  const double *b_lower, const double *b_upper,
244  const double *c,
245  const double *x_lower, const double *x_upper );
246 
247 #endif //AMINO_OPT_H
#define AA_API
calling and name mangling convention for functions
Definition: amino.h:95
AA_API int aa_opt_set_type(struct aa_opt_cx *cx, size_t i, enum aa_opt_type type)
Set the optimization variable type.
AA_API int aa_opt_solve(struct aa_opt_cx *cx, size_t n, double *x)
Solve the optimization problem.
AA_API struct aa_opt_cx * aa_opt_clp_crscreate(size_t m, size_t n, const double *A_values, int *A_cols, int *A_row_ptr, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Create an optimization context for CLP.
aa_opt_lp_solver
Available lp solver backends.
Definition: opt.h:67
@ AA_OPT_LP_SOLVER_DEFAULT
A sane default.
Definition: opt.h:68
@ AA_OPT_LP_SOLVER_GLPK
GNU Linear Programming Kit.
Definition: opt.h:70
@ AA_OPT_LP_SOLVER_LPSOLVE
LPSolve.
Definition: opt.h:69
@ AA_OPT_LP_SOLVER_CLP
COIN-OR LP Solver.
Definition: opt.h:71
aa_opt_type
Type of optiziation variable.
Definition: opt.h:86
@ AA_OPT_CONTINUOUS
continuous (float) variable
Definition: opt.h:87
@ AA_OPT_INTEGER
integer variable
Definition: opt.h:89
@ AA_OPT_BINARY
binary variable
Definition: opt.h:88
AA_API struct aa_opt_cx * aa_opt_clp_gmcreate(size_t m, size_t n, const double *A, size_t ldA, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Create an optimization context for CLP.
AA_API struct aa_opt_cx * aa_opt_gmcreate(enum aa_opt_lp_solver solver, size_t m, size_t n, const double *A, size_t ldA, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Create an optimization context using named plugin.
AA_API int aa_opt_set_obj(struct aa_opt_cx *cx, size_t n, const double *c)
Set the linear objective function.
AA_API int aa_opt_set_quad_obj_crs(struct aa_opt_cx *cx, size_t n, const double *Q_values, int *Q_cols, int *Q_row_ptr)
Set the quadratic objective function via compressed-row-storage format.
AA_API struct aa_opt_cx * aa_opt_glpk_gmcreate(size_t m, size_t n, const double *A, size_t ldA, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Create an optimization context for GLPK.
AA_API int aa_opt_set_direction(struct aa_opt_cx *cx, enum aa_opt_direction)
Set the optimization direction.
struct aa_opt_cx * aa_opt_gmcreate_fun(size_t m, size_t n, const double *A, size_t ldA, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Optimization context constructor from general matrix format.
Definition: opt.h:154
AA_API int aa_opt_destroy(struct aa_opt_cx *cx)
Destroy the optimization context.
AA_API struct aa_opt_cx * aa_opt_glpk_crscreate(size_t m, size_t n, const double *A_values, int *A_cols, int *A_row_ptr, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Create an optimization context for GLPK.
AA_API int aa_opt_set_cstr_gm(struct aa_opt_cx *cx, size_t m, size_t n, const double *A, size_t lda, const double *b_min, const double *b_max)
Set the constraint matrix.
aa_opt_rel_type
Optimization constraint type.
Definition: opt.h:56
@ AA_OPT_REL_GEQ
Greater-than or equal constraint.
Definition: opt.h:59
@ AA_OPT_REL_LEQ
Less-than or equal constraint.
Definition: opt.h:58
@ AA_OPT_REL_EQ
equality constraint
Definition: opt.h:57
AA_API int aa_opt_set_bnd(struct aa_opt_cx *cx, size_t n, const double *x_min, const double *x_max)
Set the bounds on the optimization variables.
AA_API struct aa_opt_cx * aa_opt_lpsolve_gmcreate(size_t m, size_t n, const double *A, size_t ldA, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Solver-specific functions.
AA_API struct aa_opt_cx * aa_opt_lpsolve_crscreate(size_t m, size_t n, const double *A_values, int *A_cols, int *A_row_ptr, const double *b_lower, const double *b_upper, const double *c, const double *x_lower, const double *x_upper)
Create an optimization context for LP-Solve.
aa_opt_direction
Optimization direction.
Definition: opt.h:78
@ AA_OPT_MINIMIZE
minimize objective function
Definition: opt.h:80
@ AA_OPT_MAXIMIZE
maximize objective function
Definition: opt.h:79