Model.setPWLObj ()


Model.setPWLObj ()

setPWLObj(var, x, y)

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

这个方法的参数指定了一个点列表,这些点为单个变量定义了一个分段线性目标函数。具体来说,< span > < /美元跨度> x < span > < / span >美元< span > < / span > y < span >美元< / span >参数给出函数顶点的坐标。

例如,假设我们想定义函数< span > < / span > f (x)美元美元< span > < / span >如下所示:

pwl形象

函数的顶点出现在这些点上< span > < / span >美元(1,1)< span > < / span >美元< span > < / span >美元(2)< span > < / span >美元< span > < / span >美元美元(5,4)< span > < / span >,所以< span > < /美元跨度> x < span > < / span >美元[1, 3, 5]和< span > < / span > y < span >美元< / span >是[1,2,4]。我们用这些参数来定义< span > < /美元跨度> f(1) = 1美元< span > < / span >< span > < /美元跨度> f (3) = 2 < span > < / span >美元< span > < / span > f(5)美元= 4美元< span > < / span >.其他目标值在相邻点之间线性插值。第一对和最后一对点分别定义了一条射线,所以值在指定的范围之外< span > < /美元跨度> x < span > < / span >美元价值是从这些点推断出来的。因此,在我们的例子中,< span > < /美元跨度> f (1) = 0 < 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] \end{displaymath}

定义如下分段线性函数:

\ {displaymath}开始左f (v) = \ \{\{数组}{你}开始y_1 + \压裂{y_2-y_1} {x_2-x_……- x_n), & \ mathm {if}\;v \通用电气x_n。7 \[葡文]\{数组}\右结束。结束\ {displaymath}

< span > < /美元跨度> x < span > < / span >美元条目必须以非递减顺序出现。两点可以相等< span > < /美元跨度> x < span > < / span >美元坐标——这对于在目标函数中指定离散跳转非常有用。

注意分段线性目标可以改变模型的类型。具体地说,在一个连续模型中包含一个非凸分段线性目标函数将把该模型转换为一个MIP。这将显著增加求解模型的成本。

为变量设置分段线性目标将设置Obj属性把这个变量设为0。同样,设置Obj属性将删除该变量上的分段线性目标。

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

参数:

var:一个Var对象,该对象给出正在设置其目标函数的变量。

x:< span > < /美元跨度> x < span > < / span >美元定义分段线性函数的点的值。必须按非递减顺序排列。

y:< span > < / span > y < span >美元< / span >定义分段线性函数的点的值。

使用示例:

模型。setPWLObj(var, [1,3,5], [1,2,4])