1. /*
  2. * main.c
  3. *
  4. * Created on: Oct 9, 2018
  5. * Author: lgh
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <math.h>
  10. #include "nlopt.h"
  11. #define INF 1e10
  12. int i = ;
  13.  
  14. double step = ;
  15.  
  16. //目标函数;
  17. double utility(unsigned n, const double *x, double *grad, void *data)
  18. {
  19. if (grad) {
  20. grad[] = (-1.0 + x[])*step;
  21. grad[] = (-2.0 + x[])*step;
  22. }
  23. printf("迭代次数 i= %d, x[0]=%f, x[1]= %f,f(x1,x2)=%f\n",
  24. i++, x[], x[], -x[] - * x[] + 0.5*x[] * x[] + 0.5*x[] * x[]);
  25. return (-x[] - * x[] + 0.5*x[] * x[] + 0.5*x[] * x[]);
  26. }
  27.  
  28. //不等式限制条件;
  29. double inconstraint_1(unsigned n, const double *x, double *grad, void *data)
  30. {
  31. if (grad) {
  32. grad[] = 2.0*step;
  33. grad[] = 3.0*step;
  34. }
  35. return ( * x[] + * x[] - );
  36. }
  37.  
  38. //不等式限制条件;
  39. double inconstraint_2(unsigned n, const double *x, double *grad, void *data)
  40. {
  41. if (grad) {
  42. grad[] = 1.0*step;
  43. grad[] = 4.0*step;
  44. }
  45. return (x[] + * x[] - );
  46. }
  47.  
  48. //不等式限制条件;
  49. double inconstraint_3(unsigned n, const double *x, double *grad, void *data)
  50. {
  51. if (grad) {
  52. grad[] = 2.0*step;
  53. grad[] = 6.0*x[] * step;
  54. }
  55. return ( * x[] + * x[] * x[] - );
  56. }
  57.  
  58. int main(int argc, char const *argv[])
  59. {
  60. double tol = 1e-;
  61. double lb[] = { , }; //x1、x2的下边界;
  62. double ub[] = { INF,INF };
  63. double x[] = { , }; //给x1、x2赋予初始值;
  64. double f_min;
  65.  
  66. nlopt_opt opter = nlopt_create(NLOPT_LD_SLSQP/*NLOPT_LD_MMA*/, );
  67.  
  68. //设置自变量下限;
  69. nlopt_set_lower_bounds(opter, lb);
  70.  
  71. // 目标函数;
  72. nlopt_set_min_objective(opter, utility, NULL);
  73.  
  74. // 不等式约束;
  75. nlopt_add_inequality_constraint(opter, inconstraint_1, NULL, tol);
  76. nlopt_add_inequality_constraint(opter, inconstraint_2, NULL, tol);
  77. nlopt_add_inequality_constraint(opter, inconstraint_3, NULL, tol);
  78.  
  79. // 停止时需要的条件;
  80. nlopt_set_xtol_rel(opter, tol);
  81.  
  82. // 开始优化;
  83. nlopt_result result = nlopt_optimize(opter, x, &f_min);
  84.  
  85. if (result)
  86. {
  87. printf("极小值=%g, x=(%g,%g)\n", f_min, x[], x[]);
  88. }
  89.  
  90. //free
  91. nlopt_destroy(opter);
  92. getchar();
  93. return ;
  94. }

nlopt 二次优化的更多相关文章

  1. 12. 亿级流量电商系统JVM模型参数二次优化

    亿级流量电商系统JVM模型参数预估方案,在原来的基础上采用ParNew+CMS垃圾收集器 一.亿级流量分析及jvm参数设置 1. 需求分析 大促在即,拥有亿级流量的电商平台开发了一个订单系统,我们应该 ...

  2. paper 5:支持向量机系列二: Support Vector —— 介绍支持向量机目标函数的 dual 优化推导,并得出“支持向量”的概念。

    paper 4中介绍了支持向量机,结果说到 Maximum Margin Classifier ,到最后都没有说“支持向量”到底是什么东西.不妨回忆一下上次最后一张图: 可以看到两个支撑着中间的 ga ...

  3. (转载)SVM-基础(二)

    支持向量机: Support Vector  by pluskid, on 2010-09-10, in Machine Learning     52 comments 本文是"支持向量机 ...

  4. 支持向量机(SVM)复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略 ...

  5. Linq语言性能比较

    我不只一次听到不少做技术的朋友随口一句,“linq性能是最差的”,由于缺少具体的数字比照也就没在意,但心里隐隐觉得事实应该不是这样的,我记得我第一次听到有人贬低C# 3.0是在我工作后不久的一个夏季, ...

  6. SVM系列之拉格朗日对偶

    在学习SVM(Support Vector Machine) 支持向量机时,对于线性可分的分类样本求出的分类函数为: 其中,分类超平面可以表示为:

  7. PRML读书会第七章 Sparse Kernel Machines(支持向量机, support vector machine ,KKT条件,RVM)

    主讲人 网神 (新浪微博: @豆角茄子麻酱凉面) 网神(66707180) 18:59:22  大家好,今天一起交流下PRML第7章.第六章核函数里提到,有一类机器学习算法,不是对参数做点估计或求其分 ...

  8. opencv7-ml之svm

    因为<opencv_tutorial>这部分只有两个例子,就先暂时介绍两个例子好了,在refman中ml板块有:统计模型.普通的贝叶斯分类器.KNN.SVM.决策树.boosting.随机 ...

  9. Deep Learning in NLP (一)词向量和语言模型

    原文转载:http://licstar.net/archives/328 Deep Learning 算法已经在图像和音频领域取得了惊人的成果,但是在 NLP 领域中尚未见到如此激动人心的结果.关于这 ...

随机推荐

  1. 关于浏览器请求PHP一次请求执行了两次

    测试同学今天又双叒反馈了一个Bug 继上次解决了重复请求的问题之后,本来就以为可以万事大吉了,没想到我还是太年轻了,测试同学说,不行啊,老哥,你这个我点击了一次创建居然创建出来两条数据!!并且查看日志 ...

  2. SVG-JS操作

    JavaScript操作 DOM操作 如果 SVG 代码直接写在 HTML 网页之中,它就成为网页 DOM 的一部分,可以直接用 DOM 操作. <svg id="mysvg" ...

  3. 25.Flutter中的表单 Radio RadioListTile Switch SwitchListTile 以及表单组件实现一个简单的学员登记系统(下)

    四.Radio.RadioListTile单选按钮组件 Radio常用属性: value单选的值. onChanged改变时触发. activeColor:选中的颜色.背景颜色 groupValue: ...

  4. 阶段5 3.微服务项目【学成在线】_day09 课程预览 Eureka Feign_16-课程预览功能开发-接口测试

    cms和课程的微服务重启 从数据库内找一条数据 进入到了断点 拼装课程信息 ,然后进行远程调用 抛出异常 可能是开了两个cms服务的事,负载均衡 到了另外一个服务里面 ,关掉一个 把02关掉,重启cm ...

  5. 算法习题---4-2正方形(UVa201)

    一:题目 判断一个点阵中含有几个正方形(数正方形) 如图例中:有2个边长为1的正方形,1个边长为2的正方形 (一)题目详解 (二)样例输入 4 表示每行每列各有4个顶点 16 表示整个点阵中共有16条 ...

  6. (十九)oracle 基础使用以及sql语句基础

    oracle的安装与卸载 要记住数据库口令,适用于sys.system.sysman/dbsnmp等账户,而scott帐号密码默认为tiger, 以oracle  10g来说,scott账户默认是lo ...

  7. iOS-Foundation各种NS

    1.1 NSRange NSRange range = NSMakeRange(2, 4);//location=2,len=4    NSString *str = @"i love oc ...

  8. celery的log如何传递给django,由django管理

    celery自己管理log目录 celery worker --autoscale=4,1 --app=erebus.celeryapp:app -l info -f /home/admin/outp ...

  9. C语言获取文件大小相关操作

    C语言获取文件大小相关操作 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明 通常在希望从文件中把数据全都出来赋值给一个数组或者某一个指针,然后再进行相关 ...

  10. Lnamp的高级网站架构+动静分离+反向代理

    Lnamp的架构 环境: 图上面是5台服务器 192.168.1.116 是nginx负载均衡+动静分离 192.168.1.117:linux+apache+php 192.168.1.118:li ...