|
|
@ -10,12 +10,61 @@ import net.sourceforge.jFuzzyLogic.rule.LinguisticTerm;
|
|
|
|
import net.sourceforge.jFuzzyLogic.rule.Variable;
|
|
|
|
import net.sourceforge.jFuzzyLogic.rule.Variable;
|
|
|
|
import net.sourceforge.jFuzzyLogic.ruleConnection.RuleConnectionMethodAndMin;
|
|
|
|
import net.sourceforge.jFuzzyLogic.ruleConnection.RuleConnectionMethodAndMin;
|
|
|
|
import net.sourceforge.jFuzzyLogic.ruleImplication.RuleImplicationMethodMin;
|
|
|
|
import net.sourceforge.jFuzzyLogic.ruleImplication.RuleImplicationMethodMin;
|
|
|
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
import ru.ulstu.extractor.rule.model.AntecedentValue;
|
|
|
|
|
|
|
|
import ru.ulstu.extractor.rule.model.Rule;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Collections;
|
|
|
|
import java.util.Comparator;
|
|
|
|
import java.util.Comparator;
|
|
|
|
import java.util.LinkedList;
|
|
|
|
import java.util.LinkedList;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
|
|
|
public class FuzzyInferenceService {
|
|
|
|
|
|
|
|
private final RuleService ruleService;
|
|
|
|
|
|
|
|
private final AntecedentValueService antecedentValueService;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public FuzzyInferenceService(RuleService ruleService,
|
|
|
|
|
|
|
|
AntecedentValueService antecedentValueService) {
|
|
|
|
|
|
|
|
this.ruleService = ruleService;
|
|
|
|
|
|
|
|
this.antecedentValueService = antecedentValueService;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<FuzzyRule> getFuzzyRulesFromDb() {
|
|
|
|
|
|
|
|
List<FuzzyRule> fuzzyRules = new ArrayList<>();
|
|
|
|
|
|
|
|
//List<Variable> variables = getFuzzyVariables();
|
|
|
|
|
|
|
|
for (Rule dbRule : ruleService.getList()) {
|
|
|
|
|
|
|
|
FuzzyRule fuzzyRule = new FuzzyRule(String.format("Fuzzy rule %s", dbRule.getId()));
|
|
|
|
|
|
|
|
// fuzzyRule.setAntecedents(expression);
|
|
|
|
|
|
|
|
// fuzzyRule.setConsequents(new LinkedList<>(Collections.singleton(new FuzzyRuleTerm(dbRule.getConsequent(), false))));
|
|
|
|
|
|
|
|
fuzzyRules.add(fuzzyRule);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return fuzzyRules;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private List<Variable> getFuzzyVariablesWithoutMembership() {
|
|
|
|
|
|
|
|
List<Variable> variables = new ArrayList<>();
|
|
|
|
|
|
|
|
List<AntecedentValue> antecedentValues = antecedentValueService.getList();
|
|
|
|
|
|
|
|
for (AntecedentValue antecedentValue : antecedentValues) {
|
|
|
|
|
|
|
|
variables.add(new Variable(antecedentValue.getAntecedentValue()));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return variables;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// private FuzzyRuleExpression getFuzzyRulesAntecedents(TimeSeriesType timeSeriesType1, TimeSeriesType timeSeriesType2) {
|
|
|
|
|
|
|
|
// return new FuzzyRuleExpression(getFuzzyRuleTerm(), getFuzzyRuleTerm(), new RuleConnectionMethodAndMin());
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private FuzzyRuleExpression getFuzzyRuleExpression(FuzzyRuleTerm term1, FuzzyRuleTerm term2) {
|
|
|
|
|
|
|
|
return new FuzzyRuleExpression(term1, term2, new RuleConnectionMethodAndMin());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private FuzzyRuleTerm getFuzzyRuleTerm(Variable variable, String term) {
|
|
|
|
|
|
|
|
return new FuzzyRuleTerm(variable, term, false);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class FuzzyInference {
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
public void run() {
|
|
|
|
FuzzyRule fuzzyRule1 = new FuzzyRule("rule 1");
|
|
|
|
FuzzyRule fuzzyRule1 = new FuzzyRule("rule 1");
|
|
|
|
FuzzyRule fuzzyRule2 = new FuzzyRule("rule 2");
|
|
|
|
FuzzyRule fuzzyRule2 = new FuzzyRule("rule 2");
|