Changeset 9 for profile/src
- Timestamp:
- 11/28/19 14:40:48 (5 years ago)
- Location:
- profile/src
- Files:
-
- 6 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
profile/src/main/java/geniusweb/profile/Profile.java
r2 r9 7 7 import geniusweb.issuevalue.Domain; 8 8 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace; 9 import geniusweb.profile.utilityspace.SumOfGroupsUtilitySpace; 9 10 10 11 /** … … 17 18 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) 18 19 @JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class), 19 @JsonSubTypes.Type(value = DefaultPartialOrdering.class) }) 20 @JsonSubTypes.Type(value = DefaultPartialOrdering.class), 21 @JsonSubTypes.Type(value = SumOfGroupsUtilitySpace.class) }) 20 22 public interface Profile { 21 23 … … 33 35 /** 34 36 * 35 * @return a (hypothetical) bid that is the best alternative to a non-agreement. 36 * Only bids that are {@link #isPreferredOrEqual(Bid, Bid)} should be 37 * accepted. If a negotiation does not reach an agreement, the party can 38 * get this offer somewhere else. This replaces the older notion of a 37 * @return a (hypothetical) bid that is the best alternative to a 38 * non-agreement. Only bids that are 39 * {@link #isPreferredOrEqual(Bid, Bid)} should be accepted. If a 40 * negotiation does not reach an agreement, the party can get this 41 * offer somewhere else. This replaces the older notion of a 39 42 * "reservation value" and is more general. If null, there is no 40 43 * reservation bid and any agreement is better than no agreement. -
profile/src/main/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilities.java
r1 r9 8 8 import com.fasterxml.jackson.annotation.JsonAutoDetect; 9 9 import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; 10 import com.fasterxml.jackson.annotation.JsonTypeName; 10 11 11 12 import geniusweb.issuevalue.DiscreteValue; … … 13 14 import geniusweb.issuevalue.Value; 14 15 import geniusweb.issuevalue.ValueSet; 15 16 import com.fasterxml.jackson.annotation.JsonTypeName;17 16 18 17 /** … … 37 36 * create new object based on the given mapping from values to utilities. 38 37 * 39 * @param valueUtils map with key {@link DiscreteValue}s and value a Double in40 * the range [0,1].38 * @param valueUtils map with key {@link DiscreteValue}s and value a Double 39 * in the range [0,1]. 41 40 * @throws NullPointerException if one of the args is null 42 41 * @throws IllegalArgumentException if values are not in range [0,1]. 43 42 */ 44 public DiscreteValueSetUtilities(Map<DiscreteValue, BigDecimal> valueUtils) { 43 public DiscreteValueSetUtilities( 44 Map<DiscreteValue, BigDecimal> valueUtils) { 45 45 if (valueUtils == null) { 46 46 throw new NullPointerException("valueUtils==null"); 47 47 } 48 48 if (valueUtils.keySet().contains(null)) { 49 throw new NullPointerException("one of the keys in valueUtils is null"); 49 throw new NullPointerException( 50 "one of the keys in valueUtils is null"); 50 51 } 51 52 if (valueUtils.values().stream() 52 .anyMatch(v -> v == null || v.compareTo(BigDecimal.ZERO) < 0 || v.compareTo(BigDecimal.ONE) > 0)) { 53 throw new IllegalArgumentException("Weights in valueUtils must all be in [0,1]"); 53 .anyMatch(v -> v == null || v.compareTo(BigDecimal.ZERO) < 0 54 || v.compareTo(BigDecimal.ONE) > 0)) { 55 throw new IllegalArgumentException( 56 "Weights in valueUtils must all be in [0,1]"); 54 57 } 55 58 this.valueUtilities.putAll(valueUtils); … … 68 71 public String isFitting(ValueSet valueset) { 69 72 if (!(valueset instanceof DiscreteValueSet)) { 70 return "The utilities are for a discrete valueset but the given values are " + valueset; 73 return "The utilities are for a discrete valueset but the given values are " 74 + valueset; 71 75 } 72 76 DiscreteValueSet discvalueset = (DiscreteValueSet) valueset; 73 if (!valueUtilities.keySet().equals(new HashSet<>(discvalueset.getValues()))) 74 return "The values in the set " + valueset + " do not match the values mapped to utilities " 77 if (!valueUtilities.keySet() 78 .equals(new HashSet<>(discvalueset.getValues()))) 79 return "The values in the set " + valueset 80 + " do not match the values mapped to utilities " 75 81 + valueUtilities.keySet(); 76 82 return null; … … 79 85 @Override 80 86 public String toString() { 81 return " ValueSetUtilities" + valueUtilities;87 return "DiscreteValueSetUtilities" + valueUtilities; 82 88 } 83 89 … … 86 92 final int prime = 31; 87 93 int result = 1; 88 result = prime * result + ((valueUtilities == null) ? 0 : valueUtilities.hashCode()); 94 result = prime * result 95 + ((valueUtilities == null) ? 0 : valueUtilities.hashCode()); 89 96 return result; 90 97 } -
profile/src/main/java/geniusweb/profile/utilityspace/NumberValueSetUtilities.java
r4 r9 139 139 @Override 140 140 public String toString() { 141 return "NumberVal Utility(" + lowValue + "->" + lowUtility + ","141 return "NumberValueSetUtilities(" + lowValue + "->" + lowUtility + "," 142 142 + highValue + "->" + highUtility + ")"; 143 143 } -
profile/src/test/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilitiesTest.java
r7 r9 3 3 import static org.junit.Assert.assertEquals; 4 4 import static org.junit.Assert.assertFalse; 5 import static org.junit.Assert.assertTrue; 5 6 6 7 import java.io.IOException; … … 81 82 @Override 82 83 public List<String> getGeneralTestStrings() { 83 return Arrays.asList(" ValueSetUtilities\\{\"a\"=0.14\\}",84 " ValueSetUtilities\\{\"b\"=0.37\\}",85 " ValueSetUtilities\\{\"a\"=0.37\\}",86 " ValueSetUtilities\\{\"a\"=0.14, \"b\"=0.37\\}");84 return Arrays.asList("DiscreteValueSetUtilities\\{\"a\"=0.14\\}", 85 "DiscreteValueSetUtilities\\{\"b\"=0.37\\}", 86 "DiscreteValueSetUtilities\\{\"a\"=0.37\\}", 87 "DiscreteValueSetUtilities\\{\"a\"=0.14, \"b\"=0.37\\}"); 87 88 } 88 89 … … 200 201 201 202 } 203 204 @Test 205 public void testDeserializeAsDiscrete() 206 throws JsonParseException, JsonMappingException, IOException { 207 // Check that DiscreteValueSetUtilities properly deserializes 208 // discreteutils. 209 String utilstring = "{\"discreteutils\": {\"valueUtilities\": {\"Party Tent\": 0.52,\"Your Dorm\": 0.23,\"Party Room\": 0.99,\"Ballroom\": 0.77}}}"; 210 DiscreteValueSetUtilities valueutils = jackson.readValue(utilstring, 211 DiscreteValueSetUtilities.class); 212 assertTrue(new BigDecimal("0.23").compareTo( 213 valueutils.getUtility(new DiscreteValue("Your Dorm"))) == 0); 214 215 } 216 202 217 } -
profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveTest.java
r7 r9 20 20 21 21 import com.fasterxml.jackson.databind.ObjectMapper; 22 import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;23 22 24 23 import geniusweb.issuevalue.Bid; … … 145 144 public List<String> getGeneralTestStrings() { 146 145 return Arrays.asList( 147 "LinearAdditive\\[\\{issue2= ValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",148 "LinearAdditive\\[\\{issue2= ValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.7, issue1=0.3\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",149 "LinearAdditive\\[\\{issue2= ValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]",150 "LinearAdditive\\[\\{issue2= ValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=ValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value1\"\\}\\]");146 "LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]", 147 "LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.8, \"issue2value1\"=0.6\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.3, \"issue1value2\"=0.2\\}\\},\\{issue2=0.7, issue1=0.3\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]", 148 "LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value2\"\\}\\]", 149 "LinearAdditive\\[\\{issue2=DiscreteValueSetUtilities\\{\"issue2value2\"=0.2, \"issue2value1\"=0.3\\}, issue1=DiscreteValueSetUtilities\\{\"issue1value1\"=0.6, \"issue1value2\"=0.8\\}\\},\\{issue2=0.6, issue1=0.4\\},Bid\\{issue2=\"issue2value1\", issue1=\"issue1value1\"\\}\\]"); 151 150 } 152 151 … … 271 270 } 272 271 273 @Test (expected = InvalidDefinitionException.class)272 @Test 274 273 public void loadFullWithJson() throws IOException { 275 274 String profile = new String( -
profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.java
r3 r9 44 44 @Override 45 45 public List<String> getGeneralTestStrings() { 46 return Arrays.asList("NumberVal Utility\\(12.5->0.5,18.5->0.9\\)",47 "NumberVal Utility\\(12.5->0.6,18.5->0.9\\)",48 "NumberVal Utility\\(12.5->0.5,18.4->0.9\\)");46 return Arrays.asList("NumberValueSetUtilities\\(12.5->0.5,18.5->0.9\\)", 47 "NumberValueSetUtilities\\(12.5->0.6,18.5->0.9\\)", 48 "NumberValueSetUtilities\\(12.5->0.5,18.4->0.9\\)"); 49 49 } 50 50 -
profile/src/test/resources/party1.json
r7 r9 92 92 "Location": { 93 93 "values": [ 94 "Party Tent '",94 "Party Tent", 95 95 "Your Dorm", 96 96 "Party Room",
Note:
See TracChangeset
for help on using the changeset viewer.