如何为COSMO求解器设置无限下界且无需额外定义下界矩阵l
COSMO求解器无穷边界设置方法
COSMO求解器的COSMO.Box约束原生支持无穷值作为边界参数,和你之前用lb=[-inf, -inf, -inf]的设置逻辑完全一致,无需提前定义下界矩阵l即可运行,具体操作如下:
实现方法
你只需要在构造Box约束时,将下界参数直接设置为和上界h维度匹配的全-Inf数组即可,不需要读取npz文件中的l矩阵。
修改后的代码示例
@time begin using COSMO, SparseArrays, LinearAlgebra using NPZ Matrix10 = npzread("C:/Users/skqkr/Desktop/Semesterarbeit/Chiwan_Q1.npz") q = Matrix10["p"]; P = sparse(Matrix10["Q"]); A = sparse(Matrix10["G"]); h = Matrix10["h"]; # 无需读取l矩阵,删掉该行即可 settings = COSMO.Settings(verbose=true); # 直接构造无下界的Box约束 constraint1 = COSMO.Constraint(A, zeros(size(h)), COSMO.Box(-Inf * ones(size(h)), h)); model = COSMO.Model(); assemble!(model, P, q, constraint1, settings = settings); res_box = COSMO.optimize!(model); end
补充说明
- 如果是部分维度需要设置下界、部分维度无下界,可手动构造下界数组,无需下界的对应位置填入
-Inf即可,例如lb = [2.5, -Inf, 1.0]的混合写法也可正常运行 - 无穷边界设置不会额外增加求解开销,和常规边界设置的运行效率一致,不影响跨求解器的效率对比测试
内容的提问来源于stack exchange,提问作者Chiwan Park
相关产品推荐
相关产品推荐

