From 76ece9402853ae8df99a354991ea3ccff80bdbcb Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Mon, 3 Mar 2025 20:39:43 +0400 Subject: [PATCH] #2 -- Fix for multiple output variables --- .../controller/InferenceRestController.java | 2 +- .../ru/ulstu/fc/rule/model/InferenceData.java | 10 +++++----- .../rule/service/FuzzyInferenceService.java | 20 ++++++++++--------- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/ulstu/fc/rule/controller/InferenceRestController.java b/src/main/java/ru/ulstu/fc/rule/controller/InferenceRestController.java index 453b155..b95cd74 100644 --- a/src/main/java/ru/ulstu/fc/rule/controller/InferenceRestController.java +++ b/src/main/java/ru/ulstu/fc/rule/controller/InferenceRestController.java @@ -25,7 +25,7 @@ public class InferenceRestController { return fuzzyInferenceService.getFuzzyInference(inferenceData.getRules(), inferenceData.getValues(), inferenceData.getInputVariables(), - inferenceData.getOutputVariable()); + inferenceData.getOutputVariables()); } @RequestMapping(value = "getProjectInference", method = RequestMethod.POST) diff --git a/src/main/java/ru/ulstu/fc/rule/model/InferenceData.java b/src/main/java/ru/ulstu/fc/rule/model/InferenceData.java index 74e7ba9..54e8011 100644 --- a/src/main/java/ru/ulstu/fc/rule/model/InferenceData.java +++ b/src/main/java/ru/ulstu/fc/rule/model/InferenceData.java @@ -7,7 +7,7 @@ public class InferenceData { private List rules; private Map values; private List inputVariables; - private Variable outputVariable; + private List outputVariables; public List getRules() { return rules; @@ -33,11 +33,11 @@ public class InferenceData { this.inputVariables = inputVariables; } - public Variable getOutputVariable() { - return outputVariable; + public List getOutputVariables() { + return outputVariables; } - public void setOutputVariable(Variable outputVariable) { - this.outputVariable = outputVariable; + public void setOutputVariable(List outputVariables) { + this.outputVariables = outputVariables; } } diff --git a/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java b/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java index 3754307..e75f77b 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java @@ -103,9 +103,9 @@ public class FuzzyInferenceService { private RuleBlock getRuleBlock(Engine engine, List rules, List inputVariables, - Variable outputVariable) { + List outputVariables) { inputVariables.stream().map(this::getInputVariable).forEach(engine::addInputVariable); - engine.addOutputVariable(getOutputVariable(outputVariable)); + outputVariables.stream().map(this::getOutputVariable).forEach(engine::addOutputVariable); RuleBlock mamdani = new RuleBlock(); mamdani.setName("mamdani"); @@ -151,19 +151,21 @@ public class FuzzyInferenceService { new FuzzyTerm("высокий", 500000.0)) ) ), - new Variable("кредит", List.of( + List.of(new Variable("кредит", List.of( new FuzzyTerm("небольшой", 20000.0), new FuzzyTerm("средний", 100000.0), - new FuzzyTerm("большой", 1000000.0))) + new FuzzyTerm("большой", 1000000.0)))) ); } public List getFuzzyInference(List rules, Map values, List inputVariables, - Variable outputVariable) { + List outputVariables) { fuzzyEngine.getRuleBlocks().clear(); - fuzzyEngine.addRuleBlock(getRuleBlock(fuzzyEngine, rules, inputVariables, outputVariable)); + fuzzyEngine.getInputVariables().clear(); + fuzzyEngine.getOutputVariables().clear(); + fuzzyEngine.addRuleBlock(getRuleBlock(fuzzyEngine, rules, inputVariables, outputVariables)); return getConsequent(fuzzyEngine, values); } @@ -177,12 +179,12 @@ public class FuzzyInferenceService { .collect(Collectors.toMap( VariableValueDto::getVariableName, VariableValueDto::getValue)); - List inputVariables = projectVariableService.getByProjectId(projectInferenceData.getProjectId()); - + List inputVariables = projectVariableService.getInputByProjectId(projectInferenceData.getProjectId()); + List outputVariables = projectVariableService.getOutputByProjectId(projectInferenceData.getProjectId()); return getFuzzyInference(fuzzyRules, variableValues, inputVariables, - new Variable()); + outputVariables); } }