SI_InteligentnyWozekWidlowy/InitialStateFactory.py

85 lines
2.4 KiB
Python
Raw Normal View History

2022-04-16 14:55:25 +02:00
import random
2022-04-16 15:55:43 +02:00
2022-04-16 14:55:25 +02:00
from data.Item import Item
from data.Order import Order
2022-05-22 16:27:36 +02:00
from data.enum.ItemType import ItemType
2022-06-07 01:07:49 +02:00
from data.enum.Priority import Priority
2022-05-22 16:27:36 +02:00
from util.ClientParamsFactory import ClientParamsFactory
2022-04-16 14:55:25 +02:00
2022-04-16 15:55:43 +02:00
class InitialStateFactory:
2022-04-16 14:55:25 +02:00
2022-04-16 15:55:43 +02:00
@staticmethod
2022-05-22 16:27:36 +02:00
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())
2022-04-16 14:55:25 +02:00
return order_list
2022-06-07 01:07:49 +02:00
@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, 2)
type = Priority.LOW
if x == 0:
type = Priority.MEDIUM
elif x == 2:
type = Priority.HIGH
return Order(final_time, items, type, client_params)
2022-04-16 15:55:43 +02:00
@staticmethod
2022-05-22 16:27:36 +02:00
def __generate_order() -> Order:
2022-04-16 14:55:25 +02:00
order_size = random.randint(1, 4)
2022-05-22 16:27:36 +02:00
items: [Item] = []
2022-04-16 14:55:25 +02:00
for i in range(order_size):
2022-05-22 16:27:36 +02:00
items.append(InitialStateFactory.__generate_item())
2022-04-16 14:55:25 +02:00
time_base = random.randint(8, 20)
final_time = time_base * order_size
2022-05-22 16:27:36 +02:00
client_params = ClientParamsFactory.get_client_params()
2022-04-16 14:55:25 +02:00
2022-05-22 16:27:36 +02:00
return Order(final_time, items, None, client_params)
2022-04-16 14:55:25 +02:00
2022-04-16 15:55:43 +02:00
@staticmethod
2022-04-16 14:55:25 +02:00
def generate_input_sequence(self, input_sequence_size):
2022-05-22 16:27:36 +02:00
sequence : [Item] = []
2022-04-16 14:55:25 +02:00
for i in range(0, input_sequence_size):
2022-04-16 15:55:43 +02:00
sequence.append(self.__generate_item())
2022-04-16 14:55:25 +02:00
return sequence
@staticmethod
2022-04-16 15:55:43 +02:00
def __generate_item() -> Item:
2022-04-16 14:55:25 +02:00
randomly_picked_type = random.choice(list(ItemType))
return Item(randomly_picked_type)