Filter Content By
Version
Languages

### GRBModel.setPWLObj()

Set a piecewise-linear objective function for a variable.

The arguments to this method specify a list of points that define a piecewise-linear objective function for a single variable. Specifically, the and arguments give coordinates for the vertices of the function.

For example, suppose we want to define the function shown below:

The vertices of the function occur at the points , and , so is {1, 3, 5} and is {1, 2, 4}. With these arguments we define , and . Other objective values are linearly interpolated between neighboring points. The first pair and last pair of points each define a ray, so values outside the specified values are extrapolated from these points. Thus, in our example, and .

More formally, a set of points

define the following piecewise-linear function:

The entries must appear in non-decreasing order. Two points can have the same coordinate -- this can be useful for specifying a discrete jump in the objective function.

Note that a piecewise-linear objective can change the type of a model. Specifically, including a non-convex piecewise linear objective function in a continuous model will transform that model into a MIP. This can significantly increase the cost of solving the model.

Setting a piecewise-linear objective for a variable will set the Obj attribute on that variable to 0. Similarly, setting the Obj attribute will delete the piecewise-linear objective on that variable.

Each variable can have its own piecewise-linear objective function. They must be specified individually, even if multiple variables share the same function.

 void setPWLObj ( GRBVar var, double[] x, double[] y )
Set the piecewise-linear objective function for a variable.

Arguments:

var: The variable whose objective function is being set.

x: The values for the points that define the piecewise-linear function. Must be in non-decreasing order.

y: The values for the points that define the piecewise-linear function.