/ / LinearProgramming: Nepresahujúce obmedzenie? - lineárne programovanie, programovanie so zmiešaným integerom

LinearProgramming: Nepresahujúce obmedzenie? - lineárne programovanie, programovanie so zmiešaným integerom

Chcem napísať neprekrývajúce sa obmedzenie (to znamená, že dva obdĺžniky sa nepresahujú) v lineárnom programe (alebo MIP v prípade potreby) .Viem, ako to urobiť v programovaní obmedzenia:

Pre objekty i a j:

x [i] + dx [i] <= x [j] OR y [i] + dy [ j] + dy [j] <= y [i] kde x a y sú súradnice obsahujúce súradnice objektov a dx a dy sú rozmery objektov.

Akákoľvek predstavu o najlepšom spôsobe, ako to urobiť v LP / MIP? Vďaka!

odpovede:

1 pre odpoveď č. 1

Ak chcete zhrnúť: obmedzenia vášho obmedzenia programovania sú

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]

V modeli MIP môžete modelovať takto:

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}

kde M je dostatočne veľká konštanta (pozri odkaz).

Ak ste porovnali obdĺžnik i a j, nemusíte porovnávať j a ja. Takže vo vyššie uvedených rovniciach môžeme použiť forall i<j využiť túto symetriu.