there are other nonnegative continuous variables, and I use the binary variables in the following constraints.
@constraint(gNet, [time in 1:SCHTIME],
gasPowerInj[time] == GHV*(gasPipeFlow[1, time] + gasNodeCom[1, time] + gasNodeLoad[1, time] + gasStoreTurnOn[time]*gasStoreMount[time] - gasReleaseTurnOn[time]*gasReleaseMount[time])/Kappa)
@constraint(gNet, [time in 2:SCHTIME],
gasSOC[time] == gasSOC[time - 1] + gasStoreTurnOn[time - 1]*gasStoreMount[time - 1] - gasReleaseTurnOn[time - 1]*gasReleaseMount[time - 1])
@constraint(gNet, [time in 1:SCHTIME],
gasStoreTurnOn[time] + gasReleaseTurnOn[time] <= 1)
It’s a typical gas storage model, gasReleaseTurnOn and gasStoreTurnOn are binary variables, and gasReleaseMount and gasStoreMount are continuous variables (>= 0). When I solve it by Gurobi (NonConvex = 2), it gives me a solution, while KNITRO and Lindoapi (GitHub - lindosystems/lindoapi.jl: The Julia Interface to LINDO API.) show that the problem is infeasible (Without the binary variables, which means without the gas storage, only gas transmission, the problem can be solved for all the solvers).
With the binary variables, solved by KNITRO, it gives the problem is infeasible without any error log, alternatively, solved by Lindoapi. it gives me the following log.
termination_status(gNet) = MathOptInterface.LOCALLY_INFEASIBLE
ERROR: Lindo API Error ==> Requested information is not available.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] _check_ret(model::Lindoapi.Optimizer, ret::Int32)
@ Lindoapi D:\Julia-1.8.2\juliaPKG\packages\Lindoapi\Eb7IH\src\MOI\MOI_wrapper.jl:586
[3] get
@ D:\Julia-1.8.2\juliaPKG\packages\Lindoapi\Eb7IH\src\MOI\MOI_wrapper.jl:916 [inlined]
[4] get(b::MathOptInterface.Bridges.LazyBridgeOptimizer{Lindoapi.Optimizer}, attr::MathOptInterface.ObjectiveValue)
@ MathOptInterface.Bridges D:\Julia-1.8.2\juliaPKG\packages\MathOptInterface\NCblk\src\Bridges\bridge_optimizer.jl:1002
[5] _get_model_attribute(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Lindoapi.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, attr::MathOptInterface.ObjectiveValue)
@ MathOptInterface.Utilities D:\Julia-1.8.2\juliaPKG\packages\MathOptInterface\NCblk\src\Utilities\cachingoptimizer.jl:828
[6] get
@ D:\Julia-1.8.2\juliaPKG\packages\MathOptInterface\NCblk\src\Utilities\cachingoptimizer.jl:876 [inlined]
[7] _moi_get_result(model::MathOptInterface.Utilities.CachingOptimizer{MathOptInterface.Bridges.LazyBridgeOptimizer{Lindoapi.Optimizer}, MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{Float64}}}, args::MathOptInterface.ObjectiveValue)
@ JuMP D:\Julia-1.8.2\juliaPKG\packages\JuMP\7XtRG\src\optimizer_interface.jl:680
[8] get(model::Model, attr::MathOptInterface.ObjectiveValue)
@ JuMP D:\Julia-1.8.2\juliaPKG\packages\JuMP\7XtRG\src\optimizer_interface.jl:700
[9] objective_value(model::Model; result::Int64)
@ JuMP D:\Julia-1.8.2\juliaPKG\packages\JuMP\7XtRG\src\objective.jl:54
[10] objective_value(model::Model)
@ JuMP D:\Julia-1.8.2\juliaPKG\packages\JuMP\7XtRG\src\objective.jl:50
[11] top-level scope
@ e:\workspace\Julia\gas network gurobi.jl:145
In sum, I guess that the nonconvex terms make the problem hard or infeasible to solve, and I want to get help, thank you.