#2 -- Fix for multiple output variables
All checks were successful
CI fuzzy controller / container-test-job (push) Successful in 1m13s

This commit is contained in:
Anton Romanov 2025-03-03 20:39:43 +04:00
parent efd0cb66c7
commit 76ece94028
3 changed files with 17 additions and 15 deletions

View File

@ -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)

View File

@ -7,7 +7,7 @@ public class InferenceData {
private List<String> rules;
private Map<String, Double> values;
private List<Variable> inputVariables;
private Variable outputVariable;
private List<Variable> outputVariables;
public List<String> getRules() {
return rules;
@ -33,11 +33,11 @@ public class InferenceData {
this.inputVariables = inputVariables;
}
public Variable getOutputVariable() {
return outputVariable;
public List<Variable> getOutputVariables() {
return outputVariables;
}
public void setOutputVariable(Variable outputVariable) {
this.outputVariable = outputVariable;
public void setOutputVariable(List<Variable> outputVariables) {
this.outputVariables = outputVariables;
}
}

View File

@ -103,9 +103,9 @@ public class FuzzyInferenceService {
private RuleBlock getRuleBlock(Engine engine,
List<String> rules,
List<Variable> inputVariables,
Variable outputVariable) {
List<Variable> 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<OutputValue> getFuzzyInference(List<String> rules,
Map<String, Double> values,
List<Variable> inputVariables,
Variable outputVariable) {
List<Variable> 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<Variable> inputVariables = projectVariableService.getByProjectId(projectInferenceData.getProjectId());
List<Variable> inputVariables = projectVariableService.getInputByProjectId(projectInferenceData.getProjectId());
List<Variable> outputVariables = projectVariableService.getOutputByProjectId(projectInferenceData.getProjectId());
return getFuzzyInference(fuzzyRules,
variableValues,
inputVariables,
new Variable());
outputVariables);
}
}