Handle negative criterion weights

a negative weight means that a high score on this criterion is a bad
thing ( for example, it might be the price )
We allow for this by adding an offset of +1 to the weight * score