FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

UG - Examples from 'BCL Reference Manual'

Description
The following examples are discussed in detail in the 'BCL User Guide and Reference Manual':
  • modeling and solving a small MIP scheduling problem (xbexpl1 version BASIC)
  • using variable arrays and constraint templates (xbexpl1 versions ARRAY and ARRAYC)
  • definition of SOS-1 (xbexpl1 version SOS)
  • data input from file, index sets (xbexpl1i)
  • user error handling, output redirection (xbexpl3)
  • solving multiple scenarios of a transportation problem in parallel (xbexpl2: standard, single thread version)
  • cut generation / adding cuts at MIP tree nodes (xbcutex)
  • quadratic programming (quadratic objective: xbqpr12, quadratic constraints: xbairport)
  • combine BCL problem input with problem solving in Xpress Optimizer (xbcontr1)
  • use an Xpress Optimizer solution callback with a BCL model (xbcontr2s: single MIP thread; xbcontr2: multiple MIP threads)
Further explanation of this example: 'BCL Reference Manual', Appendix B Using BCL with the Optimizer library


Source Files

Data Files





xbqpr12.java

/********************************************************
  Xpress-BCL Java Example Problems
  ================================

  file xbqpr12.java
  `````````````````
  Small Quadratic Programming example.
       minimize x1 + x1^2 +2x1x2 +2x2^2 +x4^2
       s.t. C1:  x1 +2x2 -4x4 >= 0
            C2: 3x1 -2x3 - x4 <= 100
            C3: 10 <= x1 +3x2 +3x3 -2x4 <= 30
            0<=x1<=20
            0<=x2,x3
            x4 free

  (c) 2008-2024 Fair Isaac Corporation
      author: S.Heipcke, Jan. 2000, rev. Dec. 2011
********************************************************/

import java.io.*;
import com.dashoptimization.*;

public class xbqpr12 {
    static final int NXPRBvar = 4;

    /***********************************************************************/

    public static void main(String[] args) throws IOException {
        XPRBctr c;
        XPRBexpr le, qobj;
        XPRBvar[] x;
        int i;

        try (XPRBprob p = new XPRBprob("QPr12")) { /* Initialize BCL and create a new problem */

            /**** VARIABLES ****/
            x = new XPRBvar[NXPRBvar];
            x[0] = p.newVar("x1", XPRB.PL, 0, 20);
            x[1] = p.newVar("x2");
            x[2] = p.newVar("x3");
            x[3] = p.newVar("x4", XPRB.PL, -XPRB.INFINITY, XPRB.INFINITY);

            /****OBJECTIVE****/
            qobj = new XPRBexpr();          /* Define the objective function */
            qobj.add(x[0]);
            qobj.add( (x[0].sqr()) .add(x[0].mul(2).mul(x[1]))
                      .add(x[1].sqr().mul(2)) .add(x[3].sqr()) );
            p.setObj(qobj);

            /**** CONSTRAINTS ****/
            p.newCtr("C1", x[0].add(x[1].mul(2)).add(x[3].mul(-4)) .gEql(0) );
            p.newCtr("C2", x[0].mul(3).add(x[2].mul(-2)).add(x[3].mul(-1)) .lEql(100) );
            c = p.newCtr("C3", x[0].add(x[1].mul(3)) .add(x[2].mul(3))
                         .add(x[3].mul(-2)) );
            c.setRange(10,30);

            /****SOLVING + OUTPUT****/
            p.print();			  /* Print out the problem definition */
            p.exportProb(XPRB.MPS,"QPr12"); /* Output the matrix in MPS format */
            p.exportProb(XPRB.LP,"QPr12");  /* Output the matrix in LP format */

            p.setSense(XPRB.MINIM);         /* Choose the sense of the  optimization */
            p.lpOptimize("");               /* Solve the QP-problem */

            System.out.println("Objective function value: " + p.getObjVal());
            for(i=0;i<NXPRBvar;i++)
                System.out.print(x[i].getName() + ": " +  x[i].getSol() + ", ");
            System.out.println();


        }
    }
}

Back to examples browserPrevious exampleNext example