1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 | #include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> premises = {"A", "B", "C"};
vector<vector<string>> rules = {{"A", "B", "C"}, {"B", "C", "D"}, {"C", "D", "E"}};
vector<string> conclusion = {"D", "E"};
bool checkPremise(string p) {
for (string premise : premises) {
if (premise == p) return true;
}
return false;
}
bool checkConclusion(string c) {
for (string concl : conclusion) {
if (concl == c) return true;
}
return false;
}
void forwardChaining(vector<string> prem, vector<vector<string>> rule, vector<string> concl) {
vector<string> newPremises;
vector<string> inferred;
bool premiseExists;
for (vector<string> rulePremises : rules) {
premiseExists = true;
for (string rulePremise : rulePremises) {
if (!checkPremise(rulePremise)) {
premiseExists = false;
break;
}
}
if (premiseExists) {
for (string ruleConclusion : rulePremises) {
if (checkConclusion(ruleConclusion)) continue;
inferred.push_back(ruleConclusion);
newPremises.push_back(ruleConclusion);
}
}
}
if (!newPremises.empty()) {
premises.insert(premises.end(), newPremises.begin(), newPremises.end());
forwardChaining(premises, rules, conclusion);
} else {
cout << "Hasil Inferensi: ";
for (string inf : inferred) {
cout << inf << " ";
}
cout << endl;
}
}
int main() {
cout << "Premises: ";
for (string prem : premises) {
cout << prem << " ";
}
cout << endl;
cout << "Aturan: " << endl;
for (vector<string> rule : rules) {
for (string prem : rule) {
cout << prem << " ";
}
cout << endl;
}
cout << "Kesimpulan: ";
for (string concl : conclusion) {
cout << concl << " ";
}
cout << endl;
forwardChaining(premises, rules, conclusion);
return 0;
}
|