Changeset 2
- Timestamp:
- 08/28/19 11:35:52 (5 years ago)
- Files:
-
- 66 added
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
bidspace/pom.xml
r1 r2 42 42 <groupId>tudelft.utilities</groupId> 43 43 <artifactId>immutablelist</artifactId> 44 <version>1.0. 0</version>44 <version>1.0.1</version> 45 45 </dependency> 46 46 -
exampleparties/pom.xml
r1 r2 18 18 <module>randomparty</module> 19 19 <module>randompartypy</module> 20 <module>timedependentparty</module> 21 <module>conceder</module> 22 <module>hardliner</module> 23 <module>boulware</module> 24 <module>linear</module> 20 25 </modules> 21 26 </project> -
exampleparties/randomparty/pom.xml
r1 r2 54 54 <groupId>tudelft.utilities</groupId> 55 55 <artifactId>immutablelist</artifactId> 56 <version>1.0. 0</version>56 <version>1.0.1</version> 57 57 </dependency> 58 58 -
exampleparties/randomparty/src/main/java/geniusweb/exampleparties/randomparty/RandomParty.java
r1 r2 23 23 import geniusweb.party.inform.Settings; 24 24 import geniusweb.party.inform.YourTurn; 25 import geniusweb.profile.PartialOrdering; 26 import geniusweb.profile.Profile; 25 27 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace; 26 28 import geniusweb.profileconnection.ProfileConnectionFactory; … … 55 57 if (info instanceof Settings) { 56 58 Settings settings = (Settings) info; 57 this.profileint = ProfileConnectionFactory 58 .create(settings.getProfile().getURI(), getReporter()); 59 this.profileint = ProfileConnectionFactory.create(settings.getProfile().getURI(), getReporter()); 59 60 this.me = settings.getID(); 60 61 this.progress = settings.getProgress(); … … 80 81 public Capabilities getCapabilities() { 81 82 try { 82 return new Capabilities(new HashSet<>( 83 Arrays.asList(new ProtocolRef(new URI("SAOP"))))); 83 return new Capabilities(new HashSet<>(Arrays.asList(new ProtocolRef(new URI("SAOP"))))); 84 84 } catch (URISyntaxException e) { 85 getReporter().log(Level.SEVERE, "Failed to create capabilities URI", 86 e); 85 getReporter().log(Level.SEVERE, "Failed to create capabilities URI", e); 87 86 return null; 88 87 } … … 100 99 } else { 101 100 // for demo. Obviously full bids have higher util in general 102 AllPartialBidsList bidspace = new AllPartialBidsList( 103 profileint.getProfile().getDomain()); 101 AllPartialBidsList bidspace = new AllPartialBidsList(profileint.getProfile().getDomain()); 104 102 Bid bid = null; 105 103 for (int attempt = 0; attempt < 20 && !isGood(bid); attempt++) { … … 114 112 115 113 private boolean isGood(Bid bid) { 116 return bid != null 117 && ((LinearAdditiveUtilitySpace) profileint.getProfile()) 118 .getUtility(bid).doubleValue() > 0.6; 114 if (bid == null) 115 return false; 116 Profile profile = profileint.getProfile(); 117 if (profile instanceof LinearAdditiveUtilitySpace) { 118 return ((LinearAdditiveUtilitySpace) profile).getUtility(bid).doubleValue() > 0.6; 119 } 120 if (profile instanceof PartialOrdering) { 121 return ((PartialOrdering) profile).isPreferredOrEqual(bid, profile.getReservationBid()); 122 } 123 throw new IllegalArgumentException("Can not handle profile type " + profile.getClass()); 119 124 } 120 125 -
exampleparties/randompartypy/pom.xml
r1 r2 47 47 <groupId>tudelft.utilities</groupId> 48 48 <artifactId>immutablelist</artifactId> 49 <version>1.0. 0</version>49 <version>1.0.1</version> 50 50 </dependency> 51 51 -
exampleparties/randompartypy/src/main/resources/RandomParty.py
r1 r2 23 23 import geniusweb.party.DefaultParty as DefaultParty 24 24 import geniusweb.profile.Profile as Profile 25 import geniusweb.profile.PartialOrdering as PartialOrdering 25 26 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace as LinearAdditiveUtilitySpace 26 27 import geniusweb.references.ProfileRef as ProfileRef … … 29 30 import geniusweb.profileconnection.ProfileInterface as ProfileInterface 30 31 import geniusweb.progress.ProgressRounds as ProgressRounds 32 31 33 32 34 import com.fasterxml.jackson.databind.ObjectMapper as ObjectMapper … … 92 94 93 95 def _isGood(self, bid): 94 return bid != None and self.profile.getProfile().getUtility(bid).doubleValue() > 0.6; 96 if bid == None: 97 return false 98 profile = self.profile.getProfile() 99 if isinstance(profile, LinearAdditiveUtilitySpace): 100 return profile.getUtility(bid).doubleValue() > 0.6; 101 if isinstance(profile, PartialOrdering): 102 return profile.isPreferredOrEqual(bid, profile.getReservationBid()) 103 raise Exception("Can not handle this type of profile") -
issuevalue/pom.xml
r1 r2 92 92 <groupId>tudelft.utilities</groupId> 93 93 <artifactId>immutablelist</artifactId> 94 <version>1.0. 0</version>94 <version>1.0.1</version> 95 95 </dependency> 96 96 -
issuevalue/src/test/java/geniusweb/issuevalue/DomainTest.java
r1 r2 21 21 import com.fasterxml.jackson.databind.ObjectMapper; 22 22 23 import geniusweb.issuevalue.Bid;24 import geniusweb.issuevalue.DiscreteValue;25 import geniusweb.issuevalue.DiscreteValueSet;26 import geniusweb.issuevalue.Domain;27 import geniusweb.issuevalue.NumberValue;28 import geniusweb.issuevalue.NumberValueSet;29 import geniusweb.issuevalue.ValueSet;30 23 import tudelft.utilities.junit.GeneralTests; 31 24 … … 38 31 private static final String ISSUE3 = "issue3"; 39 32 private static final ObjectMapper jackson = new ObjectMapper(); 40 private static final String domainstring = "{\"name\":\"testdomain\",\"issuesValues\":{\"issue2\":{\"range\":[ \"2\",\"3\",\"0.22\"]},\"issue1\":{\"values\":[\"i1v1\",\"i1v2\"]}}}";33 private static final String domainstring = "{\"name\":\"testdomain\",\"issuesValues\":{\"issue2\":{\"range\":[2,3,0.22]},\"issue1\":{\"values\":[\"i1v1\",\"i1v2\"]}}}"; 41 34 42 private static final String jobsstring = "{\"name\":\"jobs\"," 43 + "\"issuesValues\":{" 44 + "\"lease car\":{\"values\":[\"yes\",\"no\"]}," 45 + "\"permanent contract\":{\"values\":[\"yes\",\"no\"]}," 35 private static final String jobsstring = "{\"name\":\"jobs\"," + "\"issuesValues\":{" 36 + "\"lease car\":{\"values\":[\"yes\",\"no\"]}," + "\"permanent contract\":{\"values\":[\"yes\",\"no\"]}," 46 37 + "\"career development opportunities\":{\"values\":[\"low\",\"medium\",\"high\"]}," 47 38 + "\"fte\":{\"values\":[\"0.6\",\"0.8\",\"1.0\"]}," … … 73 64 Map<String, ValueSet> issues1 = new HashMap<>(); 74 65 issues1.put(ISSUE1, values1); 75 issues1.put(ISSUE2, new NumberValueSet(BigDecimal.ONE, TWO, 76 new BigDecimal("0.22"))); 66 issues1.put(ISSUE2, new NumberValueSet(BigDecimal.ONE, TWO, new BigDecimal("0.22"))); 77 67 domain3 = new Domain(DOMAINNAME, issues1); 78 68 … … 81 71 @Override 82 72 public List<List<Domain>> getGeneralTestData() { 83 return Arrays.asList(Arrays.asList(domain, domain1), 84 Arrays.asList(domain2), Arrays.asList(domain3)); 73 return Arrays.asList(Arrays.asList(domain, domain1), Arrays.asList(domain2), Arrays.asList(domain3)); 85 74 } 86 75 87 76 @Override 88 77 public List<String> getGeneralTestStrings() { 89 return Arrays.asList("Domain.*testdomain.*", "Domain.*testdomain1.*", 90 "Domain.*testdomain.*"); 78 return Arrays.asList("Domain.*testdomain.*", "Domain.*testdomain1.*", "Domain.*testdomain.*"); 91 79 } 92 80 … … 109 97 System.out.println(jobsstring); 110 98 Domain jobsdomain = jackson.readValue(jobsstring, Domain.class); 111 assertEquals(new HashSet<>(Arrays.asList("lease car", 112 "permanent contract", "career development opportunities", "fte", 113 "salary", "work from home")), jobsdomain.getIssues()); 99 assertEquals(new HashSet<>(Arrays.asList("lease car", "permanent contract", "career development opportunities", 100 "fte", "salary", "work from home")), jobsdomain.getIssues()); 114 101 115 102 } … … 134 121 public void testIsCompleteNoIssuesDefined() { 135 122 Bid bid = mock(Bid.class); 136 assertThat(domain.isComplete(bid), new PatternMatch( 137 "Issues in bid .* do not match issues in domain .*")); 123 assertThat(domain.isComplete(bid), new PatternMatch("Issues in bid .* do not match issues in domain .*")); 138 124 } 139 125 … … 154 140 // THREE is NOT a possible value in the NumberValueSet. 155 141 when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(THREE)); 156 assertThat(domain.isComplete(bid), 157 new PatternMatch("bid issue issue2 has illegal value 3")); 142 assertThat(domain.isComplete(bid), new PatternMatch("bid issue issue2 has illegal value 3")); 158 143 } 159 144 … … 167 152 // THREE is NOT a possible value in the NumberValueSet. 168 153 when(bid.getValue(ISSUE2)).thenReturn(new NumberValue(THREE)); 169 assertThat(domain.isComplete(bid), new PatternMatch( 170 "Issues in bid .* do not match issues in domain .*")); 154 assertThat(domain.isComplete(bid), new PatternMatch("Issues in bid .* do not match issues in domain .*")); 171 155 } 172 156 -
issuevalue/src/test/java/geniusweb/issuevalue/NumberValueSetTest.java
r1 r2 16 16 import com.fasterxml.jackson.databind.ObjectMapper; 17 17 18 import geniusweb.issuevalue.NumberValue;19 import geniusweb.issuevalue.NumberValueSet;20 import geniusweb.issuevalue.ValueSet;21 18 import tudelft.utilities.immutablelist.Range; 22 19 … … 33 30 new BigDecimal("0.1")); 34 31 35 private final String asString = "{\"range\":[ \"12.2\",\"12.6\",\"0.3\"]}";32 private final String asString = "{\"range\":[12.2,12.6,0.3]}"; 36 33 private final static NumberValueSet bigset = new NumberValueSet(BigDecimal.ZERO, BigDecimal.TEN, 37 34 new BigDecimal("0.00003")); -
profile/src/main/java/geniusweb/profile/Profile.java
r1 r2 16 16 */ 17 17 @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.WRAPPER_OBJECT) 18 @JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class) }) 18 @JsonSubTypes({ @JsonSubTypes.Type(value = LinearAdditiveUtilitySpace.class), 19 @JsonSubTypes.Type(value = DefaultPartialOrdering.class) }) 19 20 public interface Profile { 20 21 … … 32 33 /** 33 34 * 34 * @return a (hypothetical) bid that is the best alternative to a 35 * non-agreement. Only bids that are 36 * {@link #isPreferredOrEqual(Bid, Bid)} should be accepted. If a 37 * negotiation does not reach an agreement, the party can get this 38 * offer somewhere else. This replaces the older notion of a 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 39 39 * "reservation value" and is more general. If null, there is no 40 40 * reservation bid and any agreement is better than no agreement. -
profileconnection/src/main/java/geniusweb/profileconnection/FileProfileConnector.java
r1 r2 10 10 11 11 import geniusweb.profile.Profile; 12 import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;13 12 14 13 /** … … 17 16 public class FileProfileConnector implements ProfileInterface { 18 17 private final static ObjectMapper jackson = new ObjectMapper(); 19 private final LinearAdditiveUtilitySpace profile;18 private final Profile profile; 20 19 21 20 /** … … 26 25 public FileProfileConnector(String filename) throws IOException { 27 26 Path path = new File(filename).toPath(); 28 String serialized = new String(Files.readAllBytes(path), 29 StandardCharsets.UTF_8); 30 profile = (LinearAdditiveUtilitySpace) jackson.readValue(serialized, 31 Profile.class); 27 String serialized = new String(Files.readAllBytes(path), StandardCharsets.UTF_8); 28 profile = jackson.readValue(serialized, Profile.class); 32 29 } 33 30 34 31 @Override 35 public LinearAdditiveUtilitySpace getProfile() {32 public Profile getProfile() { 36 33 return profile; 37 34 } -
protocol/pom.xml
r1 r2 56 56 <groupId>tudelft.utilities</groupId> 57 57 <artifactId>immutablelist</artifactId> 58 <version>1.0. 0</version>58 <version>1.0.1</version> 59 59 </dependency> 60 60 <dependency> -
simplerunner/src/test/java/geniusweb/simplerunner/SessionRunnerE2ETest.java
r1 r2 5 5 import java.nio.file.Files; 6 6 import java.nio.file.Paths; 7 import java.util.Arrays; 8 import java.util.Collection; 7 9 8 10 import org.junit.Before; 9 11 import org.junit.Test; 12 import org.junit.runner.RunWith; 13 import org.junit.runners.Parameterized; 14 import org.junit.runners.Parameterized.Parameters; 10 15 11 16 import com.fasterxml.jackson.databind.ObjectMapper; 12 17 13 18 import geniusweb.protocol.session.SessionSettings; 14 import geniusweb.simplerunner.ClassPathConnectionFactory;15 import geniusweb.simplerunner.NegoRunner;16 19 import tudelft.utilities.logging.ReportToLogger; 17 20 import tudelft.utilities.logging.Reporter; … … 22 25 * this module. 23 26 */ 27 @RunWith(Parameterized.class) 24 28 public class SessionRunnerE2ETest { 25 private static final String SESSION_SETTINGS = "src/test/resources/settings.json";26 29 private final ObjectMapper jackson = new ObjectMapper(); 27 30 private NegoRunner runner; 28 31 private Reporter logger = new ReportToLogger("test"); 32 private String filename; 33 34 @Parameters 35 public static Collection<Object[]> data() { 36 return Arrays.asList( 37 new Object[][] { { "src/test/resources/settings.json" }, { "src/test/resources/settings2.json" } }); 38 } 39 40 public SessionRunnerE2ETest(String file) { 41 this.filename = file; 42 } 29 43 30 44 @Before 31 45 public void before() throws IOException { 32 String serialized = new String( 33 Files.readAllBytes(Paths.get(SESSION_SETTINGS)), 34 StandardCharsets.UTF_8); 35 SessionSettings settings = jackson.readValue(serialized, 36 SessionSettings.class); 46 String serialized = new String(Files.readAllBytes(Paths.get(filename)), StandardCharsets.UTF_8); 47 SessionSettings settings = jackson.readValue(serialized, SessionSettings.class); 37 48 38 runner = new NegoRunner(settings, new ClassPathConnectionFactory(), 39 logger); 49 runner = new NegoRunner(settings, new ClassPathConnectionFactory(), logger); 40 50 41 51 } … … 52 62 @Test 53 63 public void runTestMainFunction() throws IOException { 54 NegoRunner.main(new String[] { SESSION_SETTINGS});64 NegoRunner.main(new String[] { filename }); 55 65 } 56 66 }
Note:
See TracChangeset
for help on using the changeset viewer.