nlopt在windows上的安装使用
nlopt在windows上的安装使用
目录
- nlopt在windows上的安装使用
- 一、nlopt下载
- 二、def转lib
- 三、代码
一、nlopt下载
1.下载nlopt库:https://nlopt.readthedocs.io/en/latest/
2.解压
3.下载dll和def:http://ab-initio.mit.edu/wiki/index.php?title=NLopt_on_Windows&redirect=no
二、def转lib
1.利用mingw中的dlltool工具,将def换位lib:dlltool -d libnlopt-0.def -l libnlopt-0.lib -k
2.把nlopt.h、nlopt.c和libnlopt-0.lib拉到文件夹下
3.在tasks.json的args里加上"D:\test\libnlopt-0.lib"
三、代码
#include <stdio.h>
#include <math.h>
#include "nlopt.h"
#define INF (1.0/0.0)double utility(unsigned n, const double *x, double *grad, void *data){grad[0]=1.0/x[0];grad[1]=1.0/x[1];printf("%f, %f, %f ", x[0],x[1],log(x[0])+log(x[1]));return log(x[0])+log(x[1]);
}double constraint(unsigned n, const double *x, double *grad, void *data){double *p=(double *)data;grad[0]=*p;grad[1]=*(p+1);printf("Constraint: %f\n", x[0]*(*p)+x[1]*(*(p+1))-5);return x[0]*(*p)+x[1]*(*(p+1))-5;
}double inconstraint(unsigned n, const double *x, double *grad, void *data){grad[0]=1;grad[1]=-1;return x[0]-x[1];
}int main(int argc, char const *argv[]) {double p[2]={1,2};double tol=1e-8;double lb[2]={-INF,-INF};double ub[2]={INF,INF};double x[2]={1,1};double f_max=-INF;// set up optimizernlopt_opt opter=nlopt_create(NLOPT_LD_SLSQP, 2);// lower and upper boundnlopt_set_lower_bounds(opter, lb);nlopt_set_upper_bounds(opter, ub);// objective functionnlopt_set_max_objective(opter, utility, NULL);// equality constraintnlopt_add_equality_constraint(opter, constraint, p, tol);// inequality constraintnlopt_add_inequality_constraint(opter, inconstraint, NULL, tol);// stopping criterionnlopt_set_xtol_rel(opter, tol);nlopt_set_ftol_abs(opter, tol);nlopt_set_force_stop(opter, tol);// optimizenlopt_result result=nlopt_optimize(opter, x, &f_max);if (result)printf("Maximum utility=%f, x=(%f,%f)\n", f_max, x[0], x[1]);// freenlopt_destroy(opter);return 0;
}