-:- [task14part1]\r
-\r
+:- [task14part1].\r
\r
+% Adding a variable for the current path\r
extractDiagnoses(HSTree,Diagnoses):-\r
- extractDiagnoses2(HSTree, Diagnoses, []). %adding a variable for the current path\r
- \r
-extractDiagnoses2(leaf, [PATHEND], PATHEND). %set path in set and end recursion when leaf had been reached\r
-extractDiagnoses2(node([], []), [], PATH). %finished clearing empty node\r
-extractDiagnoses2(node([CSHEAD|CSTAIL], [CSHEADBRANCH|CSTAILBRANCHES]), DIAGNOSESSET, CURRENTPATH) :-\r
- append(CURRENTPATH, [CSHEAD], NEWPATH), %add new visited conflict item to the visited path \r
- append(DEPTHPATHS, WIDTHPATHS, DIAGNOSESSET), %recursively collects all paths from the recursive calls into the depth and the width and puts them into the DIAGNOSESSET\r
- extractDiagnoses2(CSHEADBRANCH,DEPTHPATHS,NEWPATH), %continues into the depth of the branch\r
- extractDiagnoses2(node(CSTAIL, CSTAILBRANCHES), WIDTHPATHS, CURRENTPATH). %calls on all conflict items in the width of the branch\r
- \r
-getLengthSmallestSet([DIAGNOSIS], DIAGNOSISLENGTH):- %computes length of smallest diagnosis\r
- length(DIAGNOSIS,DIAGNOSISLENGTH). %calls length single diagnosis\r
-getLengthSmallestSet([HEADDIAGNOSIS|RESTOFDIAGNOSES], Minimal):-\r
- getLengthSmallestSet(RESTOFDIAGNOSES, RESTLENGTH), %recursively gets the length of tail\r
- length(HEADDIAGNOSIS,HEADLENGTH), %initialises length of the head diagnosis\r
- Minimal is min(HEADLENGTH, RESTLENGTH). %gets minimal length of diagnoses\r
+ extractDiagnoses2(HSTree, Diagnoses, []). \r
+\r
+% Set path in set and end recursion when leaf had been reached\r
+extractDiagnoses2(leaf, [PathEnd], PathEnd).\r
+% Finished clearing empty node\r
+extractDiagnoses2(node([], []), [], _). \r
+extractDiagnoses2(node([CsHead|CsTail], [CsHeadBranch|CsTailBranches]),\r
+ DiagnosesSet, CurrentPath) :-\r
+ % Add new visited conflict item to the visited path \r
+ append(CurrentPath, [CsHead], NewPath),\r
+ % Recursively collects all paths from the recursive calls into the depth\r
+ % and the width and puts them into the DiagnosesSet\r
+ append(DepthPaths, WidthPaths, DiagnosesSet), \r
+ % Continues into the depth of the branch\r
+ extractDiagnoses2(CsHeadBranch,DepthPaths,NewPath),\r
+ % Calls on all conflict items in the width of the branch\r
+ extractDiagnoses2(node(CsTail, CsTailBranches), WidthPaths, CurrentPath). \r
+\r
+% Computes length of smallest diagnosis\r
+getLengthSmallestSet([Diagnosis], DiagnosisLength):-\r
+ % Calls length single diagnosis\r
+ length(Diagnosis,DiagnosisLength). \r
+getLengthSmallestSet([HeadDiagnosis|RestOfDiagnoses], Minimal):-\r
+ % Recursively gets the length of tail\r
+ getLengthSmallestSet(RestOfDiagnoses, RestLength),\r
+ % Initialises length of the head diagnosis\r
+ length(HeadDiagnosis,HeadLength),\r
+ % Gets minimal length of diagnoses\r
+ Minimal is min(HeadLength, RestLength).\r
\r
filterLength(X,Y):-\r
- length(Y, LENGTHY),\r
- X \== LENGTHY. %checks if the set isn't bigger than the checked set\r
- \r
-getSubsetMinimalDiagnoses(DIAGNOSESSETS, MINIMALDIAGNOSESSETS):- %deze functie moet opnieuw geschreven worden, hij moet de subsetminimal opleveren en niet de kleinste diagnoses\r
- getLengthSmallestSet(DIAGNOSESSETS,LENGTH),!,\r
- exclude(filterLength(LENGTH), DIAGNOSESSETS, MINIMALDIAGNOSESSETS). %excludes sets that are bigger than the smallest set\r
- \r
-subsetMinimalDiagnoses(SD, COMP, OBS, MINIMALDIAGNOSESSETS) :- %function that returns minimal hitting sets from a problem\r
- generateHittingSetTree(SD, COMP, OBS, [], HSTREE), %generate hitting tree\r
- extractDiagnoses(HSTREE, DIAGNOSESSETS), %get diagnoses out of the hitting tree\r
- getSubsetMinimalDiagnoses(DIAGNOSESSETS, MINIMALDIAGNOSESSETS). %determine subset minimal diagnoses
\ No newline at end of file
+ length(Y, LengthY),\r
+ %checks if the set isn't bigger than the checked set\r
+ X \== LengthY. \r
+\r
+% Deze functie moet opnieuw geschreven worden, hij moet de subsetminimal\r
+% opleveren en niet de kleinste diagnoses\r
+getSubsetMinimalDiagnoses(DiagnosesSets, MinimalDiagnosesSets):- \r
+ getLengthSmallestSet(DiagnosesSets,Length),!,\r
+ % Excludes sets that are bigger than the smallest set\r
+ exclude(filterLength(Length), DiagnosesSets, MinimalDiagnosesSets).\r
+\r
+% Function that returns minimal hitting sets from a problem\r
+subsetMinimalDiagnoses(SD, COMP, OBS, MinimalDiagnosesSets) :-\r
+ % Generate hitting tree\r
+ generateHittingSetTree(SD, COMP, OBS, [], HsTree),\r
+ write(HsTree),\r
+ % Get diagnoses out of the hitting tree\r
+ extractDiagnoses(HsTree, DiagnosesSets),\r
+ write(DiagnosesSets),\r
+ % Determine subset minimal diagnoses\r
+ getSubsetMinimalDiagnoses(DiagnosesSets, MinimalDiagnosesSets).\r