Good afternoon nlopt users.

How are you?

I installed nlopt and tried to run the tutorial example on c. Here is my
file:
----------------------------------------------------------------------------------
#include <math.h>
#include <nlopt.h>

double myfunc(unsigned n, const double *x, double *grad, void *my_func_data)
{
    if (grad) {
        grad[0] = 0.0;
        grad[1] = 0.5 / sqrt(x[1]);
    }
    return sqrt(x[1]);
}
typedef struct {
    double a, b;
} my_constraint_data;

double myconstraint(unsigned n, const double *x, double *grad, void *data)
{
    my_constraint_data *d = (my_constraint_data *) data;
    double a = d->a, b = d->b;
    if (grad) {
        grad[0] = 3 * a * (a*x[0] + b) * (a*x[0] + b);
        grad[1] = -1.0;
    }
    return ((a*x[0] + b) * (a*x[0] + b) * (a*x[0] + b) - x[1]);
 }

double lb[2] = { -HUGE_VAL, 0 }; /* lower bounds */
nlopt_opt opt;

opt=nlopt_create(NLOPT_LD_MMA, 2); /* algorithm and dimensionality */
nlopt_set_lower_bounds(opt, lb);
nlopt_set_min_objective(opt, myfunc, NULL);
my_constraint_data data[2] = { {2,0}, {-1,1} };
nlopt_add_inequality_constraint(opt, myconstraint, &data[0], 1e-8);
nlopt_add_inequality_constraint(opt, myconstraint, &data[1], 1e-8);
nlopt_set_xtol_rel(opt, 1e-4);
double x[2] = { 1.234, 5.678 };  /* some initial guess */
double minf; /* the minimum objective value, upon return */

if (nlopt_optimize(opt, x, &minf) < 0) {
    printf("nlopt failed!\n");
}
else {
    printf("found minimum at f(%g,%g) = %0.10g\n", x[0], x[1], minf);
}
nlopt_destroy(opt);
------------------------------------------------------------------------
And here is the output of
gcc tutorial.c -o tutorial -lnlopt -lm
called from the same directory where tutorial.c is
-------------------------------------------------------------------------
tutorial.c:30:1: warning: data definition has no type or storage class
[enabled by default]
tutorial.c:30:1: error: conflicting types for ‘opt’
tutorial.c:28:11: note: previous declaration of ‘opt’ was here
tutorial.c:30:5: warning: initialization makes integer from pointer without
a cast [enabled by default]
tutorial.c:30:1: error: initializer element is not constant
tutorial.c:31:1: warning: data definition has no type or storage class
[enabled by default]
tutorial.c:31:1: warning: parameter names (without types) in function
declaration [enabled by default]
tutorial.c:32:38: error: expected ‘)’ before ‘(’ token
tutorial.c:34:52: error: expected ‘)’ before ‘&’ token
tutorial.c:35:52: error: expected ‘)’ before ‘&’ token
tutorial.c:36:25: error: expected ‘)’ before numeric constant
tutorial.c:40:1: error: expected identifier or ‘(’ before ‘if’
tutorial.c:43:1: error: expected identifier or ‘(’ before ‘else’
tutorial.c:46:1: warning: data definition has no type or storage class
[enabled by default]
tutorial.c:46:1: warning: parameter names (without types) in function
declaration [enabled by default]
tutorial.c:46:1: error: conflicting types for ‘nlopt_destroy’
In file included from tutorial.c:2:0:
/usr/local/include/nlopt.h:194:20: note: previous declaration of
‘nlopt_destroy’ was here
--------------------------------------------------------------------
Please help me to figure out what I did wrong.

I would greatly appreciate your help

Best
Sasha
_______________________________________________
NLopt-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/nlopt-discuss

Reply via email to