# Example of using the load*() functions for several problem types. # # Usage: define PROBTYPE parameter. # # (C) 1983-2025 Fair Isaac Corporation import xpress as xp PROBTYPE = 'LP' '''Select problem type: 'LP': LP problem with three variables and four constraints 'QP': LP with a quadratic objective 'QCQP': quadratically constrained quadratic problem 'MIQCQP': QCQP where variables are integer or binary 'MIQCQPSOS': MIQCQP with Special Ordered Sets (SOSs) ''' def loadlp(): '''LP problem with three variables and four constraints.''' p = xp.problem() # Fill in an LP problem with three variables and four constraints. p.loadLP("", # probname ['G', 'G', 'E', 'L'], # rowtype [-2.4, -3, 4, 5], # rhs None, # rng [3, 4, 5], # objcoef [0, 2, 4, 8], # start None, # collen [0, 1, 2, 3, 0, 1, 2, 3], # rowind [1, 1, 1, 1, 1, 1, 1, 1], # rowcoef [-1, -1, -1], # lb [3, 5, 8]) # ub p.writeProb("loadedlp", "lp") p.optimize() # Get a variable and modify the objective # function. Note that the objective function is replaced by, not # amended with, the new objective. x1 = p.getVariable(0) p.setObjective(x1 ** 2 + 2 * x1 + 444) p.optimize() p.writeProb("updatedlp", "lp") def loadqp(): '''LP problem with a quadratic objective.''' p = xp.problem() # Fill in a QP problem with three variables and four constraints. p.loadQP("", # probname ['G', 'G', 'E', 'L'], # rowtype [-2.4, -3, 4, 5], # rhs None, # rng [3, 4, 5], # objcoef [0, 2, 4, 8], # start None, # collen [0, 1, 2, 3, 0, 1, 2, 3], # rowind [1, 1, 1, 1, 1, 1, 1, 1], # rowcoef [-1, -1, -1], # lb [3, 5, 8], # ub [0, 0, 0, 1, 1, 2], # objqcol1 [0, 1, 2, 1, 2, 2], # objqcol2 [2, 1, 1, 2, 1, 2]) # objqcoef p.writeProb("loadedqp", "lp") p.optimize() def loadqcqp(): '''Quadratically constrained quadratic problem.''' p = xp.problem() # Fill in a QCQP problem with three variables and four constraints. p.loadQCQP("", # probname ['G', 'G', 'L', 'L'], # rowtype [-2.4, -3, 4, 5], # rhs None, # rng [3, 4, 5], # objcoef [0, 2, 4, 8], # start None, # collen [0, 1, 2, 3, 0, 1, 2, 3], # rowind [1, 1, 1, 1, 1, 1, 1, 1], # rowcoef [-1, -1, -1], # lb [3, 5, 8], # ub [0, 0, 0, 1, 1, 2], # objqcol1 [0, 1, 2, 1, 2, 2], # objqcol2 [2, 1, 1, 2, 1, 2], # objqcoef [2, 3], # qrowind [2, 3], # nrowqcoef [1, 2, 0, 0, 2], # rowqcol1 [1, 2, 0, 2, 2], # rowqcol2 [3, 4, 1, 1, 1]) # rowqcoef p.writeProb("loadedqcqp", "lp") p.optimize() def loadmiqcqp(): '''QCQP where variables are integer or binary.''' p = xp.problem() # Fill in an MIQCQP problem with three variables and four constraints. p.loadMIQCQP("", # probname ['G', 'G', 'L', 'L'], # rowtype [-2.4, -3, 4, 5], # rhs None, # rng [3, 4, 5], # objcoef [0, 2, 4, 8], # start None, # collen [0, 1, 2, 3, 0, 1, 2, 3], # rowind [1, 1, 1, 1, 1, 1, 1, 1], # rowcoef [-1, -1, -1], # lb [3, 5, 8], # ub [0, 0, 0, 1, 1, 2], # objqcol1 [0, 1, 2, 1, 2, 2], # objqcol2 [2, 1, 1, 2, 1, 2], # objqcoef [2, 3], # qrowind [2, 3], # nrowqcoefs [1, 2, 0, 0, 2], # rowqcol1 [1, 2, 0, 2, 2], # rowqcol2 [3, 4, 1, 1, 1], # rowqcoef ['I', 'S'], # coltype [0, 1], # entind [0, 2]) # limit p.writeProb("loadedmiqcqp", "lp") p.optimize() print(p.getSolution()) def loadmiqcqp_sos(): '''MIQCQP with Special Ordered Sets (SOSs).''' p = xp.problem() # Fill in an MIQCQP problem with two Special Ordered Sets (SOSs). p.loadMIQCQP("", # probname ['G', 'G', 'L', 'L'], # rowtype [-2.4, -3, 4, 5], # rhs None, # rng [3, 4, 5], # objcoef [0, 2, 4, 8], # start None, # collen [0, 1, 2, 3, 0, 1, 2, 3], # rowind [1, 1, 1, 1, 1, 1, 1, 1], # rowcoef [-1, -1, -1], # lb [3, 5, 8], # ub [0, 0, 0, 1, 1, 2], # objqcol1 [0, 1, 2, 1, 2, 2], # objqcol2 [2, 1, 1, 2, 1, 2], # objqcoef [2, 3], # qrowind [2, 3], # nrowqcoefs [1, 2, 0, 0, 2], # rowqcol1 [1, 2, 0, 2, 2], # rowqcol2 [3, 4, 1, 1, 1], # rowqcoef ['I', 'S'], # coltype [0, 1], # entind [0, 2], # limit ['1', '1'], # settype [0, 2, 4], # setstart [0, 1, 0, 2], # setind [1.1, 1.2, 1.3, 1,4]) # refval p.writeProb("loadedmiqcqp_sos", "lp") p.optimize() print(p.getSolution()) if PROBTYPE == 'LP': loadlp() elif PROBTYPE == 'QP': loadqp() elif PROBTYPE == 'QCQP': loadqcqp() elif PROBTYPE == 'MIQCQP': loadmiqcqp() elif PROBTYPE == 'MIQCQPSOS': loadmiqcqp_sos() else: print("Invalid choice of PROBTYPE parameter. Please try again.")