/******************************************************** Xpress-BCL C# Example Problems ============================== file xbcutex.cs ``````````````` Simplified version of xbexpl1.cxx showing how to define cuts with BCL. (c) 2008-2024 Fair Isaac Corporation authors: S.Heipcke, D.Brett. ********************************************************/ using System; using System.Text; using System.IO; using Optimizer; using BCL; namespace Examples { public class TestUGCutex { const int NJ = 4; /* Number of jobs */ const int NT = 10; /* Time limit */ /**** DATA ****/ double[] DUR = {3,4,2,2}; /* Durations of jobs */ XPRBvar[] start = new XPRBvar[NJ]; /* Start times of jobs */ XPRBvar[,] delta = new XPRBvar[NJ,NT]; /* Binaries for start times */ XPRBvar z; /* Maximum completion time (makespan) */ XPRBprob p = new XPRBprob("Jobs"); /* Initialize BCL and a new problem */ /***********************************************************************/ public int usrcme(XPRSprob xprsp, object vd) { XPRBcut[] ca = new XPRBcut[2]; int num; int i=0; XPRBprob bprob = (XPRBprob)vd; bprob.beginCB(xprsp); /* In terms of an example, we add a few additional constraints (without any relation to the original problem) at the second node of the MIP search tree. These constraints/cuts are applied at this node and all its child nodes. */ num = xprsp.Nodes; if(num == 2) { ca[0] = bprob.newCut(start[1]+2 <= start[0], 2); ca[1] = bprob.newCut((4*start[2]) - (5,3*start[3]) <= -17, 2); System.Console.WriteLine("Adding constraints:"); for(i=0;i<2;i++) ca[i].print(); if(bprob.addCuts(ca,2) != 0) System.Console.WriteLine("Problem with adding cuts."); } bprob.endCB(); return 0; /* Call this function once per node */ } /*************************************************************************/ public void jobsModel() { XPRBexpr le; int j,t; /****VARIABLES****/ /* Create start time variables */ for(j=0;j