『实践』Yalmip建模+Cplex类求解

Yalmip建模+Cplex类求解

一、缘由

    Yalmip只能设置部分Cplex的参数,所以需要调用Cplex类。而且optimize是Yalmip提供的常用函数,但此函数的返回结果参数有限。

图1  Yalmip网站对于Cplex求解器的说明

 

二、解决方法

  为了能够既利用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类实体

三、相关网站

  https://www.ibm.com/support/knowledgecenter/zh/SSSA5P_12.7.0/ilog.odms.cplex.help/refmatlabcplex/html/classCplex.html

  https://www.ibm.com/support/knowledgecenter/zh/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/Parameters/topics/introListAlpha.html

  https://yalmip.github.io/command/export/

转载于:https://www.cnblogs.com/landiljy/p/7750178.html

### 使用 YALMIPCPLEX 求解风光氢相关优化问题 #### 1. 风光氢优化问题概述 风光氢相关的优化问题是综合能源系统中的重要研究方向,涉及光伏发电、风力发电以及氢能存储等多个环节。这问题通常可以被建模为线性规划 (LP) 或混合整数线性规划 (MILP),并利用高效的求解器如 CPLEX计算[^3]。 #### 2. 建立优化模型 在 MATLAB 中使用 YALMIP 工具箱建立优化模型时,需定义决策变量、目标函数和约束条件。以下是具体实现方法: - **决策变量**: 定义与光伏、风电、储能设备功率分配有关的变量。 - **目标函数**: 设定最小化成本或最大化效益的目标,例如总运成本最低。 - **约束条件**: 考虑能量平衡、设备容量限制等因素。 ```matlab % 初始化 YALMIP 变量 sdpvar P_pv P_wind P_hydrogen; % 设置目标函数(假设为最小化总成本) Objective = Cost_PV * P_pv + Cost_Wind * P_wind + Cost_Hydrogen * P_hydrogen; % 添加约束条件 Constraints = [P_pv >= 0, P_wind >= 0, P_hydrogen >= 0]; Constraints = [Constraints, P_pv <= Max_PV_Output]; Constraints = [Constraints, P_wind <= Max_Wind_Output]; % 解决问题 optimize(Constraints, Objective); ``` 上述代码片段展示了如何构建基本的优化框架,并通过 `optimize` 函数调用求解器[^4]。 #### 3. 调用 CPLEX 求解器 当完成模型搭建后,在 YALMIP 环境中指定 CPLEX 作为求解器即可执优化过程。这一步骤无需额外编写复杂代码,只需配置求解参数如下所示: ```matlab % 设置求解器为 CPLEX options = sdpsettings('solver', 'cplex'); % 执优化 optimize(Constraints, Objective, options); % 获取结果 disp(value(P_pv)); disp(value(P_wind)); disp(value(P_hydrogen)); ``` 此部分实现了对特定求解器的选择操作,并展示了解算后的变量取值输出方式[^2]。 #### 4. 结果分析与验证 经过以上步骤获得的结果应进一步检验其合理性及可性。比如检查是否满足所有物理定律和技术指标的要求等。如果发现异常,则可能需要调整初始设定或者重新审视数据准确性等问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值