Java Reference
In-Depth Information
// return the best proposal, that is the one with the
// highest value where every attribute assumes the value
// with the highest rank
public
Proposal bestProposal(){
Proposal best
#
new
Proposal();
Iterator it
#
attributes.values().iterator();
while
(it.hasNext()){
AttributeMap attribute
#
(AttributeMap)it.next();
if
(attribute.weight>0)
best.add(attribute.name,attribute.best(),
attribute.values());
}
return
best;
}
// fix the values of the attributes of a proposal
// so that each attribute is admissible
public void
ensureAdmissible(Proposal proposal){
Iterator it
#
proposal.getAttributes().iterator();
while
(it.hasNext()){
Attribute attribute
#
(Attribute)it.next();
ensureAdmissible(attribute);
}
}
public void
ensureAdmissible(Attribute attribute){
// if the current value is admissible there's nothing
// to do
if
(attribute.admissibleValues.contains(attribute.value))
return
;
// otherwise find among the admissible values the one
// having the rank closest to that of the current value.
// In case of equal difference of ranks, preference is
// given to values having lower ranks.
double
previousRank
#
rank(attribute);
double
newRank
#
-1;
Value newValue
#
null
;
Iterator it
#
attribute.admissibleValues.iterator();
while
(it.hasNext()){
Value value
#
(Value)it.next();
double
rank
#
rank(attribute.name,value);
if
(Math.abs(rank - previousRank)
< Math.abs(newRank - previousRank)){
newRank
#
rank;
newValue
#
value;
}
else
if
(Math.abs(rank - newRank)
##
Math.abs(rank - previousRank)