线性编程计数器变量

时间:2017-11-28 16:28:50

标签: constraints counter linear-programming

我有一个二进制变量X_i和一个整数变量Y_i

我希望使用Y作为计数器,以便每次X_i = 1时Y_i重置为0

是否有可能找到允许我这样做的约束?

以下是一个例子:

X:001011001

Y:120100120

编辑:

以下是我发现的约束,使用

的线性化
y(i) = (y(i-1)+1)*(1-x(i))

y[1] == (1-x[1])
    for i in 2:N
        y[i] <= 10000*(1-x[i])
        y[i] <= y[i-1] + 1
        y[i] >= y[i-1] + 1 - 10000*x[i]

以下是我得到的一些结果

x : 0,0,0,0,0,0,0,0,1,0,0,0,1,0,1,1,1,1
y : 1,2,3,4,5,6,7,8,0,1,2,3,0,1,0,0,0,-9999

x : 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1
y : 1,2,3,4,5,6,7,8,9,0,-9999,-19998,-29997,-39996,-49995,-49994,-59993,-69992

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可以将其表达为:

 y(i) = (y(i-1)+1)*(1-x(i))

这可以线性化(link)或由指标约束处理。