PROF. FABRÍCIO GALENDE M. DE CARVALHO ALUNOS. GUILHERME ANDERSON E JONATHAS HENRIQUE TRABALHO PRÁTICO I: AGENTES RACIONAIS REFLEXIVOS / REFLEXIVOS BASEADOS EM MODELO.
- Python
- Maria DB
- Desenvolver um sistema de recomendação simples, utilizando a abordagem de agentes racionais reflexivos / reflexivos baseados em modelos. Esse sistema deve atender aos seguintes requisitos e restrições:
- Quando um consumidor indicar a intenção de comprar um produto A, frequentemente comprado com um produto B, o sistema de recomendação sugerirá ao cliente a compra do produto B;
- Quando um consumidor indicar a intenção de compra dos produtos A e B, frequentemente comprados com o produto C, o sistema de recomendação sugerirá ao cliente a compra do produto C;
- O sistema deve permitir o cadastro, a exclusão e a visualização das regras armazenadas em um banco de dados relacional;
- A interface poderá ser totalmente textual, via prompt de comando.
- Ser desenvolvido em linguagem de programação Python 3+;
- Utilizar uma base de regras que seja armazenada em banco de dados relacional (utilizar o MariaDB);
- Disponibilizar todo o código via repositório do GitHub (não esquecer de gerar o arquivo requirements.txt com as dependências de projeto) .
1.1. Instalar a virtualenv
pip install virtualenv
1.2. Criar virtualenv
virtualenv nome_da_virtualenv
1.3. Ativar a virtual env
cd nome_da_venv/Scripts
Activate
2.1. Retorne até a raiz do projeto
cd ../..
2.2. Instalar todas as dependências do projeto
pip install -r requirements.txt
CREATE DATABASE IF NOT EXISTS reflex;
USE reflex;
CREATE TABLE IF NOT EXISTS rules(
id_rules int(9) AUTO_INCREMENT,
relation varchar(50) NOT NULL,
action_rules varchar(50) NOT NULL,
PRIMARY KEY (id_rules)
)
CREATE table IF NOT EXISTS product(
id_product int(9) AUTO_INCREMENT,
product_name varchar(30) NOT NULL,
id_rules int(9) NOT NULL,
PRIMARY KEY (id_product)
)
ALTER TABLE reflex.product
ADD CONSTRAINT id_rules_FK FOREIGN KEY (id_rules)
REFERENCES reflex.rules(id_rules)
ON DELETE CASCADE
ON UPDATE CASCADE
CREATE OR REPLACE FUNCTION FNC_INSERT_RULE (fnc_relation varchar(50), fnc_action_rules varchar(50))
RETURNS int
LANGUAGE SQL
NOT DETERMINISTIC
BEGIN
DECLARE next_id_rule int;
SELECT max(id_rules + 1) INTO next_id_rule FROM rules;
insert into rules (relation, action_rules) values (fnc_relation, fnc_action_rules);
RETURN next_id_rule;
end;
CREATE OR REPLACE FUNCTION FNC_INSERT_PRODUCT (fnc_product_name varchar(30), fnc_id_rules int(9))
RETURNS int
LANGUAGE SQL
NOT DETERMINISTIC
BEGIN
DECLARE next_id_product int;
SELECT max(id_product + 1) INTO next_id_product FROM product;
insert into product (product_name, id_rules) values (fnc_product_name, fnc_id_rules);
RETURN next_id_product;
end;
create or replace view all_percepts as
select p.id_rules,
p.product_name "percept",
r.relation "relation",
r.action_rules "action"
from product p
inner join rules r on p.id_rules = r.id_rules
4.1. Antes de executar, é necessário revisar os dados no final do arquivo "reflex.py", alterando as informações de credenciais do banco, caso necessário. O padrão está conforme abaixo:
con = pymysql.connect(
host='localhost',
port=3306, ## porta padrão do mariaDB
user='root',
password='fatec',
database='reflex',
cursorclass=pymysql.cursors.DictCursor
)
4.2. Estando na raiz do projeto, execute o comando abaixo e siga os menus interativos para cadastrar novas regras e testar as regras existentes:
python reflex.py