background image

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 

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 

 

 

 

background image

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  

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. 

background image

str. 3 

 

Macierz a= 
 

15 

 

60 

 

80 

Koszty utrzymania:1636 
Macierz D= 
 

30 

 

20 

 

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 

 

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: 
 

 

background image

str. 4 

 

5 6 

0   3  

5  

2  

4  

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. 
 

 

background image

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 

2  

5  

3  

4  

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  

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: 

background image

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  

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 

3  

5  

2  

4  

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 

background image

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.

background image

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.