amino
Lightweight Robot Utility Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
opt.h
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 
43 enum aa_opt_rel_type {
44  AA_OPT_REL_EQ,
45  AA_OPT_REL_LEQ,
46  AA_OPT_REL_GEQ,
47 };
48 
49 
50 enum aa_opt_direction {
51  AA_OPT_MAXIMIZE,
52  AA_OPT_MINIMIZE,
53 };
54 
55 
56 enum aa_opt_type {
57  AA_OPT_CONTINUOUS,
58  AA_OPT_BINARY,
59  AA_OPT_INTEGER
60 };
61 
62 struct aa_opt_cx;
63 
64 
65 AA_API int
66 aa_opt_solve( struct aa_opt_cx *cx, size_t n, double *x );
67 
68 
69 AA_API int
70 aa_opt_destroy( struct aa_opt_cx *cx );
71 
72 AA_API int
73 aa_opt_set_direction( struct aa_opt_cx *cx, enum aa_opt_direction );
74 
75 AA_API int
76 aa_opt_set_quad_obj_crs( struct aa_opt_cx *cx, size_t n,
77  const double *Q_values, int *Q_cols, int *Q_row_ptr );
78 
79 
80 AA_API int
81 aa_opt_set_type( struct aa_opt_cx *cx, size_t i, enum aa_opt_type type );
82 
83 typedef struct aa_opt_cx*
84 aa_opt_gmcreate_fun (
85  size_t m, size_t n,
86  const double *A, size_t ldA,
87  const double *b_lower, const double *b_upper,
88  const double *c,
89  const double *x_lower, const double *x_upper
90  );
91 
92 AA_API struct aa_opt_cx* aa_opt_lpsolve_gmcreate (
93  size_t m, size_t n,
94  const double *A, size_t ldA,
95  const double *b_lower, const double *b_upper,
96  const double *c,
97  const double *x_lower, const double *x_upper
98  );
99 
100 
101 AA_API struct aa_opt_cx* aa_opt_clp_gmcreate (
102  size_t m, size_t n,
103  const double *A, size_t ldA,
104  const double *b_lower, const double *b_upper,
105  const double *c,
106  const double *x_lower, const double *x_upper
107  );
108 
109 
110 AA_API struct aa_opt_cx* aa_opt_glpk_gmcreate (
111  size_t m, size_t n,
112  const double *A, size_t ldA,
113  const double *b_lower, const double *b_upper,
114  const double *c,
115  const double *x_lower, const double *x_upper
116  );
117 
118 AA_API struct aa_opt_cx* aa_opt_lpsolve_crscreate (
119  size_t m, size_t n,
120  const double *A_values, int *A_cols, int *A_row_ptr,
121  const double *b_lower, const double *b_upper,
122  const double *c,
123  const double *x_lower, const double *x_upper );
124 
125 
126 AA_API struct aa_opt_cx* aa_opt_clp_crscreate (
127  size_t m, size_t n,
128  const double *A_values, int *A_cols, int *A_row_ptr,
129  const double *b_lower, const double *b_upper,
130  const double *c,
131  const double *x_lower, const double *x_upper );
132 
133 
134 AA_API struct aa_opt_cx* aa_opt_glpk_crscreate (
135  size_t m, size_t n,
136  const double *A_values, int *A_cols, int *A_row_ptr,
137  const double *b_lower, const double *b_upper,
138  const double *c,
139  const double *x_lower, const double *x_upper );
140 
141 #endif //AMINO_OPT_H
#define AA_API
calling and name mangling convention for functions
Definition: amino.h:86