From 726588bbeda8cc43954cfa8e25a53f3d0dcb4a20 Mon Sep 17 00:00:00 2001 From: Wesley Vitor Date: Tue, 21 Mar 2023 09:57:07 -0300 Subject: [PATCH] =?UTF-8?q?elabora=C3=A7=C3=A3o=20da=20base=20do=20sugesto?= =?UTF-8?q?r.=20#52?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/ComponentSugestor/sugestor.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/framework/application/ComponentSugestor/sugestor.py diff --git a/src/framework/application/ComponentSugestor/sugestor.py b/src/framework/application/ComponentSugestor/sugestor.py new file mode 100644 index 0000000..1ef5431 --- /dev/null +++ b/src/framework/application/ComponentSugestor/sugestor.py @@ -0,0 +1,58 @@ +from enum import Enum + +from framework.domain.components import EComponentType, Component + +class EComputerPurposes(Enum): + GAMING = 0 + STUDYING = 1 + PROGRAMMING = 2 + WEB_BROWSING = 3 + + +_component_priorities = { + EComputerPurposes.GAMING: { + EComponentType.GPU: 1, + EComponentType.CPU: 0.8, + EComponentType.RAM: 0.7, + EComponentType.PERSISTENCE: 0.5, + }, + EComputerPurposes.STUDYING: { + EComponentType.GPU: 0.2, + EComponentType.CPU: 1, + EComponentType.RAM: 0.7, + EComponentType.PERSISTENCE: 0.6 + }, + #TODO completar o dicionário com as prioridades +} + +_component_specs_priorities = { + EComponentType.GPU: { + "vram": 1, + "consumption": 0.8, + }, + EComponentType.CPU: { + "base_clock_spd": 1, + "n_cores": 0.7, + "ram_clock_max": 0.7, + "consumption": 0.5, + } + #TODO completar o dicionário com as prioridade de especificações +} + + +class ComponentSugestor: + def __init__(self, budget: float, purpose: EComputerPurposes): + self.budget = budget + self.purpose = purpose + + def generate_computer() -> dict[EComponentType, Component]: + # TODO restringe o custo por componente. + # TODO define custo estimado para PS + # TODO Fitra componentes abaixo de seus custos limite. + # TODO if prioridade GPU == 0, filtrar CPUS com GPU integrada + # TODO calcula sua 'pontuação' com base na prioridade de suas especificações. + # TODO Executa problema da mochila, restringindo com base na compatibilidade. + # TODO somar consumo total e definir fonte com o orçamento estabelecido. + # TODO caso o orçamento não seja totalmente preenchido, aumentar o orçamento do item prioritário, mantendo as compatibilidades anteriores + + pass