From 0dc7124bdf46644098bc6d736ee6fcc93b528cff Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Mon, 3 Mar 2025 11:25:07 +0400 Subject: [PATCH] #2 -- Add inference dtos --- .../controller/InferenceRestController.java | 6 ++++ .../fc/rule/model/ProjectInferenceData.java | 26 ++++++++++++++ .../ulstu/fc/rule/model/dto/FuzzyTermDto.java | 22 ++++++++++++ .../ulstu/fc/rule/model/dto/VariableDto.java | 24 +++++++++++++ .../fc/rule/model/dto/VariableValueDto.java | 22 ++++++++++++ .../rule/service/FuzzyInferenceService.java | 35 ++++++++++++++++++- 6 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/ulstu/fc/rule/model/ProjectInferenceData.java create mode 100644 src/main/java/ru/ulstu/fc/rule/model/dto/FuzzyTermDto.java create mode 100644 src/main/java/ru/ulstu/fc/rule/model/dto/VariableDto.java create mode 100644 src/main/java/ru/ulstu/fc/rule/model/dto/VariableValueDto.java 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 dcb0a8f..453b155 100644 --- a/src/main/java/ru/ulstu/fc/rule/controller/InferenceRestController.java +++ b/src/main/java/ru/ulstu/fc/rule/controller/InferenceRestController.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import ru.ulstu.fc.rule.model.InferenceData; import ru.ulstu.fc.rule.model.OutputValue; +import ru.ulstu.fc.rule.model.ProjectInferenceData; import ru.ulstu.fc.rule.service.FuzzyInferenceService; import java.util.List; @@ -26,4 +27,9 @@ public class InferenceRestController { inferenceData.getInputVariables(), inferenceData.getOutputVariable()); } + + @RequestMapping(value = "getProjectInference", method = RequestMethod.POST) + public List getProjectInference(@RequestBody ProjectInferenceData projectInferenceData) { + return fuzzyInferenceService.getProjectFuzzyInference(projectInferenceData); + } } diff --git a/src/main/java/ru/ulstu/fc/rule/model/ProjectInferenceData.java b/src/main/java/ru/ulstu/fc/rule/model/ProjectInferenceData.java new file mode 100644 index 0000000..3518972 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/ProjectInferenceData.java @@ -0,0 +1,26 @@ +package ru.ulstu.fc.rule.model; + +import ru.ulstu.fc.rule.model.dto.VariableValueDto; + +import java.util.List; + +public class ProjectInferenceData { + private Integer projectId; + private List variableValues; + + public Integer getProjectId() { + return projectId; + } + + public void setProjectId(Integer projectId) { + this.projectId = projectId; + } + + public List getVariableValues() { + return variableValues; + } + + public void setVariableValues(List variableValues) { + this.variableValues = variableValues; + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/model/dto/FuzzyTermDto.java b/src/main/java/ru/ulstu/fc/rule/model/dto/FuzzyTermDto.java new file mode 100644 index 0000000..3dd831a --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/dto/FuzzyTermDto.java @@ -0,0 +1,22 @@ +package ru.ulstu.fc.rule.model.dto; + +public class FuzzyTermDto { + private String description; + private Double crispValue; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Double getCrispValue() { + return crispValue; + } + + public void setCrispValue(Double crispValue) { + this.crispValue = crispValue; + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/model/dto/VariableDto.java b/src/main/java/ru/ulstu/fc/rule/model/dto/VariableDto.java new file mode 100644 index 0000000..46828b8 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/dto/VariableDto.java @@ -0,0 +1,24 @@ +package ru.ulstu.fc.rule.model.dto; + +import java.util.List; + +public class VariableDto { + private String name; + private List terms; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getTerms() { + return terms; + } + + public void setTerms(List terms) { + this.terms = terms; + } +} diff --git a/src/main/java/ru/ulstu/fc/rule/model/dto/VariableValueDto.java b/src/main/java/ru/ulstu/fc/rule/model/dto/VariableValueDto.java new file mode 100644 index 0000000..6984841 --- /dev/null +++ b/src/main/java/ru/ulstu/fc/rule/model/dto/VariableValueDto.java @@ -0,0 +1,22 @@ +package ru.ulstu.fc.rule.model.dto; + +public class VariableValueDto { + private String variableName; + private Double value; + + public String getVariableName() { + return variableName; + } + + public void setVariableName(String variableName) { + this.variableName = variableName; + } + + public Double getValue() { + return value; + } + + public void setValue(Double value) { + this.value = value; + } +} 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 3812d83..3754307 100644 --- a/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java +++ b/src/main/java/ru/ulstu/fc/rule/service/FuzzyInferenceService.java @@ -14,9 +14,15 @@ import com.fuzzylite.variable.OutputVariable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import ru.ulstu.fc.project.service.ProjectRulesService; +import ru.ulstu.fc.project.service.ProjectService; +import ru.ulstu.fc.project.service.ProjectVariableService; +import ru.ulstu.fc.rule.model.FuzzyRule; import ru.ulstu.fc.rule.model.FuzzyTerm; import ru.ulstu.fc.rule.model.OutputValue; +import ru.ulstu.fc.rule.model.ProjectInferenceData; import ru.ulstu.fc.rule.model.Variable; +import ru.ulstu.fc.rule.model.dto.VariableValueDto; import java.util.List; import java.util.Map; @@ -31,9 +37,17 @@ public class FuzzyInferenceService { + " is %s"; private final static String NO_RESULT = "Нет результата"; private final Engine fuzzyEngine; + private final ProjectService projectService; + private final FuzzyRuleService fuzzyRuleService; + private final ProjectRulesService projectRulesService; + private final ProjectVariableService projectVariableService; - public FuzzyInferenceService(Engine fuzzyEngine) { + public FuzzyInferenceService(Engine fuzzyEngine, ProjectService projectService, FuzzyRuleService fuzzyRuleService, ProjectRulesService projectRulesService, ProjectVariableService projectVariableService) { this.fuzzyEngine = fuzzyEngine; + this.projectService = projectService; + this.fuzzyRuleService = fuzzyRuleService; + this.projectRulesService = projectRulesService; + this.projectVariableService = projectVariableService; } private List getDemoRules() { @@ -152,4 +166,23 @@ public class FuzzyInferenceService { fuzzyEngine.addRuleBlock(getRuleBlock(fuzzyEngine, rules, inputVariables, outputVariable)); return getConsequent(fuzzyEngine, values); } + + public List getProjectFuzzyInference(ProjectInferenceData projectInferenceData) { + List fuzzyRules = projectRulesService.getByProjectId(projectInferenceData.getProjectId()) + .stream() + .map(FuzzyRule::getContent) + .toList(); + Map variableValues = projectInferenceData.getVariableValues() + .stream() + .collect(Collectors.toMap( + VariableValueDto::getVariableName, + VariableValueDto::getValue)); + List inputVariables = projectVariableService.getByProjectId(projectInferenceData.getProjectId()); + + + return getFuzzyInference(fuzzyRules, + variableValues, + inputVariables, + new Variable()); + } }