Compare commits

..

17 Commits

Author SHA1 Message Date
3d22926e65 Jeżdżąca enigma 2020-06-03 18:24:38 +00:00
38fe2e4ad8 Prześlij pliki do 'images/13_05' 2020-05-13 00:04:10 +00:00
46d0b01f16 Prześlij pliki do '' 2020-05-12 23:58:22 +00:00
a910af091a Zaktualizuj 'subprojectRaportTomasz.md' 2020-05-12 23:56:58 +00:00
daaab55cf4 Zaktualizuj 'subprojectRaportTomasz.md' 2020-05-12 23:52:56 +00:00
2fb97a124b Zaktualizuj 'subprojectRaportTomasz.md' 2020-05-12 23:50:33 +00:00
652adb7ee6 Zaktualizuj 'subprojectRaportTomasz' 2020-05-12 23:48:47 +00:00
bac8adc0a4 Zaktualizuj 'subprojectRaportTomasz' 2020-05-12 23:47:47 +00:00
052f8019ea Dodaj 'subprojectRaportTomasz' 2020-05-12 23:46:24 +00:00
1d68c643fa Usuń 'test' 2020-05-12 23:12:09 +00:00
333a756800 Dodaj 'test' 2020-05-12 23:11:18 +00:00
f7651eb14c Prześlij pliki do 'images/13_05' 2020-05-12 23:05:48 +00:00
66e4f7d18c Prześlij pliki do 'images/13_05' 2020-05-12 23:05:41 +00:00
789e9221cb Prześlij pliki do 'images/13_05' 2020-05-12 23:05:30 +00:00
90aead8b7b Prześlij pliki do 'images/13_05' 2020-05-12 23:05:18 +00:00
fbb4ee6a36 Prześlij pliki do 'images/13_05' 2020-05-12 23:05:05 +00:00
4ab583d38f nie bazować na tym 2020-05-11 19:45:20 +00:00
44 changed files with 3421 additions and 7803 deletions

2143
Main.cpp

File diff suppressed because it is too large Load Diff

1687
MainNewTomasz.cpp Normal file

File diff suppressed because it is too large Load Diff

1151
MainTomasz.cpp Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,209 +0,0 @@
##Jarosław Zbąski raport z podprojektu
---
#Wybrana metoda:
---
Do realizacji podprojektu wykorzystano drzewa decyzyjne wskazujące którą roślinę (jeśli w ogóle) należy posadzić na danym polu. Drzewo decyzję podejmuje na podstawie poszczególnych parametrów gleby:
-żyzność (z-żyzna, j-jałowa)
-nawodnienie (n - nawodniona, s - sucha)
-nasłonecznienie (s - w słońcu, c w cieniu)
-kwasowość gleby (k kwasowa, n neutralna, z - zasadowa)
#Uczenie modelu:
---
Dane treningowe:
```
training_data = [
#zyznosc, nawodnienie, cien, kwasowość, grupa
['z', 'n', 's', 'z', 1],
['z', 'n', 's', 'n', 1],
['j', 'n', 's', 'z', 1],
['z', 's', 's', 'n', 1],
['j', 'n', 'c', 'n', 1],
['z', 'n', 's', 'k', 1],
['z', 'n', 'c', 'k', 2],
['z', 's', 's', 'k', 2],
['z', 's', 'c', 'k', 2],
['j', 'n', 's', 'k', 2],
['z', 's', 'c', 'z', 3],
['j', 'n', 's', 'n', 3]
]
```
Budowanie drzewa decyzyjnego opiera się na podziale gałęzi względem algorytmu CART. Ma ono postać ciągu pytań, na które odpowiedzi determinują kolejne pytania, bądź kończą etap. W wyniku otrzymujemy strukturę drzewa, która w węzłach końcowych nie zawiera już pytań, lecz same odpowiedzi. Dodatkowo wypisuje zestaw danych pasujących do liścia, z zestawu treningowego.
```
def build_tree(rows):
gain, question = find_best_split(rows)
if gain == 0:
return Leaf(rows)
true_rows, false_rows = partition(rows, question)
true_branch = build_tree(true_rows)
false_branch = build_tree(false_rows)
return Decision_Node(question, true_branch, false_branch)
```
Znajdowanie najlepszego podziału opiera się głównie na Współczynniku Giniego, który mierzy stopień niejednorodności i dzieli ją przez ilość pozostałych zestawów testowych (entropia), co daje nam przyrost informacji.
```
def find_best_split(rows):
best_gain = 0
best_question = None
current_uncertainty = gini(rows)
n_features = len(rows[0]) - 1
for col in range(n_features):
values = set([row[col] for row in rows])
for val in values:
question = Question(col, val)
true_rows, false_rows = partition(rows, question)
if len(true_rows) == 0 or len(false_rows) == 0:
continue
gain = info_gain(true_rows, false_rows, current_uncertainty)
if gain >= best_gain:
best_gain, best_question = gain, question
return best_gain, best_question
```
Drzewo powstałe poprzez wykonanie metody print_tree(node,spacing) na zestawie testowym:
```
Czy kwasowosc == k?
--> True:
Czy cien == s?
--> True:
Czy nawodnienie == n?
--> True:
Czy zyznosc == j?
--> True:
Predict {2: 1}
--> False:
Predict {1: 1}
--> False:
Predict {2: 1}
--> False:
Predict {2: 2}
--> False:
Czy cien == s?
--> True:
Czy zyznosc == j?
--> True:
Czy kwasowosc == n?
--> True:
Predict {3: 1}
--> False:
Predict {1: 1}
--> False:
Predict {1: 3}
--> False:
Czy kwasowosc == n?
--> True:
Predict {1: 1}
--> False:
Predict {3: 1}
```
#Implementacja w C++:
---
Komunikacja między pythonem a cpp zachodzi przez pliki dane.txt i decyzje.txt. W pliku dane.txt cpp wypisuje stan całego pola w oddzielonych spacją kolumnach począwszy od indeksu x=1,y=1 aż po x=25,y=25. Decyzje podjęte przez drzewo decyzyjne wypisane w pliku decyzje.txt zawierają symbol rośliny lub pola jakie mają się znajdować na polu (również w całej przestrzeni pola).
Zestaw testowych danych:
```
void testSI1()
{
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < 26; j++)
{
if (j % 3 == 0)
{
pole[i][j][2] = 'z'; //zyzne
pole[i][j][3] = 'n'; //nawodnione
pole[i][j][4] = 'c'; //w cieniu
pole[i][j][5] = 'k'; //kwasne
}
else
{
if (j % 3 == 1)
{
pole[i][j][2] = 'j'; //jalowe
pole[i][j][3] = 'n'; //nawodnione
pole[i][j][4] = 's'; //w sloncu
pole[i][j][5] = 'n'; //neutralne
}
else
{
pole[i][j][2] = 'z'; //zyzne
pole[i][j][3] = 's'; //suche
pole[i][j][4] = 's'; //sloneczne
pole[i][j][5] = 'z'; //zasadowe
}
}
}
}
}
```
Funkcja wysyłająca stan pola:
```
void sendState()
{
ofstream write("dane.txt");
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < 26; j++)
{
string a;
a += pole[i][j][2];
a += ' ';
a += pole[i][j][3];
a += ' ';
a += pole[i][j][4];
a += ' ';
a += pole[i][j][5];
write << a << endl;
}
}
write.close();
}
```
Funkcja kierująca traktorem (decyzja co zasiać):
```
void reciveState()
{
ifstream read("decyzje.txt");
if (read.is_open())
{
char plant;
int i = 1;
int j = 1;
while (read >> plant)
{
if (j == 25)
{
gogo(1, i+1);
}
else
{
gogo(j+1 , i );
}
pole[i][j][0] = plant;
if (plant == '.')
{
pole[i][j][1] = '1';
}
else
{
pole[i][j][1] = '9';
}
if (j == 25)
{
j = 1;
i += 1;
}
else
{
j += 1;
}
}
}
}
```

View File

@ -1,47 +0,0 @@
# Opis dokumentu
Ten dokument to raport z wykonanego podprojektu na przedmiot Sztuczna Inteligencja. Celem
zadania jest implementacja algorytmu genetycznego w projekcie o tematyce inteligentny traktor.
# Zastosowanie algorytmu
Algorytm został wykorzystany do wygenerowania zbioru roślin do zasadzenia na bazie zebranych wcześniej roślin
# Skrócony opis implementacji w projekcie wspólnym
* Na początku dla każdego pola zawierającego buraki, zostanie wygenerowany kod genetyczny roślin z tego pola.
![](images/test2_generowanie_burakow.png)
* Funkcja Move teraz zajmuje się również zbieraniem i wywoływaniem sadzenia roślin
![](images/move_zbieranie.png)
* Funkcja przypiszKod decyduje czy należy zasadzić jedną z modyfikowanych genetycznie roślin, czy należy zasadzić nową (losową).
![](images/przypiszKod.png)
* Gdy liczba zebranych buraków osiągnie określoną wartość, zostanie przeprowadzony algorytm genetyczny i powstanie tablica roślin do zasadzenia
![](images/wykonanie_algorytmu_gen.png)
# Opis algorytmu genetycznego
* Algorytm wykonuje 5 iteracji, w których dokonuje selekcji osobników populacji, które zostaną poddane rozrodowi i wytwarza kolejne pokolenie populacji. Po wyjściu z pętli metodą rankingu selekcjonuje najlepszą część ostatniego pokolenia.
![](images/genetic_algorithm.png)
* Selekcja odbywa się metodą ruletki. Obliczana jest wartość funkcji dostosowania dla każdego osobnika. Im lepsza wartość, tym większa szansa na wylosowanie.
![](images/selection.png)
* Funkcja dostosowania polega na wyliczeniu średniej arytmetycznej trzech wartości: smaku, rozmiaru i koloru rośliny, które są zakodowane w łańcuchu znaków.
![](images/fitness.png)
* Funkcja crossover zajmuje się wywołaniem krzyżowania odpowiedniej liczby osobników
![](images/crossover.png)
* Zastosowana została metoda krzyżowania równomiernego (uniform crossover) z małą modyfikacją, zmniejszającą szansę na to, że dziecko będzie "klonem" rodzica. Istnieje również mała szansa, że dojdzie do równomiernej mutacji (uniform mutation), w której losowa cecha dziecka zostaje wygenerowana na nowo.
![](images/cross.png)

View File

@ -1,211 +0,0 @@
# Podprojekt indywidualny - Szymon Parafiński
---
W folderze Sklearn znajduje się wykorzystana baza, wygenerowane drzewo oraz reszta plików związana z podprojektem.
## Wykorzystana metoda uczenia
Do realizacji podprojektu wykorzystano drzewa decyzyjne do decydowania, co należy zrobić po najechaniu na konkretne pole.
Drzewo decyduje na jakim etapie jest roślina analizując poszczególne stany danego pola:
- Dopiero co zasiana (kiełek)
- 0: "Nie_podejmuj_działania"
- Roślinka kiełkująca (młoda)
- 1: "Zastosuj_nawóz"
- Roślina starzejąca się, bez środka ochrony
- 2: "Zastosuj_środek"
- Roślinka dojrzałam gotowa do zbioru
- 4: "Zbierz"
- Roślina zepsuta, nie nadaje się do użytku
- 5: "Roślina_już_zgniła-zbierz_i_wyrzuć".
Do implementacji drzew decyzyjnych w Pythonie wykorzystane zostały biblioteki
**sklearn** , **pandas**,**sys** oraz **pickle**.
## Uczenie modelu
#### loadLearningBase(): [python]
Metoda **loadLearningBase** rozpoczyna od utworzenia zbioru uczącego na podstawie tabeli zawierającej informacje wszystkich możliwych stanach roślinki.
* *col_names* -> zawiera nagłówki poszczególnych kolumn
* *feature_cols* -> zawiera nagłówki z kolumnami w których znajdują się dane do analizy
```
col_names = ['Warzywo', 'Nawoz', 'Srodek', 'Stan', 'Dzialanie']
base = pd.read_csv("Database.csv", header=None, names=col_names)
feature_cols = ['Warzywo', 'Nawoz', 'Srodek', 'Stan']
""" print dataset"""
# print(base.head())
```
Tutaj dzielimy podane kolumny na dwa typy zmiennych:
* zmienne docelowe ---> y
* i zmienne funkcyjne ---> X
Aby móc sprawdzić wydajność modelu, dzielę zestaw danych na zestaw szkoleniowy i zestaw testowy ---> za pomocą funkcji train_test_split ().
```
X = base[feature_cols] # Features
y = base.Dzialanie # Target variable
# Split dataset into training set and test set
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=1) # 70% training and 30% test
```
Wywołanie funkcji odpowiedzialnej za wygenerowanie drzewa.
```
data = generateDecisionTree(X_train, X_test, y_train, y_test)
```
Dodatkowe elementy pozwalające na wizualizację stworzonego drzewa decyzyjnego poprzez wygenerowanie drzewa zależności if/else lub najpierw do pliku .dot, który następnie poddany odpowiedniej 'obróbce' utworzy obraz.
```
"""generate data for image"""
# tree.export_graphviz(data, out_file='treeData.dot', filled=True, rounded=True, special_characters=True,
# feature_names=feature_cols)
"""Printing if_styled tree to console"""
# tree_to_code(data, feature_cols)
return data
```
---
#### generateDecisionTree(): [python]
Metoda **generateDecisionTree** generuje drzewo decyzyjne na podstawie dostarczonej bazy danych.
Do zmiennej *clf* zapisujemy drzewo decyzyjne z biblioteki **sklearn** utworzone za pomocą metody **DecisionTreeClassifier** z parametrem **criterion** ustawionym na **"entropy"**, który pozwala na uzyskiwanie informacji.
Na drzewie wywołujemy metodę **fit**, która dopasowuje do drzewa zbiór uczący zadany w tablicach **X_train** i **y_train**.
Po dopasowaniu danych możemy przewidzieć stan nowych przykładów, co robimy wywołując na drzewie metodę **predict** z parametrami, które zawierają informację o stanie danego pola.
```
def generateDecisionTree(X_train, X_test, y_train, y_test):
# Create Decision Tree classifer object
clf = DecisionTreeClassifier(criterion="entropy")
# Train Decision Tree Classifer
clf = clf.fit(X_train, y_train)
```
Aby ocenić dokładność naszego modelu przewidujemy odpowiedzi dla naszego zestawu testowego, aby móc go porównać z zestawem y_test i otrzymać dokładność wygenerowanego modelu.
```
# Predict the response for test dataset
y_pred = clf.predict(X_test)
"""Model Accuracy, how often is the classifier correct """
# print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
```
---
#### main(): [python]
Metoda main wywołuje pozostałe metody oraz zapisuje wygenerowany model do pliku .sav aby nie było trzeba ponownie generować drzewa, tylko wczytać już te wygenerowane.
```
generated = loadLearningBase()
# Save generated tree
filename = 'decisionTree.sav'
pickle.dump(generated, open(filename, 'wb'))
```
## Implementacja w projekcie całościowym
Klasa wywoływana w **C++** nazywa się *injectCode*.
Działanie polega na tym że, funkcja **stanPola** sprawdza jakie wartości ma dane pole i generuje odpowiednie polecenie do wykonania.
#### stanPola(): [C++]
```
void stanPola(int x, int y) {
//[x][x][0] = 0 - brak chemii
//[x][x][0] = 1 - tylko nawóz
//[x][x][0] = 2 - tylko środek
//[x][x][0] = 3 - środek i nawóz
//[x][x][1] - wartość wzrostu rośliny
polecenie = "python pliki/injectCode.py 1 ";
if (stan[x][y][0] == 0)
polecenie.append("0 0 ");
if (stan[x][y][0] == 1)
polecenie.append("1 0 ");
if (stan[x][y][0] == 2)
polecenie.append("0 1 ");
if (stan[x][y][0] == 3)
polecenie.append("1 1 ");
int w = (stan[x][y][1]);
std::string s = std::to_string(w);
polecenie.append(s);
decisionTree(polecenie);
}
```
Następnie funckja **decisionTree** wykonuje wygenerowane zapytanie.
#### decisionTree(): [C++]
```
void decisionTree(string polecenie) {
std::string str = polecenie;
const char* c = str.c_str();
system(c);
int line = 0;
ifstream inFile;
inFile.open("pliki/dec.txt");
if (!inFile) {
cout << "Unable to open file";
exit(1); // terminate with error
}
while (inFile >> line) {
decyzja = line;
}
inFile.close();
akcja();
}
```
#### injectCode(): [python]
```
import pickle
import sys
def prediction(warzywo, nawoz ,srodek, stan_wzrostu):
filename = 'pliki/decisionTree.sav'
tree = pickle.load(open(filename, 'rb'))
val = (tree.predict([[warzywo, nawoz, srodek, stan_wzrostu]]))
save(val)
def save(prediction):
pred = str(prediction)
plik = open('pliki/dec.txt', 'w')
plik.write(pred[1])
plik.close()
def decision(prediction):
if prediction == 0:
return "Nie_podejmuj_dzialania"
elif prediction == 1:
return "Zastosuj_nawoz"
elif prediction == 2:
return "Zastosuj_srodek"
elif prediction == 4:
return "Zbierz"
elif prediction == 5:
return "Roslina_juz_zgnila__zbierz_i_wyrzuc"
if __name__ == '__main__':
# Map command line arguments to function arguments.
prediction(*sys.argv[1:])
```
Generowane polecenie wygląda w ten sposób:
```
python injectCode.py a b c d
```
Gdzie:
* a -> rodzaj warzywa
* b -> czy roślina była nawożona
* 0: "nie"
* 1: "tak"
* c -> czy na roślinie był stosowany środek ochronny
* 0: "nie"
* 1: "tak"
* d -> stan wzrostu w jakim znajduje się roślina
* [1,20) - kiełek,
* [20,45) - młoda roślina,
* [45,85) - dojrzała,
* [80,100] - starzejąca się.

File diff suppressed because it is too large Load Diff

View File

@ -1,606 +0,0 @@
#include<iostream>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<string>
#include<list>
#include<set>
#include<math.h>
#include<stack>
using namespace std;
const float maxFloat=FLT_MAX;
const int ROW = 27;
const int COL = 27;
typedef pair<int, int> Pair;
typedef pair<double, pair<int, int>> pPair;
struct cell
{
int parent_i, parent_j;
double f, g, h;
};
char pole[27][27][2];
int pozycjaTraktoraX = 1, pozycjaTraktoraY = 1;
char currentWay = 'S';
void color(string foregroundColor, string backgroundColor)
{
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
int foregroundCode = 15;
if (foregroundColor == "black")
foregroundCode = 0;
if (foregroundColor == "dark_blue")
foregroundCode = 1;
if (foregroundColor == "green")
foregroundCode = 2;
if (foregroundColor == "cyan")
foregroundCode = 3;
if (foregroundColor == "dark_red")
foregroundCode = 4;
if (foregroundColor == "purple")
foregroundCode = 5;
if (foregroundColor == "dark_yellow")
foregroundCode = 6;
if (foregroundColor == "light_gray")
foregroundCode = 7;
if (foregroundColor == "gray")
foregroundCode = 8;
if (foregroundColor == "blue")
foregroundCode = 9;
if (foregroundColor == "lime")
foregroundCode = 10;
if (foregroundColor == "light_blue")
foregroundCode = 11;
if (foregroundColor == "red")
foregroundCode = 12;
if (foregroundColor == "magenta")
foregroundCode = 13;
if (foregroundColor == "yellow")
foregroundCode = 14;
if (foregroundColor == "white")
foregroundCode = 15;
int backgroundCode = 0;
if (backgroundColor == "black")
backgroundCode = 0;
if (backgroundColor == "dark_blue")
backgroundCode = 1;
if (backgroundColor == "green")
backgroundCode = 2;
if (backgroundColor == "cyan")
backgroundCode = 3;
if (backgroundColor == "dark_red")
backgroundCode = 4;
if (backgroundColor == "purple")
backgroundCode = 5;
if (backgroundColor == "dark_yellow")
backgroundCode = 6;
if (backgroundColor == "light_gray")
backgroundCode = 7;
if (backgroundColor == "gray")
backgroundCode = 8;
if (backgroundColor == "blue")
backgroundCode = 9;
if (backgroundColor == "lime")
backgroundCode = 10;
if (backgroundColor == "light_blue")
backgroundCode = 11;
if (backgroundColor == "red")
backgroundCode = 12;
if (backgroundColor == "magenta")
backgroundCode = 13;
if (backgroundColor == "yellow")
backgroundCode = 14;
if (backgroundColor == "white")
backgroundCode = 15;
SetConsoleTextAttribute(hOut, foregroundCode + backgroundCode * 16);
}
void SetWindow(int Width, int Height)
{
_COORD coord;
coord.X = Width;
coord.Y = Height;
_SMALL_RECT Rect;
Rect.Top = 0;
Rect.Left = 0;
Rect.Bottom = Height - 1;
Rect.Right = Width - 1;
HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE); // Get Handle
SetConsoleScreenBufferSize(Handle, coord); // Set Buffer Size
SetConsoleWindowInfo(Handle, TRUE, &Rect); // Set Window Size
}
void updatePola()
{
system("cls");
for (int i = 0; i < 27; i++)
{
for (int j = 0; j < 27; j++)
{
char item = pole[i][j][0];
switch (item)
{
case 'B':
{
color("purple", "dark_yellow");
}break;
case 'T':
{
color("red", "dark_yellow");
}break;
case 'G':
{
color("lime", "dark_yellow");
}break;
case '.':
{
color("yellow", "dark_yellow");
}break;
case '#':
{
color("light_gray", "gray");
}break;
}
cout << pole[i][j][0];
}
cout << endl;
color("white", "black");
}
}
void correctMovement(char wantedWay)
{
while (currentWay != wantedWay)
{
switch (currentWay)
{
case 'N':
{
if (wantedWay == 'S')
currentWay = wantedWay;
else
currentWay = 'W';
}break;
case 'S':
{
if (wantedWay == 'N')
currentWay = wantedWay;
else
currentWay = 'W';
}break;
case 'W':
{
if (wantedWay == 'E')
currentWay = wantedWay;
else
currentWay = 'N';
}break;
case 'E':
{
if (wantedWay == 'W')
currentWay = wantedWay;
else
currentWay = 'N';
}break;
}
}
}
void Move(char kierunek)
{
switch (kierunek)
{
//góra-(w)
case 'w':
{
if (pole[pozycjaTraktoraY - 1][pozycjaTraktoraX][0] != '#')
{
correctMovement('N');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraY--;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
//dół-(s)
case 's':
{
if (pole[pozycjaTraktoraY + 1][pozycjaTraktoraX][0] != '#')
{
correctMovement('S');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraY++;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
//lewo-(a)
case 'a':
{
if (pole[pozycjaTraktoraY][pozycjaTraktoraX - 1][0] != '#')
{
correctMovement('W');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraX--;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
//prawo-(d)
case 'd':
{
if (pole[pozycjaTraktoraY][pozycjaTraktoraX + 1][0] != '#')
{
correctMovement('E');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraX++;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
}
}
bool isValid(int x, int y)
{
if (pole[x][y][0] != '#')
{
return true;
}
return false;
}
bool isDestination(int x, int y,Pair dest)
{
if (dest.first == x && dest.second == y)
{
return true;
}
return false;
}
double calculateHValue(int x, int y, Pair dest)
{
return abs(x - dest.first) + abs(y - dest.second);
}
void tracePath(cell cellDetails[][COL], Pair dest)
{
//printf("\nThe Path is "); //----start info
int row = dest.first;
int col = dest.second;
stack<Pair> Path;
while (!(cellDetails[row][col].parent_i == row
&& cellDetails[row][col].parent_j == col))
{
Path.push(make_pair(row, col));
int temp_row = cellDetails[row][col].parent_i;
int temp_col = cellDetails[row][col].parent_j;
row = temp_row;
col = temp_col;
}
Path.push(make_pair(row, col));
while (!Path.empty())
{
pair<int, int> p = Path.top();
Path.pop();
if (p.first > pozycjaTraktoraX)
Move('d');
if (p.first < pozycjaTraktoraX)
Move('a');
if (p.second > pozycjaTraktoraY)
Move('s');
if (p.second < pozycjaTraktoraY)
Move('w');
//printf("-> (%d,%d) ", p.first, p.second); //---- informacja wierzchołku
Sleep(1000);
}
return;
}
void aStarSearch(int grid[][COL],Pair src, Pair dest)
{
bool closedList[ROW][COL];
memset(closedList, false, sizeof(closedList));
cell cellDetails[ROW][COL];
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
cellDetails[i][j].f = maxFloat;
cellDetails[i][j].g = maxFloat;
cellDetails[i][j].h = maxFloat;
cellDetails[i][j].parent_i = -1;
cellDetails[i][j].parent_j = -1;
}
}
i = src.first, j = src.second;
cellDetails[i][j].f = 0.0;
cellDetails[i][j].g = 0.0;
cellDetails[i][j].h = 0.0;
cellDetails[i][j].parent_i = i;
cellDetails[i][j].parent_j = j;
set<pPair> openList;
openList.insert(make_pair(0.0, make_pair(i, j)));
bool foundDest = false;
while (!openList.empty())
{
pPair p = *openList.begin();
openList.erase(openList.begin());
i = p.second.first;
j = p.second.second;
closedList[i][j] = true;
double gNew, hNew, fNew;
double waga = 1.0;
waga = ((double)pole[j][i][1] - 48)*1.0;//----waga
//----------- 1st Successor (North) ------------
if (isValid(i - 1, j) == true)
{
if (isDestination(i - 1, j, dest) == true)
{
cellDetails[i - 1][j].parent_i = i;
cellDetails[i - 1][j].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i - 1][j] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i - 1, j, dest);
fNew = gNew + hNew;
if (cellDetails[i - 1][j].f == maxFloat ||
cellDetails[i - 1][j].f > fNew)
{
openList.insert(make_pair(fNew,
make_pair(i - 1, j)));
cellDetails[i - 1][j].f = fNew;
cellDetails[i - 1][j].g = gNew;
cellDetails[i - 1][j].h = hNew;
cellDetails[i - 1][j].parent_i = i;
cellDetails[i - 1][j].parent_j = j;
}
}
}
//----------- 2nd Successor (South) ------------
if (isValid(i + 1, j) == true)
{
if (isDestination(i + 1, j, dest) == true)
{
cellDetails[i + 1][j].parent_i = i;
cellDetails[i + 1][j].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i + 1][j] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i + 1, j, dest);
fNew = gNew + hNew;
if (cellDetails[i + 1][j].f == maxFloat ||
cellDetails[i + 1][j].f > fNew)
{
openList.insert(make_pair(fNew, make_pair(i + 1, j)));
cellDetails[i + 1][j].f = fNew;
cellDetails[i + 1][j].g = gNew;
cellDetails[i + 1][j].h = hNew;
cellDetails[i + 1][j].parent_i = i;
cellDetails[i + 1][j].parent_j = j;
}
}
}
//----------- 3rd Successor (East) ------------
if (isValid(i, j + 1) == true)
{
if (isDestination(i, j + 1, dest) == true)
{
cellDetails[i][j + 1].parent_i = i;
cellDetails[i][j + 1].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i][j + 1] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i, j + 1, dest);
fNew = gNew + hNew;
if (cellDetails[i][j + 1].f == maxFloat ||
cellDetails[i][j + 1].f > fNew)
{
openList.insert(make_pair(fNew,
make_pair(i, j + 1)));
cellDetails[i][j + 1].f = fNew;
cellDetails[i][j + 1].g = gNew;
cellDetails[i][j + 1].h = hNew;
cellDetails[i][j + 1].parent_i = i;
cellDetails[i][j + 1].parent_j = j;
}
}
}
//----------- 4th Successor (West) ------------
if (isValid(i, j - 1) == true)
{
if (isDestination(i, j - 1, dest) == true)
{
cellDetails[i][j - 1].parent_i = i;
cellDetails[i][j - 1].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i][j - 1] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i, j - 1, dest);
fNew = gNew + hNew;
if (cellDetails[i][j - 1].f == maxFloat ||
cellDetails[i][j - 1].f > fNew)
{
openList.insert(make_pair(fNew,
make_pair(i, j - 1)));
cellDetails[i][j - 1].f = fNew;
cellDetails[i][j - 1].g = gNew;
cellDetails[i][j - 1].h = hNew;
cellDetails[i][j - 1].parent_i = i;
cellDetails[i][j - 1].parent_j = j;
}
}
}
}
/*if (foundDest == false)
printf("Failed to find the Destination Cell\n");*/
return;
}
void gogo(int endX,int endY)
{
updatePola();
Sleep(1000);
int grid[27][27];
for (int i = 0; i < 27; i++)
{
for (int j = 0; j < 27; j++)
{
grid[i][j] = 0;
}
}
Pair src = make_pair(pozycjaTraktoraX, pozycjaTraktoraY);
Pair dest = make_pair(endX, endY);
aStarSearch(grid, src, dest);
}
void test1()
{
pole[1][3][0] = 'B';
pole[1][3][1] = '9';
pole[3][1][0] = 'B';
pole[3][1][1] = '9';
}
void test2()
{
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < i; j++)
{
pole[i][j][0] = 'B';
pole[i][j][1] = '9';
}
}
test1();
updatePola();
}
void start1()
{
int goalX = 3, goalY = 4;
test1();
pole[1][1][0] = 'T';
pole[1][1][1] = '1';
pole[goalY][goalX][0] = 'G';
pole[goalY][goalX][1] = '9';
gogo(goalX, goalY);
}
void start2()
{
int goalX = 6, goalY = 6;
test2();
pole[1][1][0] = 'T';
pole[1][1][1] = '1';
pole[goalY][goalX][0] = 'G';
pole[goalY][goalX][1] = '9';
gogo(goalX, goalY);
}
void start3()
{
int goalX = 6, goalY = 9;
test2();
pole[1][1][0] = 'T';
pole[1][1][1] = '1';
pole[goalY][goalX][0] = 'G';
pole[goalY][goalX][1] = '9';
gogo(goalX, goalY);
}
int main()
{
SetWindow(50, 30);
//create pola//
for (int i = 0; i < 27; i++)
{
pole[i][0][0] = '#';
pole[0][i][0] = '#';
pole[26][i][0] = '#';
pole[i][26][0] = '#';
pole[i][0][1] = '9';
pole[0][i][1] = '9';
pole[26][i][1] = '9';
pole[i][26][1] = '9';
}
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < 26; j++)
{
pole[i][j][0] = '.';
pole[i][j][1] = '1';
}
}
for (int i = 0; i < 25; i++)
{
pole[i + 1][i + 1][0] = 'B';
pole[i + 1][i + 1][1] = '9';
}
updatePola();
start3(); // testy start 1-3
//---------start---------//
bool traktorDziala = true;
char akcja;
do
{
akcja = _getch();
if (akcja == 'w' || akcja == 's' || akcja == 'a' || akcja == 'd')
{
Move(akcja);
}
if (akcja == '0')
{
traktorDziala = false;
}
} while (traktorDziala);
//---------end---------//
return 0;
}

View File

@ -1,712 +0,0 @@
#include<iostream>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<string>
#include<list>
#include<set>
#include<math.h>
#include<stack>
#include<fstream>
using namespace std;
const float maxFloat=FLT_MAX;
const int ROW = 27;
const int COL = 27;
typedef pair<int, int> Pair;
typedef pair<double, pair<int, int>> pPair;
struct cell
{
int parent_i, parent_j;
double f, g, h;
};
char pole[27][27][6];
int pozycjaTraktoraX = 1, pozycjaTraktoraY = 1;
char currentWay = 'S';
void color(string foregroundColor, string backgroundColor)
{
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
int foregroundCode = 15;
if (foregroundColor == "black")
foregroundCode = 0;
if (foregroundColor == "dark_blue")
foregroundCode = 1;
if (foregroundColor == "green")
foregroundCode = 2;
if (foregroundColor == "cyan")
foregroundCode = 3;
if (foregroundColor == "dark_red")
foregroundCode = 4;
if (foregroundColor == "purple")
foregroundCode = 5;
if (foregroundColor == "dark_yellow")
foregroundCode = 6;
if (foregroundColor == "light_gray")
foregroundCode = 7;
if (foregroundColor == "gray")
foregroundCode = 8;
if (foregroundColor == "blue")
foregroundCode = 9;
if (foregroundColor == "lime")
foregroundCode = 10;
if (foregroundColor == "light_blue")
foregroundCode = 11;
if (foregroundColor == "red")
foregroundCode = 12;
if (foregroundColor == "magenta")
foregroundCode = 13;
if (foregroundColor == "yellow")
foregroundCode = 14;
if (foregroundColor == "white")
foregroundCode = 15;
int backgroundCode = 0;
if (backgroundColor == "black")
backgroundCode = 0;
if (backgroundColor == "dark_blue")
backgroundCode = 1;
if (backgroundColor == "green")
backgroundCode = 2;
if (backgroundColor == "cyan")
backgroundCode = 3;
if (backgroundColor == "dark_red")
backgroundCode = 4;
if (backgroundColor == "purple")
backgroundCode = 5;
if (backgroundColor == "dark_yellow")
backgroundCode = 6;
if (backgroundColor == "light_gray")
backgroundCode = 7;
if (backgroundColor == "gray")
backgroundCode = 8;
if (backgroundColor == "blue")
backgroundCode = 9;
if (backgroundColor == "lime")
backgroundCode = 10;
if (backgroundColor == "light_blue")
backgroundCode = 11;
if (backgroundColor == "red")
backgroundCode = 12;
if (backgroundColor == "magenta")
backgroundCode = 13;
if (backgroundColor == "yellow")
backgroundCode = 14;
if (backgroundColor == "white")
backgroundCode = 15;
SetConsoleTextAttribute(hOut, foregroundCode + backgroundCode * 16);
}
void SetWindow(int Width, int Height)
{
_COORD coord;
coord.X = Width;
coord.Y = Height;
_SMALL_RECT Rect;
Rect.Top = 0;
Rect.Left = 0;
Rect.Bottom = Height - 1;
Rect.Right = Width - 1;
HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE); // Get Handle
SetConsoleScreenBufferSize(Handle, coord); // Set Buffer Size
SetConsoleWindowInfo(Handle, TRUE, &Rect); // Set Window Size
}
void updatePola()
{
system("cls");
for (int i = 0; i < 27; i++)
{
for (int j = 0; j < 27; j++)
{
char item = pole[i][j][0];
switch (item)
{
case 'B':
{
color("purple", "dark_yellow");
}break;
case 'Z':
{
color("cyan", "dark_yellow");
}break;
case 'T':
{
color("red", "dark_yellow");
}break;
case 'G':
{
color("lime", "dark_yellow");
}break;
case '.':
{
color("yellow", "dark_yellow");
}break;
case '#':
{
color("light_gray", "gray");
}break;
}
cout << pole[i][j][0];
}
cout << endl;
color("white", "black");
}
}
void correctMovement(char wantedWay)
{
while (currentWay != wantedWay)
{
switch (currentWay)
{
case 'N':
{
if (wantedWay == 'S')
currentWay = wantedWay;
else
currentWay = 'W';
}break;
case 'S':
{
if (wantedWay == 'N')
currentWay = wantedWay;
else
currentWay = 'W';
}break;
case 'W':
{
if (wantedWay == 'E')
currentWay = wantedWay;
else
currentWay = 'N';
}break;
case 'E':
{
if (wantedWay == 'W')
currentWay = wantedWay;
else
currentWay = 'N';
}break;
}
}
}
void Move(char kierunek)
{
switch (kierunek)
{
//góra-(w)
case 'w':
{
if (pole[pozycjaTraktoraY - 1][pozycjaTraktoraX][0] != '#')
{
correctMovement('N');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraY--;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
//dół-(s)
case 's':
{
if (pole[pozycjaTraktoraY + 1][pozycjaTraktoraX][0] != '#')
{
correctMovement('S');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraY++;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
//lewo-(a)
case 'a':
{
if (pole[pozycjaTraktoraY][pozycjaTraktoraX - 1][0] != '#')
{
correctMovement('W');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraX--;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
//prawo-(d)
case 'd':
{
if (pole[pozycjaTraktoraY][pozycjaTraktoraX + 1][0] != '#')
{
correctMovement('E');
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = '.';
pozycjaTraktoraX++;
pole[pozycjaTraktoraY][pozycjaTraktoraX][0] = 'T';
}
updatePola();
}break;
}
}
bool isValid(int x, int y)
{
if (pole[x][y][0] != '#')
{
return true;
}
return false;
}
bool isDestination(int x, int y,Pair dest)
{
if (dest.first == x && dest.second == y)
{
return true;
}
return false;
}
double calculateHValue(int x, int y, Pair dest)
{
return abs(x - dest.first) + abs(y - dest.second);
}
void tracePath(cell cellDetails[][COL], Pair dest)
{
//printf("\nThe Path is "); //----start info
int row = dest.first;
int col = dest.second;
stack<Pair> Path;
while (!(cellDetails[row][col].parent_i == row
&& cellDetails[row][col].parent_j == col))
{
Path.push(make_pair(row, col));
int temp_row = cellDetails[row][col].parent_i;
int temp_col = cellDetails[row][col].parent_j;
row = temp_row;
col = temp_col;
}
Path.push(make_pair(row, col));
while (!Path.empty())
{
pair<int, int> p = Path.top();
Path.pop();
if (p.first > pozycjaTraktoraX)
Move('d');
if (p.first < pozycjaTraktoraX)
Move('a');
if (p.second > pozycjaTraktoraY)
Move('s');
if (p.second < pozycjaTraktoraY)
Move('w');
//printf("-> (%d,%d) ", p.first, p.second); //---- informacja wierzchołku
Sleep(1000);
}
return;
}
void aStarSearch(int grid[][COL],Pair src, Pair dest)
{
bool closedList[ROW][COL];
memset(closedList, false, sizeof(closedList));
cell cellDetails[ROW][COL];
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
cellDetails[i][j].f = maxFloat;
cellDetails[i][j].g = maxFloat;
cellDetails[i][j].h = maxFloat;
cellDetails[i][j].parent_i = -1;
cellDetails[i][j].parent_j = -1;
}
}
i = src.first, j = src.second;
cellDetails[i][j].f = 0.0;
cellDetails[i][j].g = 0.0;
cellDetails[i][j].h = 0.0;
cellDetails[i][j].parent_i = i;
cellDetails[i][j].parent_j = j;
set<pPair> openList;
openList.insert(make_pair(0.0, make_pair(i, j)));
bool foundDest = false;
while (!openList.empty())
{
pPair p = *openList.begin();
openList.erase(openList.begin());
i = p.second.first;
j = p.second.second;
closedList[i][j] = true;
double gNew, hNew, fNew;
double waga = 1.0;
waga = ((double)pole[j][i][1] - 48)*1.0;//----waga
//----------- 1st Successor (North) ------------
if (isValid(i - 1, j) == true)
{
if (isDestination(i - 1, j, dest) == true)
{
cellDetails[i - 1][j].parent_i = i;
cellDetails[i - 1][j].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i - 1][j] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i - 1, j, dest);
fNew = gNew + hNew;
if (cellDetails[i - 1][j].f == maxFloat ||
cellDetails[i - 1][j].f > fNew)
{
openList.insert(make_pair(fNew,
make_pair(i - 1, j)));
cellDetails[i - 1][j].f = fNew;
cellDetails[i - 1][j].g = gNew;
cellDetails[i - 1][j].h = hNew;
cellDetails[i - 1][j].parent_i = i;
cellDetails[i - 1][j].parent_j = j;
}
}
}
//----------- 2nd Successor (South) ------------
if (isValid(i + 1, j) == true)
{
if (isDestination(i + 1, j, dest) == true)
{
cellDetails[i + 1][j].parent_i = i;
cellDetails[i + 1][j].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i + 1][j] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i + 1, j, dest);
fNew = gNew + hNew;
if (cellDetails[i + 1][j].f == maxFloat ||
cellDetails[i + 1][j].f > fNew)
{
openList.insert(make_pair(fNew, make_pair(i + 1, j)));
cellDetails[i + 1][j].f = fNew;
cellDetails[i + 1][j].g = gNew;
cellDetails[i + 1][j].h = hNew;
cellDetails[i + 1][j].parent_i = i;
cellDetails[i + 1][j].parent_j = j;
}
}
}
//----------- 3rd Successor (East) ------------
if (isValid(i, j + 1) == true)
{
if (isDestination(i, j + 1, dest) == true)
{
cellDetails[i][j + 1].parent_i = i;
cellDetails[i][j + 1].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i][j + 1] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i, j + 1, dest);
fNew = gNew + hNew;
if (cellDetails[i][j + 1].f == maxFloat ||
cellDetails[i][j + 1].f > fNew)
{
openList.insert(make_pair(fNew,
make_pair(i, j + 1)));
cellDetails[i][j + 1].f = fNew;
cellDetails[i][j + 1].g = gNew;
cellDetails[i][j + 1].h = hNew;
cellDetails[i][j + 1].parent_i = i;
cellDetails[i][j + 1].parent_j = j;
}
}
}
//----------- 4th Successor (West) ------------
if (isValid(i, j - 1) == true)
{
if (isDestination(i, j - 1, dest) == true)
{
cellDetails[i][j - 1].parent_i = i;
cellDetails[i][j - 1].parent_j = j;
//printf("The destination cell is found\n");
tracePath(cellDetails, dest);
foundDest = true;
return;
}
else if (closedList[i][j - 1] == false)
{
gNew = cellDetails[i][j].g + waga;
hNew = calculateHValue(i, j - 1, dest);
fNew = gNew + hNew;
if (cellDetails[i][j - 1].f == maxFloat ||
cellDetails[i][j - 1].f > fNew)
{
openList.insert(make_pair(fNew,
make_pair(i, j - 1)));
cellDetails[i][j - 1].f = fNew;
cellDetails[i][j - 1].g = gNew;
cellDetails[i][j - 1].h = hNew;
cellDetails[i][j - 1].parent_i = i;
cellDetails[i][j - 1].parent_j = j;
}
}
}
}
/*if (foundDest == false)
printf("Failed to find the Destination Cell\n");*/
return;
}
void gogo(int endX,int endY)
{
updatePola();
Sleep(1000);
int grid[27][27];
for (int i = 0; i < 27; i++)
{
for (int j = 0; j < 27; j++)
{
grid[i][j] = 0;
}
}
Pair src = make_pair(pozycjaTraktoraX, pozycjaTraktoraY);
Pair dest = make_pair(endX, endY);
aStarSearch(grid, src, dest);
}
void test1()
{
pole[1][3][0] = 'B';
pole[1][3][1] = '9';
pole[3][1][0] = 'Z';
pole[3][1][1] = '9';
}
void test2()
{
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < i; j++)
{
pole[i][j][0] = 'B';
pole[i][j][1] = '9';
}
}
test1();
updatePola();
}
void testSI1()
{
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < 26; j++)
{
if (j % 3 == 0)
{
pole[i][j][2] = 'z'; //zyzne
pole[i][j][3] = 'n'; //nawodnione
pole[i][j][4] = 'c'; //w cieniu
pole[i][j][5] = 'k'; //kwasne
}
else
{
if (j % 3 == 1)
{
pole[i][j][2] = 'j'; //jalowe
pole[i][j][3] = 'n'; //nawodnione
pole[i][j][4] = 's'; //w sloncu
pole[i][j][5] = 'n'; //neutralne
}
else
{
pole[i][j][2] = 'z'; //zyzne
pole[i][j][3] = 's'; //suche
pole[i][j][4] = 's'; //sloneczne
pole[i][j][5] = 'z'; //zasadowe
}
}
}
}
}
void sendState()
{
ofstream write("dane.txt");
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < 26; j++)
{
string a;
a += pole[i][j][2];
a += ' ';
a += pole[i][j][3];
a += ' ';
a += pole[i][j][4];
a += ' ';
a += pole[i][j][5];
write << a << endl;
}
}
write.close();
}
void reciveState()
{
ifstream read("decyzje.txt");
if (read.is_open())
{
char plant;
int i = 1;
int j = 1;
while (read >> plant)
{
if (j == 25)
{
gogo(1, i+1);
}
else
{
gogo(j+1 , i );
}
pole[i][j][0] = plant;
if (plant == '.')
{
pole[i][j][1] = '1';
}
else
{
pole[i][j][1] = '9';
}
if (j == 25)
{
j = 1;
i += 1;
}
else
{
j += 1;
}
}
}
}
void start1()
{
int goalX = 3, goalY = 4;
test1();
testSI1();
pole[1][1][0] = 'T';
pole[1][1][1] = '1';
pole[goalY][goalX][0] = 'G';
pole[goalY][goalX][1] = '9';
gogo(goalX, goalY);
gogo(goalX - 1, goalY);
pole[goalY][goalX][0] = 'Z';
pole[goalY][goalX][1] = '9';
updatePola();
//sendState(); //trzeba ręcznie zmieniać między wysyłaniem stanu a pobieraniem stanu pola
reciveState();
}
void start2()
{
int goalX = 6, goalY = 6;
test2();
pole[1][1][0] = 'T';
pole[1][1][1] = '1';
pole[goalY][goalX][0] = 'G';
pole[goalY][goalX][1] = '9';
gogo(goalX, goalY);
}
void start3()
{
int goalX = 6, goalY = 9;
test2();
pole[1][1][0] = 'T';
pole[1][1][1] = '1';
pole[goalY][goalX][0] = 'G';
pole[goalY][goalX][1] = '9';
gogo(goalX, goalY);
}
int main()
{
SetWindow(50, 30);
//create pola//
for (int i = 0; i < 27; i++)
{
pole[i][0][0] = '#';
pole[0][i][0] = '#';
pole[26][i][0] = '#';
pole[i][26][0] = '#';
pole[i][0][1] = '9';
pole[0][i][1] = '9';
pole[26][i][1] = '9';
pole[i][26][1] = '9';
}
for (int i = 1; i < 26; i++)
{
for (int j = 1; j < 26; j++)
{
pole[i][j][0] = '.';
pole[i][j][1] = '1';
}
}
for (int i = 0; i < 25; i++)
{
pole[i + 1][i + 1][0] = 'B';
pole[i + 1][i + 1][1] = '9';
}
updatePola();
start1(); // testy start 1-3
//---------start---------//
bool traktorDziala = true;
char akcja;
do
{
akcja = _getch();
if (akcja == 'w' || akcja == 's' || akcja == 'a' || akcja == 'd')
{
Move(akcja);
}
if (akcja == '0')
{
traktorDziala = false;
}
} while (traktorDziala);
//---------end---------//
return 0;
}

File diff suppressed because it is too large Load Diff

625
dane.txt
View File

@ -1,625 +0,0 @@
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n
z s s z
z n c k
j n s n

Binary file not shown.

View File

@ -1,625 +0,0 @@
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.
B
Z
.

View File

@ -1,165 +0,0 @@
training_data = [
#zyznosc, nawodnienie, cien, kwasowosc
['z', 'n', 's', 'z', 1],
['z', 'n', 's', 'n', 1],
['j', 'n', 's', 'z', 1],
['z', 's', 's', 'n', 1],
['j', 'n', 'c', 'n', 1],
['z', 'n', 's', 'k', 1],
['z', 'n', 'c', 'k', 2],
['z', 's', 's', 'k', 2],
['z', 's', 'c', 'k', 2],
['j', 'n', 's', 'k', 2],
['z', 's', 'c', 'z', 3],
['j', 'n', 's', 'n', 3]
]
header = ["zyznosc", "nawodnienie", "cien", "kwasowosc", "wybor"]
def class_counts(rows):
counts = {}
for row in rows:
label = row[-1]
if label not in counts:
counts[label] = 0
counts[label] += 1
return counts
def is_numeric(value):
return isinstance(value, int) or isinstance(value, float)
class Question:
def __init__(self, column, value):
self.column = column
self.value = value
def match(self, example):
val = example[self.column]
if is_numeric(val):
return val >= self.value
else:
return val == self.value
def __repr__(self):
condition = "=="
if is_numeric(self.value):
condition = ">="
return "Czy %s %s %s?" % (
header[self.column], condition, str(self.value))
def partition(rows, question):
true_rows, false_rows = [], []
for row in rows:
if question.match(row):
true_rows.append(row)
else:
false_rows.append(row)
return true_rows, false_rows
def gini(rows):
counts = class_counts(rows)
impurity = 1
for lbl in counts:
prob_of_lbl = counts[lbl] / float(len(rows))
impurity -= prob_of_lbl**2
return impurity
def info_gain(left, right, current_uncertainty):
p = float(len(left)) / (len(left) + len(right))
return current_uncertainty - p * gini(left) - (1 - p) * gini(right)
def find_best_split(rows):
best_gain = 0
best_question = None
current_uncertainty = gini(rows)
n_features = len(rows[0]) - 1
for col in range(n_features):
values = set([row[col] for row in rows])
for val in values:
question = Question(col, val)
true_rows, false_rows = partition(rows, question)
if len(true_rows) == 0 or len(false_rows) == 0:
continue
gain = info_gain(true_rows, false_rows, current_uncertainty)
if gain >= best_gain:
best_gain, best_question = gain, question
return best_gain, best_question
class Leaf:
def __init__(self, rows):
self.predictions = class_counts(rows)
class Decision_Node:
def __init__(self,
question,
true_branch,
false_branch):
self.question = question
self.true_branch = true_branch
self.false_branch = false_branch
def build_tree(rows):
gain, question = find_best_split(rows)
if gain == 0:
return Leaf(rows)
true_rows, false_rows = partition(rows, question)
true_branch = build_tree(true_rows)
false_branch = build_tree(false_rows)
return Decision_Node(question, true_branch, false_branch)
def print_tree(node, spacing=""):
if isinstance(node, Leaf):
print (spacing + "Predict", node.predictions)
return
print (spacing + str(node.question))
print (spacing + '--> True:')
print_tree(node.true_branch, spacing + " ")
print (spacing + '--> False:')
print_tree(node.false_branch, spacing + " ")
my_tree = build_tree(training_data)
print_tree(my_tree)
def classify(row, node):
if isinstance(node, Leaf):
return node.predictions
if node.question.match(row):
return classify(row, node.true_branch)
else:
return classify(row, node.false_branch)
def print_leaf(counts):
total = sum(counts.values()) * 1.0
probs = {}
for lbl in counts.keys():
probs[lbl] = str(int(counts[lbl] / total * 100)) + "%"
return probs
with open( 'dane.txt', "r" ) as f:
testing_data = [ line.split() for line in f ]
file = open("decyzje.txt", "w")
file.write("")
file.close()
for row in testing_data:
pom = print_leaf(classify(row, my_tree))
f = open("decyzje.txt", "a")
if pom == {1: '100%'}:
f.write("B\n")
if pom == {2: '100%'}:
f.write("Z\n")
if pom == {3: '100%'}:
f.write(".\n")
f.close()

View File

@ -8,7 +8,7 @@ którym będzie poruszał się agent.
W skład zespołu wchodzą:
Tomasz Dzierzbicki,
Szymon Parafiński,
Laura Piotrowska,
Karol Piotrowski,
Jarosław Zbąski.
# Temat projektu i wybrane rozwiązanie

View File

@ -1,52 +0,0 @@
# Szymon Parafiński
implementacja drzew decyzyjnych z nauczonego pliku
![](images/last_images/1.png)
implementacja funkcji która decyduje co zrobić z obecnym polem
![](images/last_images/2.png)
Funkcja jest zastosowana podczas osiągniecia celu ruchu
![](images/last_images/3.png)
# Tomasz Dzierzbicki
implementacja sieci neuronowych z nauczonego pliku
![](images/last_images/4.png)
implementacja funkcji która szuka nalepszego pola do zastosowania na nim działań
![](images/last_images/5.png)
Funkcja jest używana w nieskończoność po uruchomieniu programu
![](images/last_images/6.png)
# Jarosław Zbąski
implementacja drzew decyzyjnych z nauczonego pliku
![](images/last_images/7.png)
implementacja funkcji która decyduje co posadzić
![](images/last_images/8.png)
Funkcja jest zastosowana po zebraniu na tym samym polu
![](images/last_images/9.png)
# Laura Piotrowska
implementacja algorytmu genetycznego
![](images/last_images/10.png)
Zaimplementowane zostało zbieranie warzyw, a algorytm przygotowuje porcję nowych roślin do zasadzenia
Algorytm jest wywoływany co ustaloną liczbę zebranych buraków lub ziemniaków
![](images/last_images/obsluga.png)
Implementacja zbierania
![](images/last_images/11.png)

BIN
images/13_05/IMG_4182.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

View File

@ -1,33 +0,0 @@
import pickle
import sys
def prediction(warzywo, nawoz ,srodek, stan_wzrostu):
filename = 'decisionTree.sav'
tree = pickle.load(open(filename, 'rb'))
val = (tree.predict([[warzywo, nawoz, srodek, stan_wzrostu]]))
save(val)
def save(prediction):
pred = str(prediction)
plik = open('dec.txt', 'w')
plik.write(pred[1])
plik.close()
def decision(prediction):
if prediction == 0:
return "Nie_podejmuj_dzialania"
elif prediction == 1:
return "Zastosuj_nawoz"
elif prediction == 2:
return "Zastosuj_srodek"
elif prediction == 4:
return "Zbierz"
elif prediction == 5:
return "Roslina_juz_zgnila__zbierz_i_wyrzuc"
if __name__ == '__main__':
# Map command line arguments to function arguments.
prediction(*sys.argv[1:])

View File

@ -1,625 +0,0 @@
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454
0.15760229181 2.67552455e-9 0.00126219853 0.21969625454

View File

@ -5,7 +5,7 @@ Ten dokument to raport z wykonanego drugiego zadania projektu zespołowego na pr
W skład zespołu wchodzą:
Tomasz Dzierzbicki,
Szymon Parafiński,
Laura Piotrowska,
Karol Piotrowski,
Jarosław Zbąski.
# Zasady poruszania się agenta po planszy