Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
Transkrypt
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
Politechnika Śląska w Gliwicach
Wydział Automatyki Elektroniki i Informatyki
PRACA DYPLOMOWA
Zewnętrzna biblioteka ograniczeń globalnych
w C++ do ECLiPSe
Promotor:
dr inż. Tomasz Szczygieł
Wykonał:
Piotr Pietrzyk
©2005 Gliwice
Cel pracy:
Zadaniem niniejszej pracy jest przeanalizowanie możliwości zrealizowania
ograniczeń globalnych „diffn()” w Eclipse.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
1
Co to jest ECLiPSe ?
− Otwarta konstrukcja Eclipse zapewnia obsługę wtyczek1)
realizujących konkretne zadania, dzięki czemu można
łatwo rozszerzać jego funkcjonalność.
− Eclipse łączy biblioteki programowania matematycznego
z bibliotekami CLP (Constraint Logic Programming).
1) Wtyczka (ang. plug-in) to dodatek do istniejącego programu poszerzający jego możliwości lub automatyzujący
żmudne czynności. Odciąża to autora od pisania całego kodu programu, a zrzuca część tego obowiązku na
zewnętrznych programistów.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
2
Do czego służy diffn?
Używany jest do planowania, upakowywania oraz w problemach ułożenia
w n-wymiarach.
Przypuśćmy, że chcemy dopasować n-wymiarowy prostokąt w n-wymiarowym
prostokącie. Diffn powoduje, że żaden z prostokątów nie nachodzi na siebie.
Przypadek 2-wymiarowy:
Prawidłowe ułożenie,
prostokąty nie nachodzą na
siebie. Diffn w takim przypadku
zwróci wartość true.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
Nieprawidłowe ułożenie.
Występuje para prostokątów
nachodzących na siebie.
Diffn w takim przypadku zwróci
wartość false.
3
Struktura diffn():
diffn w najprostszej postaci przyjmuje jako argument listę n-wymiarowych
prostokątów:
diffn( Rectangles )
gdzie:
Rectangles, to lista m x n - wymiarowych prostokątów.
n-wymiarowy prostokąt (Rectangles) definiujemy jako:
[O1, ..., On, L1, ..., Ln]
gdzie:
Oi oraz Li reprezentują początek oraz długość prostokąta w i-wymiarze.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
4
Struktura diffn():
Bardziej złożona struktura diffn zawiera w sobie dodatkowe parametry:
diffn( Rectangles, MinVolume, MaxVolume, End)
gdzie:
Rectangles, to lista m x n - wymiarowych prostokątów.
MinVolume = [ Min1, ..., Minm ], opisuje minimalną objętość prostokąta
W przypadku, gdy parametr ten jest ustawiony jako unused, minimalna wartość może
dążyć do nieskończoności.
MaxVolume = [ Max1, ..., Maxm ], opisuje maksymalną objętość prostokąta.
W przypadku, gdy parametr ten jest ustawiony jako unused, maksymalna wartość może
dążyć do nieskończoności.
End = [ End1, ..., Endm ], opisuje, w którym miejscu koniec prostokątów ma leżeć.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
5
Teoria – przypadek dla odcinków:
[1]
∀i ∈ {1, ..., m}, ∀j ∈ {1, ..., n}, Lji ≠ 0
[2]
∀i ∈ {1, ..., m}, ∀j ∈ {1, ..., n}, j ≠ i
Oik ≥ O jk + L jk
lub
O jk ≥ Oik + Lik
Powyższe wzory opisują przypadek, w którym żaden z dwóch odcinków nie
może na siebie nachodzić.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
6
Diffn – przypadek 2-wymiarowy:
Rozpatrzmy zbiór n prostokątów, których dolny lewy róg to (Oi,Oj),
oraz długość Li i wysokość Lj. Prostokąty nie powinny na siebie nachodzić.
To znaczy, że dla każdej pary prostokątów Ri i Rj, przynajmniej jeden z poniższych
warunków musi być prawdziwy:
- Ri jest nad Rj,
- Ri jest poniżej Rj
- Ri jest po lewej stronie Rj,
- Ri jest po prawej stronie Rj.
Zewnętrzna biblioteka ograniczeń globalnych w C++ do ECLiPSe
7