Olá, pessoal, tudo bom?
Eu estou desenvolvendo um sistema em Java no qual a sua funcionalidade é gerar questionários online inteligente (de acordo com um nível de dificuldade), para desenvolver este sistema estou utilizando a lógica fuzzy na geração do questionário.
De modo geral o meu sistema fuzzy contém 1 variável de entrada (nível de dificuldade), 9 regras e 3 variáveis de saída (porcentagem de questões fáceis, médias e dificeis)
Porém ao realizar o teste destas regras no MATLAB, eu obtive alguns valores estranhos, por exemplo:
Para a entrada NivelDificuldade = 2.5, a saída é:
PorcentagemQuestõesFaceis = 0,45 (45%),
PorcentagemQuestõesMédias = 0,54 (54%),
PorcentagemQuestõesDificeis = 0,18 (18%)
Aparentemente o valor atribuído para cada porcentagem está correto, porém a soma das porcentagens está ultrapassando 1.0 (100%), e a minha dúvida é se isto é normal pois na prática são 3 sistemas diferentes (um para cada porcentagem), eu pesquisei na internet e vi que isto pode ocorrer por ser 3 sistemas fuzzy diferentes.
E se for normal, a solução seria tentar normalizar estes valores?
Eu já realizei este teste no MATLAB e em mais 2 bibliotecas de lógica fuzzy para Java e em todas obtive os mesmos resultados.
Para quem quiser olhar, as regras que eu defini foram estas:
RULE 1 : IF nivelDificuldade IS facil
THEN porcentagemQuestoesFaceis IS alto;
RULE 2 : IF nivelDificuldade IS facil
THEN porcentagemQuestoesMedias IS baixo;
RULE 3 : IF nivelDificuldade IS facil
THEN porcentagemQuestoesDificeis IS baixo;
RULE 4 : IF nivelDificuldade IS intermediario
THEN porcentagemQuestoesFaceis IS baixo;
RULE 5 : IF nivelDificuldade IS intermediario
THEN porcentagemQuestoesMedias IS alto;
RULE 6 : IF nivelDificuldade IS intermediario
THEN porcentagemQuestoesDificeis IS baixo;
RULE 7 : IF nivelDificuldade IS dificil
THEN porcentagemQuestoesFaceis IS baixo;
RULE 8 : IF nivelDificuldade IS dificil
THEN porcentagemQuestoesMedias IS baixo;
RULE 9 : IF nivelDificuldade IS dificil
THEN porcentagemQuestoesDificeis IS alto;
Como estão suas funções de entrada? Provavelmente foram colocadas de forma a somar mais de 1.
Não é considerado a melhor das práticas, mas não interfere muito no resultado final. Algumas APIs de lógica fuzzy permitem normalizar o resultado dessa saída (dividir cada percentual pela soma dos percentuais).
Olá ViniGodoy, obrigado pela ajuda, então, eu tenho somente uma entrada (Nível de dificuldade),
e tenho 3 conjuntos fuzzy:
Fácil: a função de pertinência é triangular (-4, 0 , 4)
Intermediário: a função de pertinência é trapezoidal (0, 4, 6, 10)
Dificil: a função de pertinência é triangular (6, 10, 14)
Se for possível normalizar, é ótimo, mas estou com receio que o que eu fiz possa estar errado, desde já, muito obrigado
Normalizar é interessante para deixar que um usuário que não entende nada de fuzzy desenhe as funções em algum editor gráfico.
Sem normalizar, você deve desenhar o gráfico das funções e garantir que em todos os pontos eles somem o valor máximo.
Então, para chegar a estes valores eu criei 3 sistemas fuzzy:
A entrada nivel de dificuldade eu repito ela para os 3 sistemas
Para retornar a porcentagem de questões fáceis
Regras:
IF nivelDificuldade IS facil
THEN porcentagemQuestoesFaceis IS alto;
IF nivelDificuldade IS medio
THEN porcentagemQuestoesMedias IS baixo;
IF nivelDificuldade IS dificil
THEN porcentagemQuestoesDificeis IS baixo;
Para retornar a porcentagem de questões médias
Regras:
IF nivelDificuldade IS facil
THEN porcentagemQuestoesFaceis IS baixo;
IF nivelDificuldade IS medio
THEN porcentagemQuestoesMedias IS alto;
IF nivelDificuldade IS dificil
THEN porcentagemQuestoesDificeis IS baixo;
Para retornar a porcentagem de questões dificeis
Regras:
IF nivelDificuldade IS facil
THEN porcentagemQuestoesFaceis IS baixo;
IF nivelDificuldade IS medio
THEN porcentagemQuestoesMedias IS baixo;
IF nivelDificuldade IS dificil
THEN porcentagemQuestoesDificeis IS alto;
Método de defuzificação que eu estou utilizando é o centroid, então como falei, na prática são 3 sistemas fuzzy diferentes, imagino que deva ser isto que impeça que os valores saiam normalizados, posso estar enganado pois sou iniciante neste assunto, mas não teria como eu integrar estes 3 sistemas fuzzy em único.
[quote=ViniGodoy]E como você chegou a esses valores?
Normalizar é interessante para deixar que um usuário que não entende nada de fuzzy desenhe as funções em algum editor gráfico.
Sem normalizar, você deve desenhar o gráfico das funções e garantir que em todos os pontos eles somem o valor máximo.[/quote]
Se você quiser eu posto as imagens aqui dos meus conjuntos fuzzy.
3 sistemas fuzzy distintos são 3 sistemas fuzzy diferentes. Os valores sempre serão diferentes porque após fuzzyficar existem infinitos níveis entre 0 e 1. Muitos valores são arredondados.
Você pode até normalizar ou criar um método para aproximar esses valores mas não é uma solução adequada. O correto é ser apenas um sistema usando os mesmos conjunto fuzzy.
[quote=juliocbq]3 sistemas fuzzy distintos são 3 sistemas fuzzy diferentes. Os valores sempre serão diferentes porque após fuzzyficar existem infinitos níveis entre 0 e 1. Muitos valores são arredondados.
Você pode até normalizar ou criar um método para aproximar esses valores mas não é uma solução adequada. O correto é ser apenas um sistema usando os mesmos conjunto fuzzy.[/quote]
Hummm…entendi, mas no meu caso como eu preciso retornar 3 tipos de porcentagens, como que eu poderia integrar isto em um único sistema?
Pois a única solução que eu encontrei foi dividir o problema em 3, caso não encontre a solução acho que a única saída vai ser optar pelo método da normalização.