grbsetpwlobj.


grbsetpwlobj.

int grbsetpwlobj. grbmodel. *模型,
int var,
int npoints,
双倍的 *X,
双倍的 * y)

设置变量的分段线性目标函数。

此方法的参数指定了一个点列表,用于为单个变量定义分段 - 线性目标函数。具体来说,这是<span> $ </ span> x <span> $ </ span><span> $ </ span> y <span> $ </ span>参数为函数的顶点提供坐标。

例如,假设我们希望to define the function<span> $ </ span> f(x)<span> $ </ span>shown below:

pwl形象

该功能的顶点在点处发生<span> $ </ span>(1,1)<span> $ </ span><span> $ </ span>(3,2)<span> $ </ span><span> $ </ span>(5,4)<span> $ </ span>, 所以npiotts.是3,<span> $ </ span> x <span> $ </ span>是{1,3,5},和<span> $ </ span> y <span> $ </ span>is {1, 2, 4}. With these arguments we define<span> $ </ span> f(1)= 1 <span> $ </ span><span> $ </ span> f(3)= 2 <span> $ </ span><span> $ </ span> f(5)= 4 <span> $ </ span>。其他客观值在相邻点之间线性插值。第一对和最后一对点每个定义光线,所以指定的值<span> $ </ span> x <span> $ </ span>值从这些点外推。因此,在我们的示例中,<span> $ </ span> f(-1)= 0 <span> $ </ span><span> $ </ span> f(6)= 5 <span> $ </ span>

更正式,一套<span> $ </ span> n <span> $ </ span>

\ begin {displaymath} \ mathtt {x} = \ {x_1,\ ldots,x_n \},\ quad \ mathtt {y} = \ {y_1,\ ldots,y_n \} \ neg {displaymath}

define the following piecewise-linear function:

\ begin {displaymath} f(v)= \ left \ {\ begin {array} {ll} y_1 + \ frac {y_2-y_1} {x_2-y_1} {x_2-y_1} {x_2-y_1} {x_2-y_1} {x_2-y_1} {x_2-y_1},&x__n),&\ mathrm {如果} \;v \ ge x_n。\ [7pt] \结束{array} \右。\结束{displaymath}

<span> $ </ span> x <span> $ </ span>条目必须以非减少顺序出现。两点可以具有相同的<span> $ </ span> x <span> $ </ span>坐标 - 这对于指定目标函数中的离散跳转非常有用。

注意,分段线性目标可以改变模型的类型。具体地,包括在连续模型中的非凸分段线性物镜函数将将该模型变为MIP。这可以显着提高解决模型的成本。

为变量设置分段线性物镜将设置OBJ属性在该变量上为0.同样,设置obj.属性将删除该变量上的分段线性目标。

每个变量都可以具有自己的分段线性目标函数。即使多个变量共享相同的功能,也必须单独指定它们。

注意,由于我们的延迟更新方法,实际上不会添加新的分段线性目标,直到更新模型(使用grbupdatemodel.), optimize the model (usinggrboptimize.)或将模型写入磁盘(使用grbwrite.)。

返回值:

非零返回值表示设置分段线性目标时发生问题。参考错误代码表格有可能返回值列表。有关错误的详细信息可以通过呼叫获得grbgeterramsg.

论点:

模型:修改模型。

var.:更改其目标函数的变量。

npiotts.:定义分段 - 线性函数的点数。

X: 这<span> $ </ span> x <span> $ </ span>定义分段线函数的点的值。Must be in non-decreasing order.

y: 这<span> $ </ span> y <span> $ </ span>定义分段线函数的点的值。

Example usage:

双X [] = {1,3,5};双y [] = {1,2,4};ERROR = GRBSETPWLOBJ(型号,var,3,x,y);