/******************************************************** * Xpress-BCL Java Example Problems * ================================ * * file xbworks.java * ````````````````` * Workshop planning example. * * (c) 2008-2024 Fair Isaac Corporation * author: S.Heipcke, Jan. 2000, rev. Mar. 2011 ********************************************************/ import com.dashoptimization.*; public class xbworks { static final int NProd = 2; /* Number of products */ static final int NShop = 3; /* Number of workshops */ static final int WMAX = 40; /* Maximum weekly working time */ /****DATA****/ static final int[][] DUR = { {5, 9, 7}, {10, 2, 5} }; /* Duration of product p on shop s */ static final int[] RES = {10, 8}; /* Man hours per unit */ static final int[] PRICE = {108, 84}; /* Selling price per unit */ /***********************************************************************/ public static void main(String[] args) { try (XPRBprob pb = new XPRBprob("Workshop"); /* Initialize BCL and create a new problem */ XPRBexprContext context = new XPRBexprContext() /* Release XPRBexpr instances at end of block. */) { int p, s; XPRBexpr l; XPRBvar[] x; /* Amount of product p */ /****VARIABLES****/ x = new XPRBvar[NProd]; for (p = 0; p < NProd; p++) x[p] = pb.newVar("x"); /****OBJECTIVE****/ l = new XPRBexpr(); for (p = 0; p < NProd; p++) l.add(x[p].mul(PRICE[p] - 5 * RES[p])); pb.setObj(l); /* Set obj. function: maximize benefit */ /****CONSTRAINTS****/ for (s = 0; s < NShop; s++) { /* Limit on weekly working hours */ l = new XPRBexpr(); for (p = 0; p < NProd; p++) l.add(x[p].mul(DUR[p][s])); pb.newCtr("ResMax", l.lEql(WMAX)); } /****SOLVING + OUTPUT****/ pb.setSense(XPRB.MAXIM); pb.lpOptimize(""); /* Solve the LP-problem */ System.out.println("Objective: " + pb.getObjVal()); /* Get objective value */ for (p = 0; p < NProd; p++) /* Print the solution values */ System.out.print(x[p].getName() + ":" + x[p].getSol() + " "); System.out.println(); } } }