nlopt在windows上的安装使用

nlopt在windows上的安装使用

目录


一、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"

三、代码

c 复制代码
#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 optimizer
  nlopt_opt opter=nlopt_create(NLOPT_LD_SLSQP, 2);
  // lower and upper bound
  nlopt_set_lower_bounds(opter, lb);
  nlopt_set_upper_bounds(opter, ub);
  // objective function
  nlopt_set_max_objective(opter, utility, NULL);
  // equality constraint
  nlopt_add_equality_constraint(opter, constraint, p, tol);
  // inequality constraint
  nlopt_add_inequality_constraint(opter, inconstraint, NULL, tol);
  // stopping criterion
  nlopt_set_xtol_rel(opter, tol);
  nlopt_set_ftol_abs(opter, tol);
  nlopt_set_force_stop(opter, tol);
  // optimize
  nlopt_result result=nlopt_optimize(opter, x, &f_max);
  if (result)
    printf("Maximum utility=%f, x=(%f,%f)\n", f_max, x[0], x[1]);
  // free
  nlopt_destroy(opter);
  return 0;
}
相关推荐
神里流~霜灭1 小时前
蓝桥备赛指南(12)· 省赛(构造or枚举)
c语言·数据结构·c++·算法·枚举·蓝桥·构造
双叶8361 小时前
(C语言)单链表(1.0)(单链表教程)(数据结构,指针)
c语言·开发语言·数据结构·算法·游戏
艾妮艾妮2 小时前
C语言常见3种排序
java·c语言·开发语言·c++·算法·c#·排序算法
charlie1145141913 小时前
STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出
c语言·stm32·单片机·嵌入式硬件·gpio·数据手册
矿渣渣3 小时前
int main(int argc, char **argv)C语言主函数参数解析
c语言·开发语言
阿让啊3 小时前
bootloader+APP中,有些APP引脚无法正常使用?
c语言·开发语言·stm32·单片机·嵌入式硬件
代码AC不AC3 小时前
【数据结构】队列
c语言·数据结构·学习·队列·深度讲解
小林熬夜学编程3 小时前
【高并发内存池】第八弹---脱离new的定长内存池与多线程malloc测试
c语言·开发语言·数据结构·c++·算法·哈希算法
CYRUS_STUDIO5 小时前
Frida Hook Android Native 函数
android·c语言·逆向
W说编程5 小时前
《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例
c语言·网络·网络协议·tcp/ip·unix·tcp