/ / LinearProgramming: restrição não sobreposta? - programação linear, programação inteira mista

LinearProgramming: restrição não sobreposta? - programação linear, programação inteira mista

Eu quero escrever uma restrição não sobreposta (ou seja, 2 retângulos não se sobrepõem) em um programa linear (ou um MIP, se necessário) .Eu sei como fazê-lo na programação de restrições:

Para o objeto i e j:

x [i] + dx [i] <= x [j] OU y [i] + di [i] <= y [j] OU x [j] + dx [j] <= x [i] OU y [ j] + dy [j] <= y [i] onde x e y são as matrizes contendo as coordenadas dos objetos e dx e dy são as dimensões dos objetos.

Alguma idéia da melhor maneira de fazer isso em LP / MIP? Obrigado!

Respostas:

1 para resposta № 1

Para resumir: suas restrições de programação de restrições são

x[i]+dx[i]<=x[j] OR
y[i]+dy[i]<=y[j] OR
x[j]+dx[j]<=x[i] OR
y[j]+dy[j]<=y[i]

Em um modelo MIP, você pode modelar isso como:

x[i]+dx[i]<=x[j] + M*b[i,j,1]
y[i]+dy[i]<=y[j] + M*b[i,j,2]
x[j]+dx[j]<=x[i] + M*b[i,j,3]
y[j]+dy[j]<=y[i] + M*b[i,j,4]
sum(k, b[i,j,k])<=3
b[i,j,k] in {0,1}

onde M é uma constante grande o suficiente ligação).

Se você comparou o retângulo i e j, você não precisa mais comparar j e i. Então, nas equações acima, podemos usar forall i<j para explorar essa simetria.