Compare commits

..

No commits in common. "master" and "Reprezentacja_wiedzy" have entirely different histories.

4901 changed files with 39 additions and 1395 deletions

View File

@ -4,7 +4,7 @@
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="jdk" jdkName="Python 3.10 (Traktor)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (Traktor)" project-jdk-type="Python SDK" />
</project>

Binary file not shown.

View File

@ -1,27 +0,0 @@
import torch.nn as nn
import torch
import torch.nn.functional as F
class Conv_Neural_Network_Model(nn.Module):
def __init__(self, num_classes=5,hidden_layer1 = 512,hidden_layer2 = 256):
super(Conv_Neural_Network_Model, self).__init__()
self.conv1 = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, stride=1, padding=1)
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2, padding=0)
self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, stride=1, padding=1)
self.fc1 = nn.Linear(64*25*25,hidden_layer1)
self.fc2 = nn.Linear(hidden_layer1,hidden_layer2)
self.out = nn.Linear(hidden_layer2,num_classes)
def forward(self, x):
x = self.pool1(F.relu(self.conv1(x)))
x = self.pool1(F.relu(self.conv2(x)))
x = x.view(-1, 64*25*25) #<----flattening the image
x = self.fc1(x)
x = torch.relu(x)
x = self.fc2(x)
x = torch.relu(x)
x = self.out(x)
return F.log_softmax(x, dim=-1)

View File

@ -1,127 +0,0 @@
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms, utils
from torchvision.transforms import Compose, Lambda, ToTensor
import matplotlib.pyplot as plt
from NN.model import *
from PIL import Image
import pygame
from area.constants import GREY
device = torch.device('cuda') if torch.cuda.is_available() else torch.device('cpu')
#data transform to tensors:
data_transformer = transforms.Compose([
transforms.Resize((100, 100)),
transforms.ToTensor(),
transforms.Normalize((0.5, 0.5, 0.5 ), (0.5, 0.5, 0.5))
])
#loading data:
train_set = datasets.ImageFolder(root='resources/train', transform=data_transformer)
test_set = datasets.ImageFolder(root='resources/test', transform=data_transformer)
#to mozna nawet przerzucic do funkcji train:
# train_loader = DataLoader(train_set, batch_size=64, shuffle=True)
#test_loader = DataLoader(test_set, batch_size=32, shuffle=True)
#function for training model
def train(model, dataset, iter=100, batch_size=64):
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
criterion = nn.NLLLoss()
train_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
model.train()
for epoch in range(iter):
for inputs, labels in train_loader:
optimizer.zero_grad()
output = model(inputs.to(device))
loss = criterion(output, labels.to(device))
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print('epoch: %3d loss: %.4f' % (epoch, loss))
#function for getting accuracy
def accuracy(model, dataset):
model.eval()
with torch.no_grad():
correct = sum([
(model(inputs.to(device)).argmax(dim=1) == labels.to(device)).sum()
for inputs, labels in DataLoader(dataset, batch_size=64, shuffle=True)
])
return correct.float() / len(dataset)
# model = Conv_Neural_Network_Model()
# model.to(device)
#loading the already saved model:
# model.load_state_dict(torch.load('CNN_model.pth'))
# model.eval()
# #training the model:
# train(model, train_set)
# print(f"Accuracy of the network is: {100*accuracy(model, test_set)}%")
# torch.save(model.state_dict(), 'CNN_model.pth')
def load_model():
model = Conv_Neural_Network_Model()
model.load_state_dict(torch.load('CNN_model.pth', map_location=torch.device('cpu')))
model.eval()
return model
def load_image(image_path):
testImage = Image.open(image_path).convert('RGB')
testImage = data_transformer(testImage)
testImage = testImage.unsqueeze(0)
return testImage
#display the image for prediction next to the field
def display_image(screen, image_path, position):
image = pygame.image.load(image_path)
image = pygame.transform.scale(image, (250, 250))
screen.blit(image, position)
#display result of the guessed image (text under the image)
def display_result(screen, position, predicted_class):
font = pygame.font.Font(None, 30)
displayed_text = font.render("The predicted image is: "+str(predicted_class), 1, (255,255,255))
screen.blit(displayed_text, position)
def clear_text_area(win, x, y, width, height, color=GREY):
pygame.draw.rect(win, color, (x, y, width, height))
pygame.display.update()
def guess_image(model, image_tensor):
with torch.no_grad():
testOutput = model(image_tensor)
_, predicted = torch.max(testOutput, 1)
predicted_class = train_set.classes[predicted.item()]
return predicted_class
#TEST - loading the image and getting results:
# testImage_path = 'resources/images/plant_photos/1c76aa4d-11f4-47d1-8bdd-2cb78deeeccf.jpg'
# testImage = Image.open(testImage_path)
# testImage = data_transformer(testImage)
# testImage = testImage.unsqueeze(0)
# testImage = testImage.to(device)
# model.load_state_dict(torch.load('CNN_model.pth'))
# model.to(device)
# model.eval()
# testOutput = model(testImage)
# _, predicted = torch.max(testOutput, 1)
# predicted_class = train_set.classes[predicted.item()]
# print(f'The predicted class is: {predicted_class}')

View File

@ -12,9 +12,6 @@ GROUND = ""
# path to ground image
GREY = (20, 17, 17, 255)
DIRECTION_NORTH = 1
DIRECTION_EAST = 2
DIRECTION_SOUTH = 3
DIRECTION_WEST = 4

View File

@ -1,16 +1,12 @@
# create a field here : 1: add tiles, 2: place them
import pygame
import random
from area.constants import WIDTH,FIELD_WIDTH,TILE_SIZE,GREY,ROWS,COLS
from area.constants import WIDTH,HEIGHT,FIELD_WIDTH,FIELD_HEIGHT,TILE_SIZE,GREY,ROWS,COLS
from area.tractor import Tractor
from tile import Tile
from ground import Dirt
from genetic import genetic_algorithm
import os
tiles = []
tractor = Tractor(0*TILE_SIZE, 0*TILE_SIZE)
fieldX = (WIDTH-FIELD_WIDTH)/2
# in center of the screen
fieldY = 100
@ -21,58 +17,16 @@ def positionFieldElements():
for t in tiles:
t.x += fieldX
t.y += fieldY
tractor.x += fieldX
tractor.y += fieldY
''' def createTiles():
def createTiles():
for y in range(0, COLS):
for x in range(0, ROWS):
tile = Tile(x*TILE_SIZE, y*TILE_SIZE)
dirt = Dirt(random.randint(1, 100), random.randint(1, 100))
dirt.pests_and_weeds()
tile.ground = dirt
tile.randomizeContent()
tiles.append(tile)
positionFieldElements()
return tiles '''
def createTiles():
best = genetic_algorithm(50, 20, 0.7, 10)
for y in range(COLS):
for x in range (ROWS):
tile = Tile(x * TILE_SIZE, y * TILE_SIZE)
dirt = Dirt(random.randint(1, 100), random.randint(1, 100))
dirt.pests_and_weeds()
crop = best[y][x]
if crop == 'apple':
tile.image = "resources/images/sampling.png"
photo_path = random.choice(os.listdir("resources/images/plant_photos/apples"))
tile.photo = os.path.join("resources/images/plant_photos/apples", photo_path)
elif crop == 'cauliflower':
tile.image = "resources/images/sampling.png"
photo_path = random.choice(os.listdir("resources/images/plant_photos/cauliflowers"))
tile.photo = os.path.join("resources/images/plant_photos/cauliflowers", photo_path)
elif crop == 'radish':
tile.image = "resources/images/sampling.png"
photo_path = random.choice(os.listdir("resources/images/plant_photos/radishes"))
tile.photo = os.path.join("resources/images/plant_photos/radishes", photo_path)
elif crop == 'wheat':
tile.image = "resources/images/sampling.png"
photo_path = random.choice(os.listdir("resources/images/plant_photos/wheats"))
tile.photo = os.path.join("resources/images/plant_photos/wheats", photo_path)
elif crop == 'rock_dirt':
tile.image = "resources/images/rock_dirt.png"
dirt.set_ocstacle(True)
else:
tile.image = "resources/images/dirt.png"
tile.ground = "resources/images/background.jpg"
tile.ground = dirt
tiles.append(tile)
positionFieldElements()
return tiles
def createField(win):
createTiles()
@ -81,24 +35,11 @@ def createField(win):
image = pygame.transform.scale(image, (TILE_SIZE, TILE_SIZE))
win.blit(image, (t.x, t.y))
pygame.display.flip()
imageTractor = pygame.image.load(tractor.image).convert_alpha()
imageTractor = pygame.transform.scale(imageTractor, (TILE_SIZE, TILE_SIZE))
win.blit(imageTractor, (tractor.x, tractor.y))
pygame.display.flip()
def drawWindow(win):
win.fill(GREY)
createField(win)
pygame.display.flip()
def get_tile_coordinates(index):
if index < len(tiles):
tile = tiles[index]
return tile.x, tile.y
else:
return None
def get_tile_index():
valid_indices = []
for index, tile in enumerate(tiles):
if tile.image=="resources/images/sampling.png":
valid_indices.append(index)
return random.choice(valid_indices)

View File

@ -1,15 +1,9 @@
from NN.neural_network import clear_text_area
from crop_protection_product import CropProtectionProduct
from area.constants import TILE_SIZE, DIRECTION_EAST, DIRECTION_SOUTH, DIRECTION_WEST, DIRECTION_NORTH, WIDTH
from area.field import fieldX, fieldY, tiles
import pygame
import time
class Tractor:
x = None
y = None
direction = None #direction takes values in the range of 1 to 4 (1->North, 2->East etc...)
image = None
cypermetryna = CropProtectionProduct("pests", "cereal")
diflufenikan = CropProtectionProduct("weeds", "cereal")
@ -19,39 +13,21 @@ class Tractor:
metazachlor = CropProtectionProduct("weeds", "vegetable")
# etc
def __init__(self, x, y, direction, tractor_start, tractor_end):
def __init__(self, x, y):
self.x = x
self.y = y
self.image = 'resources/images/tractor.png'
self.rect = pygame.Rect(x, y, TILE_SIZE, TILE_SIZE)
self.direction = direction
self.image = pygame.image.load('resources/images/tractor_right.png').convert_alpha()
self.tractor_start = tractor_start #important for bfs - prevents from spawning obstacles on these positions
self.tractor_end = tractor_end #
if (self.direction==1):
self.image = pygame.image.load('resources/images/tractor_up.png').convert_alpha()
elif (self.direction==3):
self.image = pygame.image.load('resources/images/tractor_down.png').convert_alpha()
elif (self.direction==4):
self.image = pygame.image.load('resources/images/tractor_left.png').convert_alpha()
def work_on_field(self, screen, tile, ground, plant1):
results = []
def work_on_field(self, tile, ground, plant1):
if plant1 is None:
tile.randomizeContent()
# sprobuj zasadzic cos
print("Tarctor planted something")
results.append("Tarctor planted something")
elif plant1.growth_level == 100:
tile.plant = None
ground.nutrients_level -= 40
ground.water_level -= 40
print("Tractor collected something")
results.append("Tractor collected something")
else:
plant1.try_to_grow(50,50) #mozna dostosowac jeszcze
ground.nutrients_level -= 11
@ -65,7 +41,6 @@ class Tractor:
elif plant1.plant_type == self.spinosad.plant_type:
t = "Tractor used Spinosad"
print(t)
results.append(t)
ground.pest = False
if ground.weed:
# traktor pozbywa się chwastow
@ -76,130 +51,10 @@ class Tractor:
elif plant1.plant_type == self.metazachlor.plant_type:
t = "Tractor used Metazachlor"
print(t)
results.append(t)
ground.weed = False
if ground.water_level < plant1.water_requirements:
ground.water_level += 20
print("Tractor watered the plant")
results.append("Tractor watered the plant")
if ground.nutrients_level < plant1.nutrients_requirements:
ground.nutrients_level += 20
print("Tractor added some nutrients")
results.append("Tractor added some nutrients")
clear_text_area(screen, WIDTH-90, 100, 400, 100)
for idx, result in enumerate(results):
display_work_results(screen, result, (WIDTH-90, 100 + idx * 30))
def move(self):
if self.direction == DIRECTION_EAST:
self.rect.x += TILE_SIZE
elif self.direction == DIRECTION_WEST:
self.rect.x -= TILE_SIZE
elif self.direction == DIRECTION_NORTH:
self.rect.y -= TILE_SIZE
elif self.direction == DIRECTION_SOUTH:
self.rect.y += TILE_SIZE
def rotate_to_right(self):
if self.direction == 4:
self.direction = 1
else:
self.direction += 1
self.image = pygame.transform.rotate(self.image, -90)
def rotate_to_left(self):
if self.direction == 1:
self.direction = 4
else:
self.direction -= 1
self.image = pygame.transform.rotate(self.image, 90)
#checks if we can move further and if we won't get out of boundaries - for bfs:
def can_it_move_node(node):
if node.get_direction() == DIRECTION_EAST and node.get_x() + TILE_SIZE < 830: #last tile on the west has y:797
return "move east"
elif node.get_direction() == DIRECTION_WEST and node.get_x() - TILE_SIZE >=fieldX:
return "move west"
elif node.get_direction() == DIRECTION_NORTH and node.get_y() - TILE_SIZE >=fieldY:
return "move north"
elif node.get_direction() == DIRECTION_SOUTH and node.get_y() + TILE_SIZE < 760: #last tile on the south has y:727
return "move south"
else:
return False
#checks if there's an obstacle on the given coordinates (important for bfs):
def is_obstacle(self, x, y):
for tile in tiles:
if tile.x == x and tile.y == y:
ground = tile.ground
if ground.obstacle and self.tractor_start != (x, y) and self.tractor_end != (x,y):
return True
return False
def draw_tractor(self, win):
imageTractor = pygame.transform.scale(self.image, (TILE_SIZE, TILE_SIZE))
win.blit(imageTractor, (self.rect.x, self.rect.y))
pygame.display.flip()
def store_tile_image(self, tile):
return pygame.image.load(tile.image).convert_alpha()
def restore_tile_image(self, screen, tile):
image = pygame.image.load(tile.image).convert_alpha()
image = pygame.transform.scale(image, (TILE_SIZE, TILE_SIZE))
screen.blit(image, (tile.x, tile.y))
pygame.display.update()
#translates move_list generated by bfs into the actual movement:
def do_actions(tractor, WIN, move_list):
# trail = pygame.image.load("resources/images/background.jpg").convert_alpha()
# trail = pygame.transform.scale(trail, (TILE_SIZE, TILE_SIZE))
tile_images = {}
for tile in tiles:
tile_images[(tile.x, tile.y)] = tractor.store_tile_image(tile)
pygame.display.update()
for move in move_list:
# WIN.blit(trail, (tractor.rect.x, tractor.rect.y, TILE_SIZE, TILE_SIZE))
current_tile = None
for tile in tiles:
if tile.x == tractor.rect.x and tile.y == tractor.rect.y:
current_tile = tile
break
if current_tile:
tractor.restore_tile_image(WIN, current_tile)
if move == "move":
tractor.move()
elif move == "rotate_right":
tractor.rotate_to_right()
elif move == "rotate_left":
tractor.rotate_to_left()
tractor.draw_tractor(WIN)
pygame.display.update()
time.sleep(0.35)
#displays results of the "work_on_field" function next to the field:
def display_work_results(screen, text, position):
font = pygame.font.Font(None, 30)
displayed_text = font.render(text, 1, (255,255,255))
screen.blit(displayed_text, position)
pygame.display.update()

View File

@ -1,132 +0,0 @@
from area.constants import TILE_SIZE, ROWS
import copy
import heapq
from area.field import tiles, fieldX, fieldY
from bfs import get_moves
class Node:
def __init__(self, priority, x, y, direction, parent, action, cost=0):
self.x = x
self.y = y
self.direction = direction
self.action = action
self.parent = parent
self.cost = cost
self.priority = priority
def __int__(self):
return self.priority
# getters and setters:
def get_parent(self):
return self.parent
def set_parent(self, _parent):
self.parent = _parent
def get_action(self):
return self.action
def set_action(self, _action):
self.parent = _action
def get_x(self):
return self.x
def set_x(self, _x):
self.x = _x
def get_y(self):
return self.y
def set_y(self, _y):
self.y = _y
def get_direction(self):
return self.direction
def set_direction(self, _direction):
self.parent = _direction
def get_cost(self):
return self.cost
def set_cost(self, _cost):
self.cost = _cost
def get_priority(self):
return self.priority
def set_priority(self, _priority):
self.priority = _priority
def __lt__(self, other):
return self.get_priority() < other.get_priority()
def copy(self):
return copy.copy(self)
def goal_test(elem, goalstate):
if elem.get_x() == goalstate[0] and elem.get_y() == goalstate[1]:
return True
else:
return False
def tile_cost(tile):
if tile.image == "resources/images/sampling.png":
return 100
if tile.image == "resources/images/rock_dirt.png":
return 1000
else:
return 1
def heuristic(current_x, current_y, end_x, end_y):
return abs(end_x - current_x) + abs(end_y - current_y)
# State as a tuple (x,y,direction)
# actions(string): move, rotate_to_left, rotate_to_right
# main search function:
def a_star(istate, succ_astar, goaltest):
fringe = []
explored = set()
node = Node(0, istate.get_x(), istate.get_y(), istate.get_direction(), None, None, 0)
heapq.heappush(fringe, node)
while True:
if not fringe:
return False
elem = heapq.heappop(fringe)
temp = copy.copy(elem)
if goal_test(elem, goaltest) is True: # jesli True zwroc ciag akcji
return get_moves(elem)
explored.add(elem)
for (action, state) in succ_astar(temp):
fringe_tuple = []
explored_tuple = []
for node in fringe:
fringe_tuple.append((node.get_x(), node.get_y(), node.get_direction()))
for node in explored:
explored_tuple.append((node.get_x(), node.get_y(), node.get_direction()))
tile = int((temp.get_y() - fieldY) / TILE_SIZE) * ROWS + int((temp.get_x() - fieldX) / TILE_SIZE)
cost = temp.cost + tile_cost(tiles[tile])
priority = cost + heuristic(state[0], state[1], goaltest[0], goaltest[1])
x = Node(priority, state[0], state[1], state[2], elem, action, cost)
if state not in fringe_tuple and state not in explored_tuple:
heapq.heappush(fringe, x)
elif state in fringe_tuple and elem.get_priority() < priority:
elem.set_priority(priority)

View File

@ -1,207 +0,0 @@
from area.constants import TILE_SIZE
import copy
from area.tractor import Tractor
class Istate:
def __init__(self, x, y, direction ):
self.x = x
self.y = y
self.direction = direction
def get_x(self):
return self.x
def set_x(self, _x):
self.x = _x
def get_y(self):
return self.y
def set_y(self, _y):
self.y = _y
def get_direction(self):
return self.direction
def set_direction(self, _direction):
self.parent = _direction
class Node:
def __init__(self, x, y, direction, parent, action):
self.x = x
self.y = y
self.direction = direction
self.action = action
self.parent = parent
#getters and setters:
def get_parent(self):
return self.parent
def set_parent(self, _parent):
self.parent = _parent
def get_action(self):
return self.action
def set_action(self, _action):
self.parent = _action
def get_x(self):
return self.x
def set_x(self, _x):
self.x = _x
def get_y(self):
return self.y
def set_y(self, _y):
self.y = _y
def get_direction(self):
return self.direction
def set_direction(self, _direction):
self.parent = _direction
def copy(self):
return copy.copy(self)
def goal_test(elem, goalstate):
if elem.get_x() == goalstate[0] and elem.get_y() == goalstate[1]:
return True
else:
return False
#State as a tuple (x,y,direction)
#actions(string): move, rotate_to_left, rotate_to_right
#main search function:
def graphsearch(istate, succ, goaltest, tractor):
fringe = []
explored = []
node = Node(istate.get_x(), istate.get_y(), istate.get_direction(), None, None)
fringe.append(node)
while True:
if not fringe:
return False
elem = fringe.pop(0)
temp = copy.copy(elem)
if goal_test(elem, goaltest) is True: #jesli True zwroc ciag akcji
return get_moves(elem)
explored.append(elem)
for (action, state) in succ(temp, tractor): #dla wszystkich mozliwych stanow i akcjach otrzymanych dla danego wierzcholka
fringe_tuple = []
explored_tuple = []
for node in fringe:
fringe_tuple.append((node.get_x(), node.get_y(), node.get_direction()))
for node in explored:
explored_tuple.append((node.get_x(), node.get_y(), node.get_direction()))
if state not in fringe_tuple and state not in explored_tuple:
x = Node(state[0], state[1], state[2], elem, action)
fringe.append(x)
#funkcja nastepnika - jakie akcje sa mozlwie na danym polu i jaki bedzie stan po wykonaniu tych akcji
def succ(elem, tractor):
actions_states = []
temp = copy.copy(elem.get_direction())
if temp == 1:
temp = 4
else:
temp -= 1
actions_states.append(("rotate_left", (elem.get_x(), elem.get_y(), temp)))
temp = copy.copy(elem.get_direction())
if temp == 4:
temp = 1
else:
temp += 1
actions_states.append(("rotate_right", (elem.get_x(), elem.get_y(), temp)))
temp_move_east = elem.get_x() + TILE_SIZE
temp_move_west = elem.get_x() - TILE_SIZE
temp_move_north = elem.get_y() - TILE_SIZE
temp_move_south = elem.get_y() + TILE_SIZE
if Tractor.can_it_move_node(elem) == "move east" and not Tractor.is_obstacle(tractor, temp_move_east, elem.get_y()):
actions_states.append(("move", (temp_move_east, elem.get_y(), elem.get_direction())))
elif Tractor.can_it_move_node(elem) == "move west" and not Tractor.is_obstacle(tractor, temp_move_west, elem.get_y()):
actions_states.append(("move", (temp_move_west, elem.get_y(), elem.get_direction())))
elif Tractor.can_it_move_node(elem) == "move north" and not Tractor.is_obstacle(tractor,elem.get_x(), temp_move_north):
actions_states.append(("move", (elem.get_x(), temp_move_north, elem.get_direction())))
elif Tractor.can_it_move_node(elem) == "move south" and not Tractor.is_obstacle(tractor, elem.get_x(), temp_move_south):
actions_states.append(("move", (elem.get_x(), temp_move_south, elem.get_direction())))
return actions_states
#its the copy of successor function for A* only - tractor can ride through stones if there is no other way:
def succ_astar(elem):
actions_states = []
temp = copy.copy(elem.get_direction())
if temp == 1:
temp = 4
else:
temp -= 1
actions_states.append(("rotate_left", (elem.get_x(), elem.get_y(), temp)))
temp = copy.copy(elem.get_direction())
if temp == 4:
temp = 1
else:
temp += 1
actions_states.append(("rotate_right", (elem.get_x(), elem.get_y(), temp)))
temp_move_east = elem.get_x() + TILE_SIZE
temp_move_west = elem.get_x() - TILE_SIZE
temp_move_north = elem.get_y() - TILE_SIZE
temp_move_south = elem.get_y() + TILE_SIZE
if Tractor.can_it_move_node(elem) == "move east":
actions_states.append(("move", (temp_move_east, elem.get_y(), elem.get_direction())))
elif Tractor.can_it_move_node(elem) == "move west":
actions_states.append(("move", (temp_move_west, elem.get_y(), elem.get_direction())))
elif Tractor.can_it_move_node(elem) == "move north":
actions_states.append(("move", (elem.get_x(), temp_move_north, elem.get_direction())))
elif Tractor.can_it_move_node(elem) == "move south":
actions_states.append(("move", (elem.get_x(), temp_move_south, elem.get_direction())))
return actions_states
#returns list of actions
def get_moves(elem):
move_list = []
while (elem.get_parent() != None):
move_list.append(elem.get_action())
elem = elem.get_parent()
move_list.reverse()
return move_list

View File

@ -1,45 +0,0 @@
import pandas as pd
from sklearn.model_selection import train_test_split
import joblib
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as plt
dtype_dict = {
'season': str,
'anomalies': bool,
'weather': str,
'temp': int,
'water': int,
'nutri': int,
'pests': int,
'weeds': int,
'type': str,
'ripeness': int,
'target_column': str
}
# Wczytaj dane z pliku CSV
data = pd.read_csv('resources/dataset.csv', header=0, dtype=dtype_dict)
#print(data)
X = data.drop('target_column', axis=1)
y = data['target_column']
X = pd.get_dummies(X)
# X.to_csv('model_data1.csv', index=False)
# Podział danych na zbiór treningowy i testowy
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Dopasowanie modelu drzewa decyzyjnego
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
fig = plt.figure(figsize=(25, 20))
_ = plot_tree(model, feature_names=X.columns, class_names=model.classes_, filled=True)
plt.savefig('drzewo_decyzyjne.png')
plt.show()
# 'model' to wcześniej wytrenowany model drzewa decyzyjnego
joblib.dump(model, 'model.pkl')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

View File

@ -1,98 +0,0 @@
import random
def make_population(population_s, field_s):
population = []
crops = ['apple', 'cauliflower', 'radish', 'wheat', 'rock_dirt', 'dirt']
for _ in range(population_s):
i = []
for _ in range(field_s):
row = random.choices(crops, k=field_s)
i.append(row)
population.append(i)
return population
def calculate_fitness(individual):
cost = 0
for i in range(len(individual)):
for j in range(len(individual[i])):
crop = individual[i][j]
neighbors = [
individual[x][y]
for x in range(max(0, i-1), min(len(individual), i+2))
for y in range(max(0, j-1), min(len(individual), j+2))
if (x,y) != (i,j)
]
for n in neighbors:
if crop == 'wheat' and n == 'apple':
cost += 2
elif crop == 'cauliflower' and n == 'radish':
cost += 4
fitness = 1/(1+cost)
return fitness
def select_parents(population, fitnesses):
fitnesses_sum = sum(fitnesses)
selection_parts = [fitness / fitnesses_sum for fitness in fitnesses]
parents = random.choices(population, weights=selection_parts, k=2)
return parents
def crossover(parent_1, parent_2):
crossover_point = random.randint(1, (len(parent_1)-1))
child_1 = parent_1[:crossover_point] + parent_2[crossover_point:]
child_2 = parent_2[:crossover_point] + parent_1[crossover_point:]
return child_1, child_2
def mutation(individual, chance):
crops = ['apple', 'cauliflower', 'radish', 'wheat', 'rock_dirt', 'dirt']
if random.random() < chance:
row = random.randint(0, len(individual) - 1)
column = random.randint(0, len(individual[0]) - 1)
individual[row][column] = random.choice(crops)
return individual
def genetic_algorithm(population_s, field_s, chance, limit):
population = make_population(population_s, field_s)
best_fitness = 0
count = 0
while best_fitness < 1:
fitnesses = [calculate_fitness(individual) for individual in population]
new_population = []
for _ in range(population_s // 2):
parent_1, parent_2 = select_parents(population, fitnesses)
p1c = calculate_fitness(parent_1)
p2c = calculate_fitness(parent_2)
print("p1c: ",p1c,"\np2c: ",p2c)
child_1, child_2 = crossover(parent_1, parent_2)
child_1 = mutation(child_1, chance)
child_2 = mutation(child_2, chance)
new_population.append(child_1)
new_population.append(child_2)
combined_population = population + new_population
combined_population = sorted(combined_population, key=calculate_fitness, reverse=True)
population = combined_population[:population_s]
current_best_fitness = calculate_fitness(population[0])
if current_best_fitness > best_fitness:
best_fitness = current_best_fitness
count = 0
else:
count += 1
if count >= limit:
break
best_child = max(population, key=calculate_fitness)
bsf = calculate_fitness(best_child)
print("bsf: ", bsf)
return best_child

View File

@ -12,7 +12,7 @@ class Dirt:
# add a couple new properties
def pests_and_weeds(self):
i = random.randint(1, 20) # 5% szans na szkodniki, 10% na chwasty, 5 na obydwa 5 na kamien
i = random.randint(1, 20) # 5% szans na szkodniki, 10% na chwasty, 5 na obydwa 15 na kamien
if i == 1:
self.pest = True
elif i == 2 or i == 3:
@ -20,10 +20,7 @@ class Dirt:
elif i == 4:
self.weed = True
self.pest = True
'''elif i == 5:
self.obstacle = True'''
def set_ocstacle(self, obstacle_status):
self.obstacle = obstacle_status
elif i == 5 or i == 6 or i == 7:
self.obstacle = True
# add init, getters,setters

View File

@ -1,26 +1,14 @@
import pygame
import time
import random
import pandas as pd
import joblib
from area.constants import WIDTH, HEIGHT, TILE_SIZE
from area.constants import WIDTH, HEIGHT
from area.field import drawWindow
from area.tractor import Tractor, do_actions, display_work_results
from area.field import tiles, fieldX, fieldY
from area.field import get_tile_coordinates, get_tile_index
from area.tractor import Tractor
from area.field import tiles
from ground import Dirt
from plant import Plant
from bfs import graphsearch, Istate, succ_astar, succ
from astar import a_star
from NN.neural_network import load_model, load_image, guess_image, display_image, display_result, clear_text_area
from PIL import Image
from genetic import genetic_algorithm
from area.field import createTiles
pygame.init()
WIN_WIDTH = WIDTH + 300
WIN = pygame.display.set_mode((WIN_WIDTH, HEIGHT))
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Intelligent tractor')
@ -28,200 +16,24 @@ def main():
run = True
window = drawWindow(WIN)
pygame.display.update()
#Tractor initialization:
tractor = Tractor(0*TILE_SIZE, 0*TILE_SIZE, 2, None, None)
tractor.rect.x += fieldX
tractor.rect.y += fieldY
tractor.tractor_start = ((170, 100))
istate = Istate(170, 100, 2) #initial state
#main loop:
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
time.sleep(1)
run = False
#getting coordinates of our "goal tile":
tile_index = get_tile_index()
tile_x, tile_y = get_tile_coordinates(tile_index)
if tile_x is not None and tile_y is not None:
print(f"Coordinates of tile {tile_index} are: ({tile_x}, {tile_y})")
else: print("Such tile does not exist")
#mark the goal tile:
tiles[tile_index].image = "resources/images/sampling_goal.png"
image = pygame.image.load(tiles[tile_index].image).convert()
image = pygame.transform.scale(image, (TILE_SIZE, TILE_SIZE))
WIN.blit(image, (tiles[tile_index].x, tiles[tile_index].y))
pygame.display.flip()
tractor.tractor_end = ((tile_x, tile_y))
goaltest = [] #final state (consists of x and y because direction doesnt matter)
goaltest.append(tile_x)
goaltest.append(tile_y)
goaltest[0] = tile_x
goaltest[1]=tile_y
#moves = (graphsearch(istate, succ, goaltest, tractor)) #<-------BFS
moves = (a_star(istate, succ_astar, goaltest))
print(moves)
# movement based on route-planning:
tractor.draw_tractor(WIN)
time.sleep(1)
if moves != False:
do_actions(tractor, WIN, moves)
#guessing the image under the tile:
goalTile = tiles[tile_index]
image_path = goalTile.photo
display_image(WIN, goalTile.photo, (WIDTH-20 , 300)) #displays photo next to the field
pygame.display.update()
image_tensor = load_image(image_path)
prediction = guess_image(load_model(), image_tensor)
clear_text_area(WIN, WIDTH - 50, 600, 400, 50)
display_result(WIN, (WIDTH - 50 , 600), prediction) #display text under the photo
pygame.display.update()
print(f"The predicted image is: {prediction}")
p1 = Plant('wheat', 'cereal', random.randint(1,100), random.randint(1,100), random.randint(1,100))
goalTile.plant = p1
#small test:
time.sleep(2)
tile1 = tiles[0]
p1 = Plant('wheat', 'cereal', random.randint(1,100), random.randint(1,100), random.randint(1,100))
d1 = Dirt(random.randint(1, 100), random.randint(1,100))
d1.pests_and_weeds()
goalTile.ground=d1
#getting the name and type of the recognized plant:
p1.update_name(prediction)
#decission tree test:
if d1.pest:
pe = 1
else:
pe = 0
if d1.weed:
we = 1
else:
we = 0
if p1.plant_type == 'cereal':
t1 = True
t2 = False
t3 = False
t4 = False
else:
t1 = False
if p1.plant_type == 'fruit':
t2 = True
t3 = False
t4 = False
else:
t2 = False
if p1.plant_type == 'vegetable':
t4 = True
t3 = False
else:
t3 = True
t4 = False
weather_n = random.randint(1, 4)
if weather_n == 1:
h1 = True
h2 = False
h3 = False
h4 = False
else:
h1 = False
if weather_n == 2:
h2 = True
h3 = False
h4 = False
else:
h2 = False
if weather_n == 3:
h3 = True
h4 = False
else:
h3 = False
h4 = True
season_n = random.randint(1,4)
if season_n == 1:
s1 = True
s2 = False
s3 = False
s4 = False
temp_n = random.randint(0,22)
else:
s1 = False
if season_n == 2:
s2 = True
s3 = False
s4 = False
temp_n = random.randint(0,22)
else:
s2 = False
if season_n == 3:
s3 = True
s4 = False
temp_n = random.randint(20,39)
else:
s3 = False
s4 = True
temp_n = random.randint(-20, 10)
anomaly_n = random.randint(1, 10)
if anomaly_n == 1:
a1 = True
else:
a1 = False
dane = {
'anomalies': [a1],
'temp': [temp_n],
'water': [d1.water_level],
'nutri': [d1.nutrients_level],
'pests': [pe],
'weeds': [we],
'ripeness': [p1.growth_level],
'season_autumn': [s1], 'season_spring': [s2], 'season_summer': [s3], 'season_winter': [s4],
'weather_heavyCloudy': [h1], 'weather_partCloudy': [h2], 'weather_precipitation': [h3],
'weather_sunny': [h4],
'type_cereal': [t1], 'type_fruit': [t2], 'type_none': [t3], 'type_vegetable': [t4]
}
df = pd.DataFrame(dane)
df.to_csv('model_data.csv', index=False)
model = joblib.load('model.pkl')
nowe_dane = pd.read_csv('model_data.csv')
predykcje = model.predict(nowe_dane)
print(predykcje)
#work on field:
if predykcje == 'work':
tractor.work_on_field(WIN, goalTile, d1, p1)
#update the initial state for the next target:
istate = Istate(tile_x, tile_y, tractor.direction)
#old goalTile is displayed with a black border - to show that it was an old target:
tiles[tile_index].image = "resources/images/sampling_old_goal.png"
image = pygame.image.load(tiles[tile_index].image).convert()
image = pygame.transform.scale(image, (TILE_SIZE, TILE_SIZE))
WIN.blit(image, (tiles[tile_index].x, tiles[tile_index].y))
pygame.display.flip()
tractor.draw_tractor(WIN)
time.sleep(2)
tile1.ground=d1
t1 = Tractor(10, 10)
t1.work_on_field(tile1, d1, p1)
time.sleep(3)
print("\n")
# in loop move tractor
main()

Binary file not shown.

View File

@ -1,2 +0,0 @@
anomalies,temp,water,nutri,pests,weeds,ripeness,season_autumn,season_spring,season_summer,season_winter,weather_heavyCloudy,weather_partCloudy,weather_precipitation,weather_sunny,type_cereal,type_fruit,type_none,type_vegetable
True,17,72,73,0,0,60,True,False,False,False,False,False,False,True,False,True,False,False
1 anomalies temp water nutri pests weeds ripeness season_autumn season_spring season_summer season_winter weather_heavyCloudy weather_partCloudy weather_precipitation weather_sunny type_cereal type_fruit type_none type_vegetable
2 True 17 72 73 0 0 60 True False False False False False False True False True False False

View File

@ -19,19 +19,7 @@ class Plant:
else:
print("Unable to grow due to bad condition of the ground")
def update_name(self, predicted_class):
if predicted_class == "Apple":
self.name = "apple"
self.plant_type = 'fruit'
# more properties
elif predicted_class == "Radish":
self.name = "radish"
self.plant_type = 'vegetable'
elif predicted_class == "Cauliflower":
self.name = "cauliflower"
self.plant_type = 'vegetable'
elif predicted_class == "Wheat":
self.name = "wheat"
self.plant_type = 'cereal'
# add init, getters,setters

View File

@ -1,301 +0,0 @@
season,anomalies,weather,temp,water,nutri,pests,weeds,type,ripeness,target_column
winter,False,precipitation,5,44,17,1,0,vegetable,76,doNothing
spring,False,heavyCloudy,12,22,83,0,0,cereal,83,work
summer,False,sunny,25,85,84,0,0,cereal,85,work
summer,False,precipitation,24,24,67,0,0,none,0,work
spring,False,sunny,4,44,35,1,0,vegetable,96,work
summer,False,partCloudy,33,78,54,0,1,cereal,89,work
winter,False,heavyCloudy,-1,27,87,1,1,cereal,1,doNothing
autumn,True,sunny,15,45,99,1,1,cereal,49,doNothing
autumn,False,partCloudy,20,54,81,0,1,none,0,work
winter,False,heavyCloudy,-5,50,49,0,1,fruit,42,doNothing
summer,False,heavyCloudy,35,95,31,1,1,none,0,work
summer,False,partCloudy,36,14,42,0,1,vegetable,96,work
summer,False,precipitation,31,62,45,1,0,vegetable,3,work
summer,True,precipitation,35,35,41,1,0,none,0,doNothing
summer,True,heavyCloudy,35,33,97,0,0,fruit,76,work
autumn,False,sunny,3,24,62,1,1,vegetable,21,work
winter,False,partCloudy,-18,80,37,0,0,cereal,24,doNothing
spring,True,precipitation,21,15,58,1,0,fruit,49,doNothing
autumn,False,precipitation,16,62,75,1,0,fruit,69,work
winter,False,heavyCloudy,-11,69,9,0,1,none,0,doNothing
autumn,False,sunny,21,6,24,0,0,vegetable,99,work
summer,False,heavyCloudy,23,1,33,0,0,none,0,work
autumn,False,sunny,18,80,42,0,0,vegetable,47,work
summer,False,partCloudy,35,69,38,1,0,vegetable,40,work
summer,False,heavyCloudy,27,98,34,0,1,vegetable,20,work
winter,False,heavyCloudy,-3,9,3,0,1,none,0,doNothing
summer,False,heavyCloudy,26,79,28,1,0,fruit,20,work
spring,False,precipitation,3,9,53,0,1,vegetable,30,doNothing
autumn,False,sunny,6,31,1,1,0,fruit,31,work
autumn,False,sunny,8,2,70,1,0,vegetable,54,work
spring,False,precipitation,8,21,1,1,0,fruit,92,doNothing
autumn,False,heavyCloudy,11,4,32,1,1,fruit,63,work
winter,True,precipitation,-10,57,67,1,1,cereal,43,doNothing
winter,False,precipitation,-13,90,14,1,1,fruit,29,doNothing
autumn,True,precipitation,10,68,46,0,0,fruit,18,doNothing
spring,False,heavyCloudy,8,41,55,1,1,fruit,12,work
winter,False,heavyCloudy,-10,24,25,0,0,vegetable,32,doNothing
spring,False,heavyCloudy,0,40,6,0,0,none,0,work
autumn,False,sunny,22,7,88,0,1,vegetable,71,work
spring,True,precipitation,0,56,21,0,0,cereal,46,doNothing
autumn,False,sunny,13,37,49,0,1,vegetable,94,work
summer,False,precipitation,20,14,39,0,0,cereal,97,work
autumn,False,heavyCloudy,18,74,38,1,0,vegetable,32,work
autumn,False,heavyCloudy,2,100,70,0,0,none,0,work
autumn,False,precipitation,19,30,16,0,1,cereal,17,work
summer,False,sunny,26,94,83,1,1,fruit,25,work
autumn,False,heavyCloudy,14,91,62,0,0,vegetable,25,work
autumn,False,partCloudy,12,34,98,0,0,none,0,work
spring,True,heavyCloudy,5,64,50,0,0,vegetable,31,doNothing
summer,True,heavyCloudy,30,60,55,0,0,none,0,doNothing
summer,False,sunny,22,35,2,0,1,vegetable,20,work
spring,False,sunny,21,87,22,0,1,cereal,45,work
winter,False,heavyCloudy,-2,48,83,0,1,vegetable,3,doNothing
winter,False,heavyCloudy,-15,55,6,0,1,none,0,doNothing
summer,False,heavyCloudy,35,5,68,1,0,vegetable,79,work
summer,True,heavyCloudy,35,99,35,1,0,fruit,79,doNothing
winter,False,sunny,-1,35,57,1,0,vegetable,80,doNothing
summer,True,precipitation,31,55,73,0,1,vegetable,24,doNothing
autumn,True,precipitation,21,26,84,0,0,vegetable,49,doNothing
winter,False,precipitation,-8,13,30,1,0,none,0,doNothing
autumn,False,heavyCloudy,20,58,15,1,0,cereal,56,work
spring,False,partCloudy,12,25,61,1,1,vegetable,11,work
winter,False,partCloudy,-14,58,54,0,1,none,0,doNothing
autumn,False,sunny,6,4,96,1,0,cereal,42,work
summer,False,sunny,29,74,98,0,1,vegetable,22,work
summer,False,sunny,32,83,90,1,0,none,0,work
summer,True,sunny,33,11,11,0,1,fruit,45,work
spring,False,sunny,3,54,13,1,1,none,0,work
autumn,False,heavyCloudy,20,67,97,0,0,cereal,68,doNothing
spring,False,sunny,5,35,54,0,0,vegetable,37,work
summer,False,precipitation,31,44,68,1,0,vegetable,9,work
winter,False,heavyCloudy,-11,59,18,1,1,cereal,11,doNothing
summer,False,precipitation,30,32,57,1,1,fruit,18,work
summer,False,sunny,27,31,54,0,1,vegetable,67,work
summer,False,precipitation,29,70,73,1,0,fruit,71,work
spring,False,sunny,18,67,22,1,0,fruit,64,work
spring,False,partCloudy,13,40,18,1,0,fruit,7,work
summer,False,precipitation,23,24,6,1,0,vegetable,90,work
autumn,False,heavyCloudy,1,59,84,0,0,none,0,work
spring,False,precipitation,2,47,99,0,0,vegetable,83,doNothing
summer,False,precipitation,32,9,94,1,0,cereal,18,work
winter,False,partCloudy,-14,56,74,1,1,fruit,24,doNothing
winter,False,sunny,-5,100,55,0,0,cereal,57,doNothing
summer,False,sunny,30,99,99,1,1,cereal,31,work
winter,True,precipitation,-13,56,58,1,0,none,0,doNothing
spring,False,precipitation,1,24,21,1,1,none,0,work
spring,False,heavyCloudy,2,38,56,0,0,fruit,9,work
winter,False,partCloudy,-7,60,71,0,0,cereal,70,doNothing
autumn,False,precipitation,2,71,2,0,1,cereal,26,doNothing
autumn,False,sunny,19,99,7,1,1,none,0,work
spring,False,sunny,8,41,35,0,1,vegetable,89,work
winter,False,sunny,-14,58,94,0,1,vegetable,29,doNothing
summer,True,precipitation,30,3,58,1,0,none,0,doNothing
winter,False,precipitation,8,17,76,1,0,vegetable,47,doNothing
spring,True,precipitation,20,38,65,0,1,cereal,49,doNothing
winter,False,partCloudy,-4,8,10,0,1,cereal,74,doNothing
autumn,False,sunny,2,100,7,1,1,none,0,work
autumn,False,partCloudy,17,88,89,0,1,vegetable,17,work
autumn,False,partCloudy,16,76,54,1,0,vegetable,98,work
spring,False,sunny,2,14,25,0,1,vegetable,8,work
spring,False,precipitation,5,34,1,1,0,none,0,work
autumn,False,heavyCloudy,9,20,28,0,0,cereal,88,work
autumn,False,heavyCloudy,20,17,84,0,0,cereal,15,work
winter,False,heavyCloudy,-18,43,33,0,1,cereal,31,doNothing
autumn,False,partCloudy,2,1,3,1,1,cereal,86,work
summer,False,heavyCloudy,34,58,23,0,0,cereal,27,work
summer,False,precipitation,31,22,14,0,1,fruit,33,work
winter,False,sunny,-5,98,51,1,0,none,0,doNothing
winter,False,precipitation,-17,74,78,1,0,none,0,doNothing
summer,False,precipitation,29,3,54,0,0,none,0,work
autumn,False,precipitation,7,45,29,1,1,cereal,52,doNothing
spring,False,sunny,7,21,30,0,1,fruit,38,work
summer,False,heavyCloudy,28,73,75,1,1,none,0,work
summer,False,heavyCloudy,32,49,43,0,0,vegetable,74,work
autumn,True,precipitation,0,99,66,0,0,none,0,doNothing
summer,True,partCloudy,32,46,99,0,1,none,0,work
autumn,False,heavyCloudy,21,26,44,1,0,none,0,work
summer,True,precipitation,30,28,89,1,1,cereal,65,doNothing
autumn,False,heavyCloudy,20,100,46,1,0,fruit,25,work
winter,False,partCloudy,-3,78,63,1,0,vegetable,18,doNothing
spring,False,partCloudy,22,8,86,1,1,none,0,work
winter,False,partCloudy,2,34,30,1,0,fruit,95,doNothing
summer,True,partCloudy,31,35,26,0,0,fruit,3,work
winter,False,partCloudy,9,80,24,1,1,vegetable,67,doNothing
winter,False,heavyCloudy,-19,85,14,1,1,vegetable,33,doNothing
autumn,False,partCloudy,3,15,6,0,0,vegetable,11,work
winter,False,partCloudy,10,20,62,1,1,fruit,90,doNothing
autumn,False,precipitation,11,93,90,1,0,vegetable,87,work
summer,False,partCloudy,22,79,60,1,1,none,0,work
winter,True,precipitation,-6,55,88,1,0,vegetable,64,doNothing
winter,False,precipitation,-13,31,62,0,1,fruit,70,doNothing
autumn,False,precipitation,20,90,2,1,1,fruit,73,work
winter,False,heavyCloudy,9,100,76,1,1,cereal,41,doNothing
summer,False,partCloudy,30,8,90,1,1,cereal,15,work
winter,False,heavyCloudy,4,27,77,1,1,vegetable,99,doNothing
summer,False,partCloudy,33,67,34,0,0,cereal,44,work
summer,True,precipitation,34,28,100,1,0,vegetable,64,work
winter,True,precipitation,-9,34,88,1,1,cereal,5,doNothing
spring,False,heavyCloudy,10,33,54,1,0,fruit,63,work
spring,False,precipitation,0,77,32,0,0,fruit,100,doNothing
autumn,False,sunny,3,7,59,1,0,cereal,62,work
winter,False,heavyCloudy,-2,50,37,0,0,vegetable,51,doNothing
summer,False,partCloudy,33,74,88,1,1,fruit,49,work
spring,False,sunny,14,14,29,1,1,none,0,work
summer,False,heavyCloudy,24,98,18,1,0,vegetable,99,work
winter,False,heavyCloudy,-15,52,38,0,1,vegetable,66,doNothing
spring,True,partCloudy,9,62,24,0,1,fruit,67,doNothing
spring,False,precipitation,2,87,100,1,0,vegetable,39,doNothing
spring,False,precipitation,16,94,45,0,0,vegetable,35,work
winter,False,precipitation,5,41,82,0,1,fruit,80,doNothing
spring,False,partCloudy,13,49,4,1,0,cereal,97,work
winter,False,partCloudy,-17,24,42,1,1,fruit,71,doNothing
spring,False,heavyCloudy,20,45,71,1,1,vegetable,58,work
winter,False,precipitation,-8,78,81,1,1,fruit,8,doNothing
spring,False,partCloudy,5,31,82,0,1,fruit,18,work
autumn,False,sunny,6,75,85,0,0,fruit,18,doNothing
spring,False,precipitation,14,9,1,1,0,none,0,work
winter,False,heavyCloudy,2,37,5,1,1,cereal,1,doNothing
summer,False,precipitation,20,44,28,1,1,none,0,work
winter,False,partCloudy,-4,97,90,1,1,vegetable,94,doNothing
summer,True,precipitation,26,46,55,1,0,cereal,91,doNothing
spring,False,sunny,15,97,67,1,1,none,0,work
summer,False,partCloudy,33,40,14,1,0,none,0,work
spring,False,partCloudy,4,23,51,0,0,vegetable,8,work
summer,False,sunny,20,66,76,1,1,vegetable,71,work
winter,False,sunny,-11,2,98,0,1,vegetable,29,doNothing
spring,False,sunny,9,67,74,0,0,none,0,work
autumn,False,precipitation,17,23,94,1,1,none,0,work
autumn,False,heavyCloudy,22,65,69,0,1,fruit,79,work
winter,False,heavyCloudy,-2,35,82,1,1,cereal,20,doNothing
winter,True,heavyCloudy,-10,1,73,1,0,fruit,77,doNothing
autumn,False,sunny,4,58,71,1,1,fruit,94,work
summer,False,sunny,32,44,20,1,1,vegetable,48,work
summer,False,heavyCloudy,31,68,37,1,0,cereal,42,work
winter,False,heavyCloudy,-1,69,34,0,0,none,0,doNothing
spring,False,heavyCloudy,10,27,43,1,1,vegetable,49,work
summer,False,partCloudy,26,86,12,0,1,none,0,work
winter,True,precipitation,5,62,62,1,1,cereal,85,doNothing
winter,False,partCloudy,9,29,83,1,0,vegetable,14,doNothing
spring,False,sunny,8,22,33,0,1,cereal,23,work
summer,False,partCloudy,34,38,2,1,1,fruit,29,work
autumn,False,heavyCloudy,2,65,91,1,1,vegetable,49,work
spring,False,sunny,3,73,32,0,0,fruit,61,work
spring,False,precipitation,7,68,70,0,0,none,0,work
winter,False,partCloudy,10,68,2,0,0,cereal,80,doNothing
winter,False,precipitation,-16,89,7,0,0,fruit,92,doNothing
winter,False,precipitation,0,31,49,0,1,cereal,18,doNothing
spring,False,heavyCloudy,7,44,86,1,1,none,0,work
summer,False,sunny,24,1,75,0,1,none,0,work
summer,True,heavyCloudy,39,3,100,1,0,cereal,30,work
winter,False,heavyCloudy,2,88,69,1,1,cereal,79,doNothing
spring,False,heavyCloudy,16,100,21,0,1,cereal,57,work
autumn,True,heavyCloudy,1,17,62,0,1,cereal,92,doNothing
autumn,False,sunny,1,69,54,0,0,cereal,62,work
autumn,False,sunny,17,62,84,0,1,vegetable,18,work
summer,False,heavyCloudy,24,57,84,0,1,vegetable,1,work
spring,False,partCloudy,8,80,61,0,0,none,0,work
autumn,False,heavyCloudy,1,93,79,0,0,fruit,62,work
winter,False,sunny,-4,51,33,1,0,none,0,doNothing
autumn,False,precipitation,4,51,73,1,1,fruit,57,doNothing
autumn,True,heavyCloudy,5,88,81,0,1,fruit,25,doNothing
summer,False,precipitation,30,26,45,0,0,none,0,work
winter,False,partCloudy,3,88,46,1,0,none,0,doNothing
autumn,False,heavyCloudy,8,20,34,0,1,fruit,62,work
spring,False,partCloudy,15,34,33,0,0,vegetable,16,work
winter,False,heavyCloudy,-20,80,25,1,0,vegetable,45,doNothing
spring,False,precipitation,6,34,78,1,0,cereal,6,doNothing
spring,True,heavyCloudy,3,97,65,1,0,fruit,21,doNothing
summer,False,precipitation,34,49,65,1,0,vegetable,10,work
summer,True,precipitation,26,29,2,0,0,cereal,56,doNothing
autumn,False,partCloudy,10,3,19,0,0,vegetable,67,work
spring,False,sunny,19,60,71,0,1,cereal,5,work
winter,False,partCloudy,5,11,66,0,0,none,0,doNothing
winter,False,heavyCloudy,-13,86,29,1,1,cereal,98,doNothing
summer,False,precipitation,33,19,2,1,1,cereal,78,work
spring,False,precipitation,13,6,40,0,0,cereal,49,work
summer,False,partCloudy,31,15,70,1,0,cereal,100,work
spring,False,heavyCloudy,8,40,1,0,0,cereal,83,work
spring,False,partCloudy,10,77,95,1,1,fruit,85,work
spring,False,partCloudy,3,96,32,1,1,fruit,16,work
winter,False,sunny,-11,24,5,1,0,none,0,doNothing
summer,True,heavyCloudy,34,14,11,0,0,vegetable,36,doNothing
summer,True,precipitation,34,69,54,1,0,none,0,doNothing
spring,True,precipitation,21,92,44,0,0,fruit,34,doNothing
spring,False,sunny,10,58,14,1,1,none,0,work
spring,False,partCloudy,9,22,68,0,0,vegetable,85,work
winter,False,precipitation,-20,62,18,0,1,vegetable,78,doNothing
spring,False,sunny,10,51,7,1,1,none,0,work
autumn,True,heavyCloudy,19,89,2,1,0,cereal,6,doNothing
winter,False,heavyCloudy,-6,99,10,0,1,fruit,70,doNothing
spring,False,sunny,2,84,49,1,0,none,0,work
summer,False,heavyCloudy,27,11,32,0,1,cereal,22,work
summer,False,partCloudy,27,55,39,1,1,none,0,work
winter,False,heavyCloudy,-13,53,1,1,1,none,0,doNothing
summer,False,partCloudy,27,15,78,1,1,cereal,43,work
winter,False,partCloudy,-4,79,5,0,0,vegetable,1,doNothing
winter,False,sunny,-1,6,31,0,0,fruit,13,doNothing
summer,True,precipitation,31,86,32,0,1,fruit,98,doNothing
winter,False,precipitation,-2,96,89,1,1,cereal,57,doNothing
spring,False,sunny,18,28,92,1,0,fruit,20,work
summer,False,precipitation,27,90,37,1,0,cereal,55,work
summer,False,heavyCloudy,32,41,3,0,0,cereal,35,work
autumn,False,precipitation,2,31,90,1,0,cereal,7,doNothing
winter,False,partCloudy,-9,74,28,1,1,fruit,72,doNothing
summer,False,partCloudy,23,8,99,0,1,none,0,work
spring,False,heavyCloudy,8,85,29,0,0,none,0,work
winter,False,sunny,-6,67,100,1,1,fruit,25,doNothing
winter,False,partCloudy,10,88,85,1,1,cereal,68,doNothing
spring,False,sunny,20,99,73,0,0,vegetable,18,work
spring,False,sunny,12,52,22,0,0,none,0,work
winter,False,sunny,-18,16,57,0,0,vegetable,69,doNothing
winter,False,partCloudy,-13,17,10,0,0,vegetable,93,doNothing
summer,False,partCloudy,23,18,24,0,1,fruit,7,work
spring,False,partCloudy,2,50,95,1,1,vegetable,49,work
summer,False,partCloudy,23,51,40,1,0,none,0,work
summer,False,partCloudy,28,61,28,1,0,cereal,61,work
summer,False,precipitation,25,37,20,1,0,vegetable,18,work
spring,False,sunny,11,48,62,0,0,fruit,94,work
spring,True,heavyCloudy,1,85,91,0,0,none,0,doNothing
autumn,False,partCloudy,21,13,92,1,0,vegetable,66,work
autumn,False,precipitation,2,25,95,0,0,cereal,18,doNothing
autumn,False,precipitation,0,50,32,0,1,vegetable,92,doNothing
winter,False,partCloudy,-18,27,2,0,1,none,0,doNothing
autumn,False,precipitation,7,49,6,0,0,fruit,92,doNothing
autumn,False,precipitation,19,21,48,1,0,cereal,93,work
autumn,False,precipitation,7,54,12,0,0,none,0,work
spring,False,sunny,1,25,30,1,0,fruit,20,work
autumn,False,partCloudy,9,80,44,0,0,vegetable,49,work
summer,False,heavyCloudy,20,95,36,0,1,fruit,11,work
winter,False,partCloudy,-17,3,9,1,1,vegetable,94,doNothing
winter,False,partCloudy,-15,62,35,0,1,fruit,51,doNothing
summer,False,sunny,35,6,24,0,0,cereal,94,work
summer,False,partCloudy,34,95,37,1,0,vegetable,86,work
summer,True,precipitation,36,25,83,1,0,fruit,87,work
spring,False,heavyCloudy,12,29,32,0,0,cereal,86,work
winter,False,sunny,-15,44,70,0,0,fruit,82,doNothing
winter,False,heavyCloudy,3,23,18,1,1,fruit,60,doNothing
summer,False,precipitation,20,71,73,1,0,cereal,3,work
winter,False,precipitation,-4,90,10,1,1,cereal,51,doNothing
autumn,False,sunny,4,70,73,1,1,cereal,15,work
winter,False,heavyCloudy,10,81,76,1,1,vegetable,80,doNothing
spring,False,partCloudy,2,2,22,1,1,vegetable,21,work
spring,False,precipitation,17,4,67,1,0,cereal,69,work
spring,False,heavyCloudy,10,48,55,0,1,cereal,100,work
autumn,False,precipitation,3,29,41,0,1,none,0,work
spring,False,precipitation,13,58,27,0,1,fruit,16,work
summer,False,partCloudy,28,85,14,0,1,none,0,work
summer,True,heavyCloudy,30,19,15,0,1,vegetable,49,doNothing
summer,True,heavyCloudy,30,74,21,1,0,cereal,16,doNothing
summer,False,heavyCloudy,33,38,35,0,0,vegetable,91,work
spring,False,partCloudy,1,68,59,1,1,vegetable,14,work
summer,False,precipitation,22,41,14,0,1,cereal,48,work
autumn,False,precipitation,8,66,44,0,0,cereal,65,doNothing
spring,False,sunny,7,35,72,1,0,fruit,92,work
summer,False,heavyCloudy,24,36,81,0,1,cereal,6,work
winter,False,heavyCloudy,-5,26,27,0,0,cereal,78,doNothing
summer,False,sunny,27,45,40,1,0,fruit,57,work
spring,False,precipitation,8,30,79,1,1,none,0,work
winter,False,sunny,7,76,71,0,1,fruit,75,doNothing
winter,False,precipitation,9,49,5,1,0,fruit,7,doNothing
1 season anomalies weather temp water nutri pests weeds type ripeness target_column
2 winter False precipitation 5 44 17 1 0 vegetable 76 doNothing
3 spring False heavyCloudy 12 22 83 0 0 cereal 83 work
4 summer False sunny 25 85 84 0 0 cereal 85 work
5 summer False precipitation 24 24 67 0 0 none 0 work
6 spring False sunny 4 44 35 1 0 vegetable 96 work
7 summer False partCloudy 33 78 54 0 1 cereal 89 work
8 winter False heavyCloudy -1 27 87 1 1 cereal 1 doNothing
9 autumn True sunny 15 45 99 1 1 cereal 49 doNothing
10 autumn False partCloudy 20 54 81 0 1 none 0 work
11 winter False heavyCloudy -5 50 49 0 1 fruit 42 doNothing
12 summer False heavyCloudy 35 95 31 1 1 none 0 work
13 summer False partCloudy 36 14 42 0 1 vegetable 96 work
14 summer False precipitation 31 62 45 1 0 vegetable 3 work
15 summer True precipitation 35 35 41 1 0 none 0 doNothing
16 summer True heavyCloudy 35 33 97 0 0 fruit 76 work
17 autumn False sunny 3 24 62 1 1 vegetable 21 work
18 winter False partCloudy -18 80 37 0 0 cereal 24 doNothing
19 spring True precipitation 21 15 58 1 0 fruit 49 doNothing
20 autumn False precipitation 16 62 75 1 0 fruit 69 work
21 winter False heavyCloudy -11 69 9 0 1 none 0 doNothing
22 autumn False sunny 21 6 24 0 0 vegetable 99 work
23 summer False heavyCloudy 23 1 33 0 0 none 0 work
24 autumn False sunny 18 80 42 0 0 vegetable 47 work
25 summer False partCloudy 35 69 38 1 0 vegetable 40 work
26 summer False heavyCloudy 27 98 34 0 1 vegetable 20 work
27 winter False heavyCloudy -3 9 3 0 1 none 0 doNothing
28 summer False heavyCloudy 26 79 28 1 0 fruit 20 work
29 spring False precipitation 3 9 53 0 1 vegetable 30 doNothing
30 autumn False sunny 6 31 1 1 0 fruit 31 work
31 autumn False sunny 8 2 70 1 0 vegetable 54 work
32 spring False precipitation 8 21 1 1 0 fruit 92 doNothing
33 autumn False heavyCloudy 11 4 32 1 1 fruit 63 work
34 winter True precipitation -10 57 67 1 1 cereal 43 doNothing
35 winter False precipitation -13 90 14 1 1 fruit 29 doNothing
36 autumn True precipitation 10 68 46 0 0 fruit 18 doNothing
37 spring False heavyCloudy 8 41 55 1 1 fruit 12 work
38 winter False heavyCloudy -10 24 25 0 0 vegetable 32 doNothing
39 spring False heavyCloudy 0 40 6 0 0 none 0 work
40 autumn False sunny 22 7 88 0 1 vegetable 71 work
41 spring True precipitation 0 56 21 0 0 cereal 46 doNothing
42 autumn False sunny 13 37 49 0 1 vegetable 94 work
43 summer False precipitation 20 14 39 0 0 cereal 97 work
44 autumn False heavyCloudy 18 74 38 1 0 vegetable 32 work
45 autumn False heavyCloudy 2 100 70 0 0 none 0 work
46 autumn False precipitation 19 30 16 0 1 cereal 17 work
47 summer False sunny 26 94 83 1 1 fruit 25 work
48 autumn False heavyCloudy 14 91 62 0 0 vegetable 25 work
49 autumn False partCloudy 12 34 98 0 0 none 0 work
50 spring True heavyCloudy 5 64 50 0 0 vegetable 31 doNothing
51 summer True heavyCloudy 30 60 55 0 0 none 0 doNothing
52 summer False sunny 22 35 2 0 1 vegetable 20 work
53 spring False sunny 21 87 22 0 1 cereal 45 work
54 winter False heavyCloudy -2 48 83 0 1 vegetable 3 doNothing
55 winter False heavyCloudy -15 55 6 0 1 none 0 doNothing
56 summer False heavyCloudy 35 5 68 1 0 vegetable 79 work
57 summer True heavyCloudy 35 99 35 1 0 fruit 79 doNothing
58 winter False sunny -1 35 57 1 0 vegetable 80 doNothing
59 summer True precipitation 31 55 73 0 1 vegetable 24 doNothing
60 autumn True precipitation 21 26 84 0 0 vegetable 49 doNothing
61 winter False precipitation -8 13 30 1 0 none 0 doNothing
62 autumn False heavyCloudy 20 58 15 1 0 cereal 56 work
63 spring False partCloudy 12 25 61 1 1 vegetable 11 work
64 winter False partCloudy -14 58 54 0 1 none 0 doNothing
65 autumn False sunny 6 4 96 1 0 cereal 42 work
66 summer False sunny 29 74 98 0 1 vegetable 22 work
67 summer False sunny 32 83 90 1 0 none 0 work
68 summer True sunny 33 11 11 0 1 fruit 45 work
69 spring False sunny 3 54 13 1 1 none 0 work
70 autumn False heavyCloudy 20 67 97 0 0 cereal 68 doNothing
71 spring False sunny 5 35 54 0 0 vegetable 37 work
72 summer False precipitation 31 44 68 1 0 vegetable 9 work
73 winter False heavyCloudy -11 59 18 1 1 cereal 11 doNothing
74 summer False precipitation 30 32 57 1 1 fruit 18 work
75 summer False sunny 27 31 54 0 1 vegetable 67 work
76 summer False precipitation 29 70 73 1 0 fruit 71 work
77 spring False sunny 18 67 22 1 0 fruit 64 work
78 spring False partCloudy 13 40 18 1 0 fruit 7 work
79 summer False precipitation 23 24 6 1 0 vegetable 90 work
80 autumn False heavyCloudy 1 59 84 0 0 none 0 work
81 spring False precipitation 2 47 99 0 0 vegetable 83 doNothing
82 summer False precipitation 32 9 94 1 0 cereal 18 work
83 winter False partCloudy -14 56 74 1 1 fruit 24 doNothing
84 winter False sunny -5 100 55 0 0 cereal 57 doNothing
85 summer False sunny 30 99 99 1 1 cereal 31 work
86 winter True precipitation -13 56 58 1 0 none 0 doNothing
87 spring False precipitation 1 24 21 1 1 none 0 work
88 spring False heavyCloudy 2 38 56 0 0 fruit 9 work
89 winter False partCloudy -7 60 71 0 0 cereal 70 doNothing
90 autumn False precipitation 2 71 2 0 1 cereal 26 doNothing
91 autumn False sunny 19 99 7 1 1 none 0 work
92 spring False sunny 8 41 35 0 1 vegetable 89 work
93 winter False sunny -14 58 94 0 1 vegetable 29 doNothing
94 summer True precipitation 30 3 58 1 0 none 0 doNothing
95 winter False precipitation 8 17 76 1 0 vegetable 47 doNothing
96 spring True precipitation 20 38 65 0 1 cereal 49 doNothing
97 winter False partCloudy -4 8 10 0 1 cereal 74 doNothing
98 autumn False sunny 2 100 7 1 1 none 0 work
99 autumn False partCloudy 17 88 89 0 1 vegetable 17 work
100 autumn False partCloudy 16 76 54 1 0 vegetable 98 work
101 spring False sunny 2 14 25 0 1 vegetable 8 work
102 spring False precipitation 5 34 1 1 0 none 0 work
103 autumn False heavyCloudy 9 20 28 0 0 cereal 88 work
104 autumn False heavyCloudy 20 17 84 0 0 cereal 15 work
105 winter False heavyCloudy -18 43 33 0 1 cereal 31 doNothing
106 autumn False partCloudy 2 1 3 1 1 cereal 86 work
107 summer False heavyCloudy 34 58 23 0 0 cereal 27 work
108 summer False precipitation 31 22 14 0 1 fruit 33 work
109 winter False sunny -5 98 51 1 0 none 0 doNothing
110 winter False precipitation -17 74 78 1 0 none 0 doNothing
111 summer False precipitation 29 3 54 0 0 none 0 work
112 autumn False precipitation 7 45 29 1 1 cereal 52 doNothing
113 spring False sunny 7 21 30 0 1 fruit 38 work
114 summer False heavyCloudy 28 73 75 1 1 none 0 work
115 summer False heavyCloudy 32 49 43 0 0 vegetable 74 work
116 autumn True precipitation 0 99 66 0 0 none 0 doNothing
117 summer True partCloudy 32 46 99 0 1 none 0 work
118 autumn False heavyCloudy 21 26 44 1 0 none 0 work
119 summer True precipitation 30 28 89 1 1 cereal 65 doNothing
120 autumn False heavyCloudy 20 100 46 1 0 fruit 25 work
121 winter False partCloudy -3 78 63 1 0 vegetable 18 doNothing
122 spring False partCloudy 22 8 86 1 1 none 0 work
123 winter False partCloudy 2 34 30 1 0 fruit 95 doNothing
124 summer True partCloudy 31 35 26 0 0 fruit 3 work
125 winter False partCloudy 9 80 24 1 1 vegetable 67 doNothing
126 winter False heavyCloudy -19 85 14 1 1 vegetable 33 doNothing
127 autumn False partCloudy 3 15 6 0 0 vegetable 11 work
128 winter False partCloudy 10 20 62 1 1 fruit 90 doNothing
129 autumn False precipitation 11 93 90 1 0 vegetable 87 work
130 summer False partCloudy 22 79 60 1 1 none 0 work
131 winter True precipitation -6 55 88 1 0 vegetable 64 doNothing
132 winter False precipitation -13 31 62 0 1 fruit 70 doNothing
133 autumn False precipitation 20 90 2 1 1 fruit 73 work
134 winter False heavyCloudy 9 100 76 1 1 cereal 41 doNothing
135 summer False partCloudy 30 8 90 1 1 cereal 15 work
136 winter False heavyCloudy 4 27 77 1 1 vegetable 99 doNothing
137 summer False partCloudy 33 67 34 0 0 cereal 44 work
138 summer True precipitation 34 28 100 1 0 vegetable 64 work
139 winter True precipitation -9 34 88 1 1 cereal 5 doNothing
140 spring False heavyCloudy 10 33 54 1 0 fruit 63 work
141 spring False precipitation 0 77 32 0 0 fruit 100 doNothing
142 autumn False sunny 3 7 59 1 0 cereal 62 work
143 winter False heavyCloudy -2 50 37 0 0 vegetable 51 doNothing
144 summer False partCloudy 33 74 88 1 1 fruit 49 work
145 spring False sunny 14 14 29 1 1 none 0 work
146 summer False heavyCloudy 24 98 18 1 0 vegetable 99 work
147 winter False heavyCloudy -15 52 38 0 1 vegetable 66 doNothing
148 spring True partCloudy 9 62 24 0 1 fruit 67 doNothing
149 spring False precipitation 2 87 100 1 0 vegetable 39 doNothing
150 spring False precipitation 16 94 45 0 0 vegetable 35 work
151 winter False precipitation 5 41 82 0 1 fruit 80 doNothing
152 spring False partCloudy 13 49 4 1 0 cereal 97 work
153 winter False partCloudy -17 24 42 1 1 fruit 71 doNothing
154 spring False heavyCloudy 20 45 71 1 1 vegetable 58 work
155 winter False precipitation -8 78 81 1 1 fruit 8 doNothing
156 spring False partCloudy 5 31 82 0 1 fruit 18 work
157 autumn False sunny 6 75 85 0 0 fruit 18 doNothing
158 spring False precipitation 14 9 1 1 0 none 0 work
159 winter False heavyCloudy 2 37 5 1 1 cereal 1 doNothing
160 summer False precipitation 20 44 28 1 1 none 0 work
161 winter False partCloudy -4 97 90 1 1 vegetable 94 doNothing
162 summer True precipitation 26 46 55 1 0 cereal 91 doNothing
163 spring False sunny 15 97 67 1 1 none 0 work
164 summer False partCloudy 33 40 14 1 0 none 0 work
165 spring False partCloudy 4 23 51 0 0 vegetable 8 work
166 summer False sunny 20 66 76 1 1 vegetable 71 work
167 winter False sunny -11 2 98 0 1 vegetable 29 doNothing
168 spring False sunny 9 67 74 0 0 none 0 work
169 autumn False precipitation 17 23 94 1 1 none 0 work
170 autumn False heavyCloudy 22 65 69 0 1 fruit 79 work
171 winter False heavyCloudy -2 35 82 1 1 cereal 20 doNothing
172 winter True heavyCloudy -10 1 73 1 0 fruit 77 doNothing
173 autumn False sunny 4 58 71 1 1 fruit 94 work
174 summer False sunny 32 44 20 1 1 vegetable 48 work
175 summer False heavyCloudy 31 68 37 1 0 cereal 42 work
176 winter False heavyCloudy -1 69 34 0 0 none 0 doNothing
177 spring False heavyCloudy 10 27 43 1 1 vegetable 49 work
178 summer False partCloudy 26 86 12 0 1 none 0 work
179 winter True precipitation 5 62 62 1 1 cereal 85 doNothing
180 winter False partCloudy 9 29 83 1 0 vegetable 14 doNothing
181 spring False sunny 8 22 33 0 1 cereal 23 work
182 summer False partCloudy 34 38 2 1 1 fruit 29 work
183 autumn False heavyCloudy 2 65 91 1 1 vegetable 49 work
184 spring False sunny 3 73 32 0 0 fruit 61 work
185 spring False precipitation 7 68 70 0 0 none 0 work
186 winter False partCloudy 10 68 2 0 0 cereal 80 doNothing
187 winter False precipitation -16 89 7 0 0 fruit 92 doNothing
188 winter False precipitation 0 31 49 0 1 cereal 18 doNothing
189 spring False heavyCloudy 7 44 86 1 1 none 0 work
190 summer False sunny 24 1 75 0 1 none 0 work
191 summer True heavyCloudy 39 3 100 1 0 cereal 30 work
192 winter False heavyCloudy 2 88 69 1 1 cereal 79 doNothing
193 spring False heavyCloudy 16 100 21 0 1 cereal 57 work
194 autumn True heavyCloudy 1 17 62 0 1 cereal 92 doNothing
195 autumn False sunny 1 69 54 0 0 cereal 62 work
196 autumn False sunny 17 62 84 0 1 vegetable 18 work
197 summer False heavyCloudy 24 57 84 0 1 vegetable 1 work
198 spring False partCloudy 8 80 61 0 0 none 0 work
199 autumn False heavyCloudy 1 93 79 0 0 fruit 62 work
200 winter False sunny -4 51 33 1 0 none 0 doNothing
201 autumn False precipitation 4 51 73 1 1 fruit 57 doNothing
202 autumn True heavyCloudy 5 88 81 0 1 fruit 25 doNothing
203 summer False precipitation 30 26 45 0 0 none 0 work
204 winter False partCloudy 3 88 46 1 0 none 0 doNothing
205 autumn False heavyCloudy 8 20 34 0 1 fruit 62 work
206 spring False partCloudy 15 34 33 0 0 vegetable 16 work
207 winter False heavyCloudy -20 80 25 1 0 vegetable 45 doNothing
208 spring False precipitation 6 34 78 1 0 cereal 6 doNothing
209 spring True heavyCloudy 3 97 65 1 0 fruit 21 doNothing
210 summer False precipitation 34 49 65 1 0 vegetable 10 work
211 summer True precipitation 26 29 2 0 0 cereal 56 doNothing
212 autumn False partCloudy 10 3 19 0 0 vegetable 67 work
213 spring False sunny 19 60 71 0 1 cereal 5 work
214 winter False partCloudy 5 11 66 0 0 none 0 doNothing
215 winter False heavyCloudy -13 86 29 1 1 cereal 98 doNothing
216 summer False precipitation 33 19 2 1 1 cereal 78 work
217 spring False precipitation 13 6 40 0 0 cereal 49 work
218 summer False partCloudy 31 15 70 1 0 cereal 100 work
219 spring False heavyCloudy 8 40 1 0 0 cereal 83 work
220 spring False partCloudy 10 77 95 1 1 fruit 85 work
221 spring False partCloudy 3 96 32 1 1 fruit 16 work
222 winter False sunny -11 24 5 1 0 none 0 doNothing
223 summer True heavyCloudy 34 14 11 0 0 vegetable 36 doNothing
224 summer True precipitation 34 69 54 1 0 none 0 doNothing
225 spring True precipitation 21 92 44 0 0 fruit 34 doNothing
226 spring False sunny 10 58 14 1 1 none 0 work
227 spring False partCloudy 9 22 68 0 0 vegetable 85 work
228 winter False precipitation -20 62 18 0 1 vegetable 78 doNothing
229 spring False sunny 10 51 7 1 1 none 0 work
230 autumn True heavyCloudy 19 89 2 1 0 cereal 6 doNothing
231 winter False heavyCloudy -6 99 10 0 1 fruit 70 doNothing
232 spring False sunny 2 84 49 1 0 none 0 work
233 summer False heavyCloudy 27 11 32 0 1 cereal 22 work
234 summer False partCloudy 27 55 39 1 1 none 0 work
235 winter False heavyCloudy -13 53 1 1 1 none 0 doNothing
236 summer False partCloudy 27 15 78 1 1 cereal 43 work
237 winter False partCloudy -4 79 5 0 0 vegetable 1 doNothing
238 winter False sunny -1 6 31 0 0 fruit 13 doNothing
239 summer True precipitation 31 86 32 0 1 fruit 98 doNothing
240 winter False precipitation -2 96 89 1 1 cereal 57 doNothing
241 spring False sunny 18 28 92 1 0 fruit 20 work
242 summer False precipitation 27 90 37 1 0 cereal 55 work
243 summer False heavyCloudy 32 41 3 0 0 cereal 35 work
244 autumn False precipitation 2 31 90 1 0 cereal 7 doNothing
245 winter False partCloudy -9 74 28 1 1 fruit 72 doNothing
246 summer False partCloudy 23 8 99 0 1 none 0 work
247 spring False heavyCloudy 8 85 29 0 0 none 0 work
248 winter False sunny -6 67 100 1 1 fruit 25 doNothing
249 winter False partCloudy 10 88 85 1 1 cereal 68 doNothing
250 spring False sunny 20 99 73 0 0 vegetable 18 work
251 spring False sunny 12 52 22 0 0 none 0 work
252 winter False sunny -18 16 57 0 0 vegetable 69 doNothing
253 winter False partCloudy -13 17 10 0 0 vegetable 93 doNothing
254 summer False partCloudy 23 18 24 0 1 fruit 7 work
255 spring False partCloudy 2 50 95 1 1 vegetable 49 work
256 summer False partCloudy 23 51 40 1 0 none 0 work
257 summer False partCloudy 28 61 28 1 0 cereal 61 work
258 summer False precipitation 25 37 20 1 0 vegetable 18 work
259 spring False sunny 11 48 62 0 0 fruit 94 work
260 spring True heavyCloudy 1 85 91 0 0 none 0 doNothing
261 autumn False partCloudy 21 13 92 1 0 vegetable 66 work
262 autumn False precipitation 2 25 95 0 0 cereal 18 doNothing
263 autumn False precipitation 0 50 32 0 1 vegetable 92 doNothing
264 winter False partCloudy -18 27 2 0 1 none 0 doNothing
265 autumn False precipitation 7 49 6 0 0 fruit 92 doNothing
266 autumn False precipitation 19 21 48 1 0 cereal 93 work
267 autumn False precipitation 7 54 12 0 0 none 0 work
268 spring False sunny 1 25 30 1 0 fruit 20 work
269 autumn False partCloudy 9 80 44 0 0 vegetable 49 work
270 summer False heavyCloudy 20 95 36 0 1 fruit 11 work
271 winter False partCloudy -17 3 9 1 1 vegetable 94 doNothing
272 winter False partCloudy -15 62 35 0 1 fruit 51 doNothing
273 summer False sunny 35 6 24 0 0 cereal 94 work
274 summer False partCloudy 34 95 37 1 0 vegetable 86 work
275 summer True precipitation 36 25 83 1 0 fruit 87 work
276 spring False heavyCloudy 12 29 32 0 0 cereal 86 work
277 winter False sunny -15 44 70 0 0 fruit 82 doNothing
278 winter False heavyCloudy 3 23 18 1 1 fruit 60 doNothing
279 summer False precipitation 20 71 73 1 0 cereal 3 work
280 winter False precipitation -4 90 10 1 1 cereal 51 doNothing
281 autumn False sunny 4 70 73 1 1 cereal 15 work
282 winter False heavyCloudy 10 81 76 1 1 vegetable 80 doNothing
283 spring False partCloudy 2 2 22 1 1 vegetable 21 work
284 spring False precipitation 17 4 67 1 0 cereal 69 work
285 spring False heavyCloudy 10 48 55 0 1 cereal 100 work
286 autumn False precipitation 3 29 41 0 1 none 0 work
287 spring False precipitation 13 58 27 0 1 fruit 16 work
288 summer False partCloudy 28 85 14 0 1 none 0 work
289 summer True heavyCloudy 30 19 15 0 1 vegetable 49 doNothing
290 summer True heavyCloudy 30 74 21 1 0 cereal 16 doNothing
291 summer False heavyCloudy 33 38 35 0 0 vegetable 91 work
292 spring False partCloudy 1 68 59 1 1 vegetable 14 work
293 summer False precipitation 22 41 14 0 1 cereal 48 work
294 autumn False precipitation 8 66 44 0 0 cereal 65 doNothing
295 spring False sunny 7 35 72 1 0 fruit 92 work
296 summer False heavyCloudy 24 36 81 0 1 cereal 6 work
297 winter False heavyCloudy -5 26 27 0 0 cereal 78 doNothing
298 summer False sunny 27 45 40 1 0 fruit 57 work
299 spring False precipitation 8 30 79 1 1 none 0 work
300 winter False sunny 7 76 71 0 1 fruit 75 doNothing
301 winter False precipitation 9 49 5 1 0 fruit 7 doNothing

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 743 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 743 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Some files were not shown because too many files have changed in this diff Show More