SI_InteligentnyWozekWidlowy/InitialStateFactory.py
Aleksander Szamałek 868ba1bfd7 fix
2022-06-10 01:28:40 +02:00

90 lines
2.6 KiB
Python

import random
from data.Item import Item
from data.Order import Order
from data.enum.ItemType import ItemType
from data.enum.Priority import Priority
from util.ClientParamsFactory import ClientParamsFactory
from util.PathByEnum import PathByEnum
class InitialStateFactory:
@staticmethod
def generate_item_list(output_list_size: int):
item_list: [Item] = []
for i in range(output_list_size):
item_list.append(InitialStateFactory.__generate_item())
return item_list
@staticmethod
def generate_order_list(output_order_list_size: int):
order_list: [Order] = []
for i in range(output_order_list_size):
order_list.append(InitialStateFactory.__generate_order())
return order_list
@staticmethod
def generate_order_list_XD(output_order_list_size: int):
order_list: [Order] = []
for i in range(output_order_list_size):
order_list.append(InitialStateFactory.__generate_order_XD())
return order_list
@staticmethod
def __generate_order_XD() -> Order:
order_size = random.randint(1, 4)
items: [Item] = []
for i in range(order_size):
items.append(InitialStateFactory.__generate_item())
time_base = random.randint(8, 20)
final_time = time_base * order_size
client_params = ClientParamsFactory.get_client_params()
x = random.randint(0, 3)
type = Priority.LOW
if x == 0:
type = Priority.MEDIUM
elif x == 1:
type = Priority.HIGH
x = random.randint(20, 300)
return Order(final_time, items, type, x, client_params)
@staticmethod
def __generate_order() -> Order:
order_size = random.randint(1, 4)
items: [Item] = []
for i in range(order_size):
items.append(InitialStateFactory.__generate_item())
time_base = random.randint(8, 20)
final_time = time_base * order_size
client_params = ClientParamsFactory.get_client_params()
return Order(final_time, items, Priority.LOW, 0, client_params)
@staticmethod
def generate_input_sequence(self, input_sequence_size):
sequence: [Item] = []
for i in range(0, input_sequence_size):
sequence.append(self.__generate_item())
return sequence
@staticmethod
def __generate_item() -> Item:
randomly_picked_type = random.choice(list(ItemType))
item = Item(randomly_picked_type, PathByEnum.get_random_path(randomly_picked_type))
item.guessed_type = item.real_type
return item