EmbASP-Java
AnswerSets.java
1 package it.unical.mat.embasp.languages.asp;
2 
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 
7 import it.unical.mat.embasp.base.Output;
8 import it.unical.mat.parsers.asp.ASPDataCollection;
9 
12 public abstract class AnswerSets extends Output implements ASPDataCollection {
14  protected List<AnswerSet> answersets;
15 
16  public AnswerSets(final String out) {
17  super(out);
18  }
19 
20  public AnswerSets(final String out, final String err) {
21  super(out, err);
22  }
23 
24  @Override
25  public Object clone() throws CloneNotSupportedException {
26  return super.clone();
27  }
28 
29  public List<AnswerSet> getAnswersets() {
30  if (answersets == null) {
31  answersets = new ArrayList<>();
32  parse();
33  }
34 
35  return Collections.unmodifiableList(answersets);
36  }
37 
38  public List<AnswerSet> getOptimalAnswerSets() {
39  int level = 0;
40  List <AnswerSet> answerSets = getAnswersets(), optimalAnswerSets = new ArrayList <> ();
41 
42  for(final AnswerSet answerSet : answerSets) {
43  final int maxLevel = Collections.max(answerSet.getWeights().keySet());
44 
45  if(level < maxLevel)
46  level = maxLevel;
47  }
48 
49  for(; level >= 1; level--) {
50  int minimumCost = Integer.MAX_VALUE;
51 
52  for(final AnswerSet answerSet : answerSets) {
53  final int cost = answerSet.getWeights().getOrDefault(level, 0);
54 
55  if(cost < minimumCost) {
56  optimalAnswerSets.clear();
57 
58  minimumCost = cost;
59  }
60 
61  if(cost == minimumCost)
62  optimalAnswerSets.add(answerSet);
63  }
64 
65  answerSets = new ArrayList <> (optimalAnswerSets);
66  }
67 
68  return optimalAnswerSets;
69  }
70 
71  public String getAnswerSetsString() {
72  return output;
73  }
74 
75  @Override
76  public void addAnswerSet() {
77  answersets.add(new AnswerSet(new ArrayList <String> ()));
78  }
79 
80  @Override
81  public void storeAtom(final String result) {
82  answersets.get(answersets.size() - 1).getValue().add(result);
83  }
84 
85  @Override
86  public void storeCost(final int level, final int weight) {
87  answersets.get(answersets.size() - 1).getLevelWeight().put(level, weight);
88  }
89 }
it.unical.mat.embasp.languages.asp.AnswerSets
Definition: AnswerSets.java:12
it.unical.mat.embasp.languages.asp.AnswerSets.answersets
List< AnswerSet > answersets
Definition: AnswerSets.java:14
it.unical.mat.parsers.asp.ASPDataCollection
Definition: ASPDataCollection.java:3
it.unical.mat.embasp.base.Output
Definition: Output.java:4
it.unical.mat.embasp.base.Output.output
String output
Definition: Output.java:6