【实践】Yalmip使用Knitro的一些总结
Yalmip使用Knitro的一些总结
1.软件
Knitro 11.0.1
Win64(包含安装包和确定机器ID的软件):链接:https://pan.baidu.com/s/14IfxlAdo3myYiAeCGzfSQQ 密码:2k9q
图1 Knitro 11.0.1 win64 下载地址
官网获取地址:https://www.artelys.com/en/optimization-tools/knitro/downloads
通过学术邮箱可以申请一个月的完整版使用权。
图2 Knitro 的申请
Yalmip的获取教程见https://www.cnblogs.com/landiljy/p/6776434.html
2.Yalmip使用Knitro中发现的错误
- Yalmip和Knitro都安装好以后,命令行窗口输入yalmiptest,看下是否找到knitro求解器
- Yalmip中调用knitro。见下面代码
options = sdpsettings('verbose',2,'solver','knitro','savesolveroutput',1);%verbose设置显示信息的程度;savesolveroutput默认为0,表示不保存求解结果,设为1表示保存求解结果。
sol = optimize(Constraints,F,options);%Constraints为约束;F为目标函数;options为属性。
- 按照上面步骤设置savesolveroutput=1后,报错。
- 然后查看了Yalmip调用Knitro求解器的函数文件,发现了问题。方法如下:
- 按照路径F:\MATLAB2014\AddTool\YALMIP-master\solvers\callknitro.m(红色部分为软件里的路径部分),打开callknitro.m文件。
- 可以发现图4中保存计算结果的语句中fmin语句有错(没有fmin这个变量)。图3中返回的是fval。
- 其中这里可以参考:http://blog.sina.com.cn/s/blog_50c154510102wusb.html
图3 Yalmip调用Knitro的Matlab版本接口
图4 Yalmip调用Knitro求解器的函数
3.Yalmip设置Knitro的参数
options = sdpsettings('verbose',2,'solver','knitro','savesolveroutput',1);%verbose设置显示信息的程度;savesolveroutput默认为0,表示不保存求解结果,设为1表示保存求解结果。
sol = optimize(Constraints,F,options);%Constraints为约束;F为目标函数;options为属性。
- 设置Knitro参数我们可以通过设置options来实现,不过options中的Knitro的参数名称和Knitro给出的参数说明文档对不上。所以建议使用下面的设置参数的方法。
1.首先找到Knitro的Matlab版本的Nlp例子,其路径为:C:\Program Files\Artelys\Knitro 11.0.1\knitromatlab,下面代码中的knitromatlab是Knitro的matlab的调用接口。
[x,fval,exitflag,output,lambda,grad,hess] = knitromatlab(@objfun,x0,A,b,Aeq,beq,lb,ub,@constfun,extendedFeatures,[],'nlp2options.opt');%红色字体是参数设置文档
2.图5中的exampleNLP2.m文件是Knitro给的NLP的例子,其中nlp2options.opt是Knitro参数设置文档,参数设置的具体格式见图6。
3.图6是nlp2options.opt文件里的内容。其中加了‘#’的语句,则‘#’后面的语句不执行(即蓝色框)。红色框为一个参数的设置语句(参数详见:https://www.gams.com/latest/docs/S_KNITRO.html#KNITROopttol),后半句为说明这个参数对应Yalmip中的参数名称(即图7中蓝色框部分).
4.那么我们将nlp2options.opt文件拷贝到我们自己项目的路径下,然后修改Yalmip调用Knitro的函数文件(callknitro.m)中的内容,具体修改见下面的代码红色字体部分。
solvertime = tic;
%自己加的对options的设置---start----2018.06.27
model.options.knitro.optionsfile = 'nlp2options.opt'; %参数设置文档
%自己加的对options的设置---end----
[xout,fval,exitflag,output,lambda] = knitromatlab_mip(funcs.objective,model.x0,model.A,full(model.b),model.Aeq,full(model.beq),model.lb,model.ub,funcs.constraints,model.xType,model.objFnType,model.cineqFnType,model.extendedFeatures,model.options.knitro,model.options.knitro.optionsfile);
solvertime = toc(solvertime);
5.那么我们以后要修改Knitro的参数,只需要在callknitro.m文件中修改即可。
图5 Knitro的Matlab版本的例子
图6 Knitro的参数设置文档
图7 Yalmip中Knitro的参数列表
4. Knitro返回的代码编号说明
具体见:https://www.artelys.com/tools/knitro_doc/3_referenceManual/returnCodes.html#returncodes
5.Knitro的用户使用手册
具体见: https://www.artelys.com/tools/knitro_doc/2_userGuide.html
【实践】Yalmip使用Knitro的一些总结的更多相关文章
- 『实践』Yalmip获取对偶函数乘子
『实践』Yalmip获取对偶函数乘子 一.sdpsetting设置 Yalmip网站给出的说明 savesolveroutput默认为0,需要设置为1才会保存输出结果. 下面是我模型的约束个数: 二. ...
- 『实践』Yalmip+Ipopt+Cplex使用手册
Yalmip+Ipopt+Cplex使用手册 1.软件版本 Cplex 12.6.2,Matlab R2014a,Ipopt 3.12.9,Yalmip 2.Cplex添加方法 官方下载地址: htt ...
- 『实践』Yalmip建模+Cplex类求解
Yalmip建模+Cplex类求解 一.缘由 Yalmip只能设置部分Cplex的参数,所以需要调用Cplex类.而且optimize是Yalmip提供的常用函数,但此函数的返回结果参数有限. 图1 ...
- webp图片实践之路
最近,我们在项目中实践了webp图片,并且抽离出了工具模块,整合到了项目的基础模板中.传闻IOS10也将要支持webp,那么使用webp带来的性能提升将更加明显.估计在不久的将来,webp会成为标配. ...
- Hangfire项目实践分享
Hangfire项目实践分享 目录 Hangfire项目实践分享 目录 什么是Hangfire Hangfire基础 基于队列的任务处理(Fire-and-forget jobs) 延迟任务执行(De ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- Logstash实践: 分布式系统的日志监控
文/赵杰 2015.11.04 1. 前言 服务端日志你有多重视? 我们没有日志 有日志,但基本不去控制需要输出的内容 经常微调日志,只输出我们想看和有用的 经常监控日志,一方面帮助日志微调,一方面及 ...
- 【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器
一.反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从 ...
- Windows平台分布式架构实践 - 负载均衡
概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...
随机推荐
- 51nod1237 最大公约数之和 V3
题意:求 解: 最后一步转化是因为phi * I = Id,故Id * miu = phi 第二步是反演,中间省略了几步... 然后就这样A了......最终式子是个整除分块,后面用杜教筛求一下phi ...
- 初识Quartz之第一个Quartz实例
转: 初识Quartz之第一个Quartz实例 2018年04月09日 17:07:31 carson0408 阅读数:366 版权声明:本文为博主原创文章,未经博主允许不得转载. https:/ ...
- 源码研究:php变量
一:php中的变量类型 1.标量类型:布尔型 bool,整型 int,浮点型 float,字符串型 string2.复杂类型:数组 array,对象 object3.特殊类型:NULL,资源 reso ...
- JVM综合调优汇总
一.堆大小设置 JVM 中最大堆大小有三方面限制: 1. 相关操作系统的数据模型(32-bt还是64-bit)限制: 2. 系统的可用虚拟内存限制: 3. 系统的可用物理内存限制. 32位系统下,一般 ...
- HTML格式化标签
除了div.p.h1~h6.a.span这几个极常用的标签外,HTML还有一些不常见的标签(10个,5对:加粗.斜体.大小.上下标.特殊),默认效果如下: 当然,我们习惯用css编写效果来替代这些效果 ...
- libevent-2.0.so.5 (安装MEMCACHED问题)
今天安装memcache启动服务时出现 error while loading shared libraries: libevent-2.0.so.5: cannot open shared obje ...
- 如何正确的覆盖equals和hashCode
一.Object所有的非final方法 public boolean equals(Object obj) public native int hashCode() public String toS ...
- Gym - 100269F Flight Boarding Optimization(dp+树状数组)
原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...
- PHP 错误 系列:编码格式错误解决
一.Phalcon模型代码日志错误代码 错误页面显示: Log日志错误代码: PHP message: PHP Fatal error: Namespace declaration statement ...
- 五校联考 running (欧拉函数)
题面 \(solution:\) 讲真吧,这道题真的出得,嗯,太恐怖了.考场上这道题真的把我看懵了,这道题以前是见过的,但欧拉函数?我学过吗?一道容斥都要超时的题目,我都要为我自己点根香了,拿着gcd ...