lanl-ansi / PowerModelsDistribution.jl

A Julia/JuMP Package for Unbalanced Power Network Optimization
https://lanl-ansi.github.io/PowerModelsDistribution.jl/stable/
Other
146 stars 43 forks source link

Possible issue with SOCWRPowerModel #145

Closed MartaVanin closed 5 years ago

MartaVanin commented 5 years ago

Hello all, I was trying to run an OPF with the SOCWR formulation and obtained unexpected results:

`` using PowerModels using ThreePhasePowerModels using InfrastructureModels using Ipopt using JuMP using Mosek

data = ThreePhasePowerModels.parse_file(".\test\data\opendss\case3_unbalanced.dss")

result_ACOPF = run_tp_opf(data, ACPPowerModel, IpoptSolver()) result_SOCOPF = run_tp_opf(data, SOCWRPowerModel, IpoptSolver()) result_SOCOPF_conic = run_tp_opf_bf(data, SOCConicUBFPowerModel, MosekSolver())

print(result_ACOPF["objective"]) print("\n") print(result_SOCOPF["objective"]) print("\n") print(result_SOCOPF_conic["objective"])

result_ACOPF_obj = 0.021481101490431413 result_SOCOPF_obj = -2.851668441519614 result_SOCOPF_conic_obj = 0.02117942578643128

sanderclaeys commented 5 years ago

Hey Marta,

What do you mean with 'pg at the transformer'? case3_unbalanced.dss does not contain a transformer. The relaxations have not been extended yet for transformers.

Greetings, Sander

frederikgeth commented 5 years ago

The implemented SOC relaxations are not equivalent.

Because the implemented SOCWRPowerModel only considers at the diagonal of S_ij, a lot of structure is lost, therefore the relaxation is much weaker. A better BIM SOC relaxation (equivalent to the above BFM) can be developed, by starting from the unbalanced SDP BIM (e.g. the matrix form as published by Gan and Low '14) and then relaxing to the complex-value SDP constraints to SOCs.

As you may have noticed, solving polynomial equivalent of SOCConicUBFPowerModel, i.e. SOCNLPUBFPowerModel, with Ipopt is tricky. You may need to play with the baseMVA and Ipopt setting to obtain reliable results. Some old results (won't run if you have JuMP 0.19):

    Basemva = 0.1, IpoptSolver()
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.0211792

    Basemva = 0.5, IpoptSolver()
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.0211278

    Basemva = 1.0, IpoptSolver()
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.0206002

    Basemva = 1.0, IpoptSolver(bound_relax_factor=1e-10)
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.0211708

    Basemva = 5.0, IpoptSolver(bound_relax_factor=1e-10)
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.0191603

    Basemva = 5.0, IpoptSolver(bound_relax_factor=1e-12)
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.0211278

    Basemva = 10.0, IpoptSolver(bound_relax_factor=1e-12)
    run_tp_opf_bf("./test/data/opendss/case3_unbalanced.dss", SOCNLPUBFPowerModel, ipopt)
    0.02060

Does this help? Other than updating the documentation to clarify this, should we close the issue?

MartaVanin commented 5 years ago

Thank you and sorry, I thought they were mathematically equivalent formulations. I'll close the issue :)