『实践』Yalmip建模+Cplex类求解
Posted 洛水三千
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了『实践』Yalmip建模+Cplex类求解相关的知识,希望对你有一定的参考价值。
Yalmip建模+Cplex类求解(文末附程序、文章和算例)
一、缘由
Yalmip只能设置部分Cplex的参数,所以需要调用Cplex类。而且optimize是Yalmip提供的常用函数,但此函数的返回结果参数有限。
二、解决方法
为了能够既利用Yalmip来建模(方便),又能调用Cplex类(功能齐全)。我们可以使用Yalmip提供的export函数来输出model,再新建一个Cplex类实体,将model中整理好的诸如Aineq、bineq等赋值给新建的Cplex类实体。
图2 F为目标函数,h为约束,ops为options。
下面举个具体例子,model存储着Yalmip建立的模型,cplex_milp为Cplex类实体,可以对其设置各种参数属性。Cplex的参数列表地址。
ps:model中的矩阵中的变量排序无法知道。
1 %yalmip设置
2 options = sdpsettings(\'solver\' ,\'cplex\');
3 options.showprogress = 1;%1为设置显示yalmip现在在做什么
4 options.verbose = 2;%设置显示信息程度,1为适度显示,2为完全显示。
5
6 [model,recoverymodel,diagnostic,internalmodel] = export(Constraints,Objective,options);%输出Yalmip模型
7 %定义一个Cplex类实体
8 cplex_milp = Cplex(\'Milp for HTC\');
9 cplex_milp.Model.sense = \'minimize\';
10 cplex_milp.Model.obj = model.f;
11 cplex_milp.Model.lb = model.lb;
12 cplex_milp.Model.ub = model.ub;
13 cplex_milp.Model.A = [model.Aineq;model.Aeq];
14 cplex_milp.Model.lhs = [-Inf.*ones(size(model.bineq,1),1);model.beq];
15 cplex_milp.Model.rhs = [model.bineq;model.beq];
16 cplex_milp.Model.ctype = model.ctype\';
20 cplex_milp.Param.mip.tolerances.mipgap.Cur = zk.solver_error;%相对MIP间隔容差,(精度)
21 cplex_milp.Param.threads.Cur = 1;%设置将由任何 CPLEX 并行优化器调用的并行线程的缺省数量。1为单线程
22 cplex_milp.Param.mip.display = 1;%决定在混合整数优化期间cplex报告到屏幕的内容。默认为2.
23 cplex_milp.Param.timelimit = 15;%设置对优化器的调用的最长时间(以秒为单位)
24 cplex_milp.writeModel(\'hmilp.lp\');%输出数学模型
25 cplex_milp.solve();
图3 上面代码中的model变量中的参数列表
图 4 Cplex类实体
三、相关网站
Yalmip(Matlab)+Cplex类求解电力机组组合问题的样例程序:http://www.scholat.com/showTeamScholar.html?id=867&changeTo=Ch&nav=5
以上是关于『实践』Yalmip建模+Cplex类求解的主要内容,如果未能解决你的问题,请参考以下文章
电力系统基于matlab YALMIP+CPLEX求解带储能的微电网优化调度问题含Matlab源码 2175期
PYQT5项目实践|实现Python+cplex 求解模型后,写入GUI小程序中,具体实践包括: CPLEX 的 求解整数规划模型和求解结果以表的形式输出在GUI界面中
CPLEX教程03java调用cplex求解一个TSP问题模型
配电网重构基于matlab yalmip求解含sop+二阶锥配电网重构问题含Matlab源码 2264期
微电网优化基于matlab YALMIP求解微网(光伏+风电+蓄电池+微电网+柴油机)优化调度问题含Matlab源码 2266期