【Gurobi报错解决】Solver not applicable (gurobi does not support signomial constraints)

简介: 【Gurobi报错解决】Solver not applicable (gurobi does not support signomial constraints)

电力系统优化方向小白,安装 Yalmip Gurobi Cplex 之后,开始学习复现一些论文…

问题描述

今天在复现论文《考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化》时,用 gurobi 求解遇到报错:

>> test_carbon
Linear matrix variable 1x5 (full, real, 5 variables)
Coefficient range: 1 to 1
Warning: Solver not applicable (gurobi does not support signomial constraints)
错误使用 test_carbon (line 286)
求解出错

意思是求解器不适用 (gurobi不支持符号约束)

虽然只是警告,但是出不了结果,只好检查程序中的约束部分

用 Cplex 求解同样出现报错:

>> test_carbon
Linear matrix variable 1x5 (full, real, 5 variables)
Coefficient range: 1 to 1
错误使用 sdpsettings (line 370)
Verbosity level should be an non-negative integer.
出错 test_carbon (line 278)
ops=sdpsettings('solver','cplex','verbose','2','usex0','0');

但这个报错的原因似乎不一样。

问题原因

对应论文部分:

我的代码部分:

C=[C, 
    P_CHP_e==eta_CHP_e*P_g_CHP, % CHP转换电能
    P_CHP_h==eta_CHP_h*P_g_CHP, % CHP转换热能
    P_g_CHP_min<=P_g_CHP<=P_g_CHP_max, % 输入CHP天然气上下限
    delta_P_g_CHP_min<=P_g_CHP(2:24)-P_g_CHP(1:23)<=delta_P_g_CHP_max, % CHP爬坡上下限
    k_CHP_min<=(P_CHP_h./P_CHP_e)<=k_CHP_max, % 热电比上下限
    ];
C=[C, 
    P_HFC_e==eta_HFC_e*P_H2_HFC, % HFC转换电能
    P_HFC_h==eta_HFC_h*P_H2_HFC, % HFC转换热能
    P_H2_HFC_min<=P_H2_HFC<=P_H2_HFC_max, % 输入HFC氢能上下限
    delta_P_H2_HFC_min<=P_H2_HFC(2:24)-P_H2_HFC(1:23)<=delta_P_H2_HFC_max, % HFC爬坡上下限
    k_HFC_min<=(P_HFC_h./P_HFC_e)<=k_HFC_max, % 热电比上下限
    ];

这部分代码是定义 CHP(热电联产)和 HFC(氢燃料电池)的一些约束,其余部分的约束更加简短,盲猜是热电比上下限部分的代码出了问题,因为出现了 (P_CHP_h./P_CHP_e) 和 (P_HFC_h./P_HFC_e) ,而 P_CHP_h、P_CHP_h、P_HFC_h、P_HFC_e 在前面定义过,都是单独的变量

P_CHP_e=sdpvar(1,24); % CHP输出电能
P_CHP_h=sdpvar(1,24); % CHP输出热能
P_HFC_e=sdpvar(1,24); % HFC输出电能
P_HFC_h=sdpvar(1,24); % HFC输出热能

由此约束部分出现了两个变量。

问题解决

将不等式拆成两个:

C=[C, 
    P_CHP_e==eta_CHP_e*P_g_CHP, % CHP转换电能
    P_CHP_h==eta_CHP_h*P_g_CHP, % CHP转换热能
    P_g_CHP_min<=P_g_CHP<=P_g_CHP_max, % 输入CHP天然气上下限
    delta_P_g_CHP_min<=P_g_CHP(2:24)-P_g_CHP(1:23)<=delta_P_g_CHP_max, % CHP爬坡上下限
    0.5*P_CHP_e<=P_CHP_h, %热电比上下限
    P_CHP_h<=2.1*P_CHP_e, %热电比上下限
    ];
C=[C, 
    P_HFC_e==eta_HFC_e*P_H2_HFC, % HFC转换电能
    P_HFC_h==eta_HFC_h*P_H2_HFC, % HFC转换热能
    P_H2_HFC_min<=P_H2_HFC<=P_H2_HFC_max, % 输入HFC氢能上下限
    delta_P_H2_HFC_min<=P_H2_HFC(2:24)-P_H2_HFC(1:23)<=delta_P_H2_HFC_max, % HFC爬坡上下限
    0.5*P_HFC_e<=P_HFC_h, %HFC的热电比上下限
  P_HFC_h<=2.1*P_HFC_e, %HFC的热电比上下限
    ];

保证每个约束里面只有一个变量。

另外,上述代码在加了热电比上下限的约束之后,热电比仍然不可调(一直都是1),需要把下述代码注释之后热电比才有变化:

P_CHP_h==eta_CHP_h*P_g_CHP, % CHP转换热能
P_HFC_h==eta_HFC_h*P_H2_HFC, % HFC转换热能

论文:[1]陈锦鹏,胡志坚,陈颖光等.考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化[J].电力自动化设备,2021,41(09):48-55.DOI:10.16081/j.epae.202109032.

相关文章
鲁棒优化入门(二)——基于matlab+yalmip求解鲁棒优化问题
鲁棒优化的含义就是在最恶劣的情况下(不确定变量的取值使目标函数最大),求出满足约束条件,并且能使目标函数最优的决策变量。 yalmip工具箱可以用来求解鲁棒优化问题,但还是有一定局限性的,并不能处理任意形式的不确定集下的鲁棒优化问题,一般来说,当鲁棒优化问题的不确定集合为箱型不确定集、椭球不确定集以及多面体不确定集时,都可以用yalmip工具箱求解(具体细节可参考官方文档)。本文介绍了利用yalmip求鲁棒优化问题的一般方法。......
|
7月前
|
机器学习/深度学习 算法 Python
【分布鲁棒】基于Wasserstein距离的两阶段分布鲁棒简易模型【对偶转化】【线性决策】(Matlab代码实现)
【分布鲁棒】基于Wasserstein距离的两阶段分布鲁棒简易模型【对偶转化】【线性决策】(Matlab代码实现)
439 0
|
算法 调度
电网两阶段鲁棒优化调度模型(含matlab程序)
电网两阶段鲁棒优化调度模型(含matlab程序)
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
733 0
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【免费资料】IEEE33节点系统参数及拓扑图visio
初学者入门配电网可参考经典的IEEE 33节点系统,此系统在文献中广泛应用。资源包括节点和支路参数的Excel表格及Visio的网络拓扑图,可免费下载。配电网以闭环设计增强灵活性和可靠性,故障恢复涉及网络拓扑约束。提供的MATLAB相关链接探讨了孤岛、重构及故障恢复策略。
|
存储 算法 调度
Matlab+Yalmip两阶段鲁棒优化通用编程指南
主要包含8大内容: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题。 ⑤.使用对偶变换求解两阶段鲁棒优化的子问题。 ⑥.采用Yalmip工具箱的内置函数,将线性约束写成紧凑矩阵形式的方法。 ⑦.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的KKT条件。 ⑧.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的对偶问题。
【复现】【免费】基于多时间尺度滚动优化的多能源微网双层调度模型
【复现】【免费】基于多时间尺度滚动优化的多能源微网双层调度模型
双层优化入门(1)—基本原理与求解方法(附matlab代码)
双层优化问题(Bilevel Programming Problems),也被称为双层规划,最早由Stackelberg与1934年在经济学相关研究中提出,因此也被称为Stackelberg问题。双层规划问题一般具有层次性、独立性、冲突性、优先性和自主性等特点。 本文介绍了双层优化的原理与求解方法,并提供了相应的matlab代码供参考学习。
|
存储 人工智能 算法
鲁棒优化入门(4)-两阶段鲁棒优化及行列生成算法(C&CG)超详细讲解
        鲁棒优化是应对数据不确定性的一种优化方法,但单阶段鲁棒优化过于保守。为了解决这一问题,引入了两阶段鲁棒优化(Two-stage Robust Optimization)以及更一般的多阶段鲁棒优化,其核心思想是将决策问题分为两个阶段。第一阶段是进行初步决策,第二阶段是根据第一阶段的决策结果制定更好的决策策略,应对数据不确定性的影响。这种方法可以降低保守性,提高鲁棒性。