str. 1
Paweł Jakubik, nr indeksu: 214764
5.11.2011
Laboratorium z Teorii i metod optymalizacji
– projekt
Opracowanie programu unifikacji
dla indywidualnie przydzielonego zadania.
Opracowa
ć program realizujący zadanie ogólne (tzn. opisane w przykładzie 1).
Program powinien poprawnie działać także dla dowolnych danych podawanych z
zewnętrznego pliku Dane.txt. Wyniki powinny być generowane do pliku
zewnętrznego wyniki.txt wraz z komunikatami o wynikach pośrednich (wybory +
wartość kosztu). Sprawdzenie poprawności dla danych z przykładu oraz danych
zmodyfikowanych w ten sposób, że koszty magazynowania są 50-krotnie większe dla
dwóch pierwszych typów transformatorów. Język dowolny z grupy: C, C++, C#,
Java, Pascal, Fortran, Visual Basic, nawet Basic. Niedozwolony: Matlab.
Udało się wykonać następujące punkty:
1. Dowolne dane obejmuj
ą zarówno liczbę obwodów i wymagane obciążenie, jak
tez mogą być dowolne transformatory o różnych mocach i różnych kosztach.
2.
Liczba kolumn tez może być dowolna.
3. Pliki danych
i wyników to pliki tekstowe.
4.
Jako wyniki pośrednie maja być wypisane wszystkie macierze, komunikaty
tekstowe o wyborze/odrzuceniu tr
ansformatora w danym stopniu pośrednim
wraz z aktualnym kosztem, a n
a koniec komunikat o wyborze końcowym i
koszt końcowy.
5.
Program nie musi działać w środowisku graficznym, ale może.
Dane dołączone do zadania mają następującą postać:
Liczba
obwodów
3
5
2
4
obciążenie
300
400
600
700
Moc trafo
Koszty roczne trafo
Rezerwa
400
96
97
188
190
15
630
97
103
110
200
60
800
110
114
120
122
80
str. 2
Wykonanie zadania:
Program
1
został napisany w języku C przy użyciu programu Dec-C++ 4.9.9.2.
W pliku dane.txt
(lub innym wybranym przez użytkownika) w pierwszym wierszu
powinny znajdować się wymiary badanej macierzy. W badanym przykładzie macierz
jest wymiarów 5x6, gdzie 5 odpowiada ilości wierszy a 6 ilości kolumn. W kolejnym
wierszu pliku powinna znajdować się liczba obwodów dla konkretnego obciążenia.
Wartość tego obciążenia wpisujemy wiersz niżej. Następne wiersze to moc
tr
ansformatora, odpowiadające im koszty roczne transformatora i koszty rezerwy.
W tym miejscu należy napomnieć, iż należy wiersze odpowiadające ilości
obwodów i obciążenia uzupełnić odpowiednio o zera, aby dane te znajdowały się w
kolumnie odpowiadających im kosztów rocznych.
Dla badanego przykładu poprawnie stworzony plik dane.txt
2
powinien
wyglądać następująco:
5 6
0 3
5
2
4
0
0
300 400 600 700 0
400 96
97
188 190 15
630 97
103 110 200 60
800 110 114 120 122 80
Dane wynikowe zapisywane są w pliku wynik.txt (lub innym wybranym przez
użytkownika). W pliku tym podane są kolejne macierze kosztów (koszty roczne
pomnożone przez odpowiednią wartość ilości obwodów), wartości rezerw, macierze
D i macierze c wartości odrzucenia. Po każdorazowym wykonaniu obliczeń
wyświetlany jest komunikat, która składowa macierzy c jest odrzucana. Po
wykonaniu wszystkich kroków podany jest komunikat o wybranych rodzajach
transformato
rów i koszcie końcowym.
Po wprowadzeniu danych zadania plik wynik.txt
zawiera następujące dane:
Macierz 1: wymiary 5x6
Macierz kosztow=
288 485 376 760
291 515 220 800
330 570 240 488
1
Program wraz z kodem źródłowym znajduje się w program.zip.
2
Pliki danych wejściowych i wyjściowych znajdują się w paczce dane_wyniki.zip dostarczonych wraz ze
sprawozdaniem.
str. 3
Macierz a=
15
60
80
Koszty utrzymania:1636
Macierz D=
3
30
0
0
0
0
20
0
0
0
0
272
Macierz c=
33
20
272
Wyrzucamy skladowa wektora C:20 dla mocy 630
KOLEJNY KROK:
Macierz kosztow=
288 485 376 760
330 570 240 488
Macierz a=
15
80
Koszty utrzymania:1596
Macierz D=
42
85
0
0
0
0
136 272
Macierz c=
127
408
Obliczenia zakonczone. Wynik koncowy to:
Koszty koncowe: 1596
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 400
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Po otrzymaniu powyższych wyników należy sprawdzić poprawność otrzymanych
danych poprzez zmodyfikowanie kosztów magazynowania dla pierwszych dwóch
typów transformatora były 50 razy większe. Nasz plik wygląda następująco:
str. 4
5 6
0 3
5
2
4
0
0
300 400 600 700 0
400 96
97
188 190 750
630 97
103 110 200 3000
800 110 114 120 122 80
W rezultacie otrzymujemy wynik (dane pośrednie umieszczone zostały w pliku
wynik50.txt dostarczonym do sprawozdania):
Obliczenia zakonczone. Wynik koncowy to:
Koszty koncowe: 1708
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 400
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Widać, że program działa poprawnie dla tego przypadku, gdyż tylko ten transformator
spełnia założenia nieodrzucenia.
Kolejnym krokiem jest sprawdzenie poprawności działania naszego programu
dla przykładu 5.1 umieszczonego w książce „Podstawy i metody optymalizacji”.
Wynik końcowy to (pełny umieszczony został w pliku wynik_przykład.txt):
Obliczenia zakonczone. Wynik koncowy to:
Koszty koncowe: 1616
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 400
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Zgadza się to z wynikami uzyskanymi w książce.
str. 5
Dla kosztów magazynowania 50 razy większych dla dwóch pierwszych typów
transformatora (plik wynik_przyklad50.txt):
Obliczenia zakonczone. Wynik koncowy to:
Koszty koncowe: 1718
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 400
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Wykonane próby dodatkowe:
Próba wykonana dla przykładu 5.2 (przyklad52.txt):
5 6
0
2
5
3
4
0
0
300 400 600 700 0
400 94
97
188 190 150
630 97
103 110 200 600
800 110 114 120 122 800
Otrzymujemy wynik (wynik_przyklad52.txt):
Koszty koncowe: 2147
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 400
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 700
Rozszerzamy nasz przykład o dodatkowy transformator o mocy 900 kVA (plik
dane_1.txt).
6 6
0 3
5
2
4
0
0
300 400 600 700 0
400 96
97
188 190 15
630 97
103 110 200 60
800 110 114 120 122 80
900 250 72
140 150 100
Otrzymujemy wynik końcowy (wynik_1.txt):
Obliczenia zakonczone. Wynik koncowy to:
str. 6
Koszty koncowe: 1571
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Nalezy wybrac transformator o mocy 900 kVA dla obciazenia 400
W jednej z kolumn w dwóch wierszach wstawiamy dwie te same wartości.
Przykładowe dane (dane_2.txt):
6 6
0 3
5
2
4
0
0
300 400 600 700 0
400 96
97
188 190 15
630 97
103 110 200 60
800 110 114 120 122 80
900 110 72
140 150 100
W wyniku takiej operacji otrzymujemy
wynik uwzględniający wszystkie obciążenia:
Obliczenia zakonczone. Wynik koncowy to:
Koszty koncowe: 1571
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Nalezy wybrac transformator o mocy 900 kVA dla obciazenia 400
Dodanie jednej kolumny do danych z otrzymanego zadania (dane_3.txt)
5 7
0
3
5
2
4
3
0
0
300 400 600 700 800 0
400 96
97
188 190 210 15
630 97
103 110 200 220 60
800 110 114 120 122 180 80
Otrzymany wynik:
Obliczenia zakonczone. Wynik koncowy to:
Koszty koncowe: 2136
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 300
Nalezy wybrac transformator o mocy 400 kVA dla obciazenia 400
str. 7
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 600
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 700
Nalezy wybrac transformator o mocy 800 kVA dla obciazenia 800
Przypadek dla którego koszty w kolejnym kroku są większe niż koszty w kroku
poprzednim.
Niestety w obecnych pr
óbach nie udało nam się otrzymać wzrostu kosztów w
kolejnym kroku. Jednak program
został tak skonstruowany, aby w takim przypadku
wyp
isać odpowiedni komunikat oraz za wynik końcowy podać dane z poprzedniego
kroku.
str. 8
Wnioski:
Stworzony program wyrzuca poprawne wyniki dla danych otrzymanych wraz z
treścią zadania, jak i dla danych z przykładu umieszczonej w książce „Podstawy
metod optymalizacji” – oba zostały również zmodyfikowane o wartości dwóch
pierwszych kosztów rezerw.
Dodatkowo została wykonana próba dla przykładu 5.2, która dała nam
pomyślny wynik.
Poprawność działa została także sprawdzona dla przypadków o zwiększonej
ilości kolumn i wierszy.
W momencie otrzymania w procesie unifikacji wartości kosztów zostaną
zwiększone względem otrzymanych poprzednich, program wyrzuca odpowiedni
komunikat i za wynik końcowy podaje wartość wybranych transformatorów dla
poprzedniego kroku.