Forum Discussion

FICO's avatar
FICO
Community Manager
7 years ago

Mixed-Integer Quadratically-Constrained Programming (MIQCP)

Hello,

I would like to solve a MIQCP problem in Xpress Python Interface, but I cannot find the online document prescribing the noticeble points need to be pay attention prior to solving such type of problem, e.g. the requirement for objective, constraints, etc.

So I breifly explain my problem in this post as below.

In my problem I am using binary variables and continuous variables:

  • Objective is linear (or integer-linear) expression.
  • Contains linear (or integer-linear) equality and inequality constraints.
  • Contains similar form of quadractic constraint as in the code snippet below:
declaration
# Nx, Ny, Nz--set
cx: array(Nx) of real 
cy: array(Ny) of real
cz: array(Nz) of real
 
sx, sy, sz: real
 
x: array(Nx) of mpvar
y: array(Ny) of mpvar
z: array(Nz) of mpvar
end-declaration
# Define quadratic constraint
square(  sx+sum(i in Nx)( cx(i)*x(i) )  ) + square(  sy+sum(i in Ny)( cy(i)*y(i) )  )<= square(  sz+sum(i in Nz)( cz(i)*z(i) )  )
 

Not sure whether the solver could solve my problem, also where can I find the noticeable points for each specific type of problem?

Thanks!

4 Replies

  • FICO's avatar
    FICO
    Community Manager

    Hi

    This problem looks like a second order cone, assuming "sz+sum(i in Nz)( cz(i)*z(i) ) >= 0" holds?

    https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/HTML/chapter20090603104425_sec_sectionSOCP.html

    The summary page to start from is

    https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/HTML/chapter20090603104425.html

    The solver should in almost all cases be able to automatically reformulate the problem to the above form if the sign restriction can be validated from the problem. 

    Please note that Xpress does have general nonlinear capabilities as well; but this problem should solve as a standard problem if it is indeed a second order cone. 

  • FICO's avatar
    FICO
    Community Manager

    Hello Zsolt,

    Yes, "sz+sum(i in Nz)( cz(i)*z(i) )" in the right-hand side is always >=0, but "sx+sum(i in Nx)( cx(i)*x(i) )" and "sy+sum(i in Ny)( cy(i)*y(i) )" in the left-hand side are ∈(-∞,∞).

    I have read the description of SOCPs in the link you posted, but I am not sure how the constraint in my problem could be reformulated into the described form.

    Also, I have mutliple of such square constraint, is this possible?

    Thanks!

  • FICO's avatar
    FICO
    Community Manager

    It is the right-hand side expression that matters in this case since it is a <= constraint.

    I would just try to formulate the problem in the form you shared: the solver will reformulate it to the right form in presolve. If it fails to do so, please share the instance as we then would like to check why not.

    You can have any number of such constraints in the same model.