Index: bidspace/src/main/java/geniusweb/bidspace/FrequencyOpponentModel.java
===================================================================
--- bidspace/src/main/java/geniusweb/bidspace/FrequencyOpponentModel.java	(revision 25)
+++ 	(revision )
@@ -1,194 +1,0 @@
-package geniusweb.bidspace;
-
-import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import geniusweb.issuevalue.Bid;
-import geniusweb.issuevalue.Domain;
-import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.Value;
-import geniusweb.profile.utilityspace.NumberValueSetUtilities;
-
-/**
- * implements an {@link OpponentModel} by counting frequencies of bids placed by
- * the opponent.
- * <p>
- * NOTE: {@link NumberValue}s are also treated as 'discrete', so the frequency
- * of one value does not influence the influence the frequency of nearby values
- * (as you might expect as {@link NumberValueSetUtilities} is only affected by
- * the endpoints).
- *
- */
-public class FrequencyOpponentModel implements OpponentModel {
-
-	private static final int DECIMALS = 4; // accuracy of our computations.
-	private final Domain domain;
-	private final Map<String, Map<Value, Integer>> bidFrequencies;
-	private final BigDecimal totalBids;
-	private static int serial = 1; // counter for auto name generation
-
-	public FrequencyOpponentModel(Domain domain) {
-		// map with empth hashmap for each issue.
-		this(domain,
-				domain.getIssues().stream().collect(
-						Collectors.toMap(iss -> iss, iss -> new HashMap<>())),
-				BigDecimal.ZERO);
-	}
-
-	@Override
-	public BigDecimal getUtility(Bid bid) {
-		String err = domain.isComplete(bid);
-		if (err != null) {
-			throw new IllegalArgumentException(err);
-		}
-		if (totalBids == BigDecimal.ZERO) {
-			return BigDecimal.ONE;
-		}
-		BigDecimal sum = BigDecimal.ZERO;
-		// Assume all issues have equal weight.
-		for (String issue : domain.getIssues()) {
-			sum = sum.add(getFraction(issue, bid.getValue(issue)));
-		}
-		return sum.divide(new BigDecimal(bidFrequencies.size()), DECIMALS,
-				BigDecimal.ROUND_HALF_UP);
-	}
-
-	@Override
-	public String getName() {
-		return "FreqOppModel" + (serial++) + "For" + domain;
-	}
-
-	/**
-	 * 
-	 * @param issue the issue to check
-	 * @param value the value to check
-	 * @return the fraction of the total cases that bids contained given value
-	 *         for the issue.
-	 */
-	private BigDecimal getFraction(String issue, Value value) {
-		if (totalBids == BigDecimal.ZERO) {
-			return BigDecimal.ONE;
-		}
-		Integer freq = bidFrequencies.get(issue).get(value);
-		if (freq == null) {
-			freq = 0;
-		}
-		return new BigDecimal(freq).divide(totalBids, DECIMALS,
-				BigDecimal.ROUND_HALF_UP);
-	}
-
-	@Override
-	public Domain getDomain() {
-		return domain;
-	}
-
-	@Override
-	public OpponentModel update(Bid bid) {
-		String err = domain.isComplete(bid);
-		if (err != null) {
-			throw new IllegalArgumentException(err);
-		}
-		Map<String, Map<Value, Integer>> newFreqs = cloneMap(bidFrequencies);
-		for (String issue : domain.getIssues()) {
-			Map<Value, Integer> freqs = newFreqs.get(issue);
-			Value value = bid.getValue(issue);
-			Integer oldfreq = freqs.get(value);
-			if (oldfreq == null) {
-				oldfreq = 0;
-			}
-			freqs.put(value, oldfreq + 1);
-		}
-
-		return new FrequencyOpponentModel(domain, newFreqs,
-				totalBids.add(BigDecimal.ONE));
-	}
-
-	/**
-	 * internal constructor. Assumes the freqs keyset is equal to the available
-	 * issues.
-	 * 
-	 * @param domain the domain
-	 * @param freqs  the observed frequencies for all issue values. This map is
-	 *               assumed to be a fresh private-access only copy.
-	 * @param total  the total number of bids contained in the freqs map. This
-	 *               must be equal to the sum of the Integer values in the
-	 *               {@link #bidFrequencies} for each issue (this is not
-	 *               checked).
-	 */
-	private FrequencyOpponentModel(Domain domain,
-			Map<String, Map<Value, Integer>> freqs, BigDecimal total) {
-		if (domain == null) {
-			throw new NullPointerException("domain=null");
-		}
-		this.domain = domain;
-		this.bidFrequencies = freqs;
-		this.totalBids = total;
-	}
-
-	/**
-	 * 
-	 * @param freqs
-	 * @return deep copy of freqs map.
-	 */
-	private static Map<String, Map<Value, Integer>> cloneMap(
-			Map<String, Map<Value, Integer>> freqs) {
-		Map<String, Map<Value, Integer>> map = new HashMap<>();
-		for (String issue : freqs.keySet()) {
-			map.put(issue, new HashMap<Value, Integer>(freqs.get(issue)));
-		}
-		return map;
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result
-				+ ((bidFrequencies == null) ? 0 : bidFrequencies.hashCode());
-		result = prime * result + ((domain == null) ? 0 : domain.hashCode());
-		result = prime * result
-				+ ((totalBids == null) ? 0 : totalBids.hashCode());
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		FrequencyOpponentModel other = (FrequencyOpponentModel) obj;
-		if (bidFrequencies == null) {
-			if (other.bidFrequencies != null)
-				return false;
-		} else if (!bidFrequencies.equals(other.bidFrequencies))
-			return false;
-		if (domain == null) {
-			if (other.domain != null)
-				return false;
-		} else if (!domain.equals(other.domain))
-			return false;
-		if (totalBids == null) {
-			if (other.totalBids != null)
-				return false;
-		} else if (!totalBids.equals(other.totalBids))
-			return false;
-		return true;
-	}
-
-	@Override
-	public String toString() {
-		return "FrequencyOpponentModel[" + totalBids + "," + bidFrequencies
-				+ "]";
-	}
-
-	@Override
-	public Bid getReservationBid() {
-		throw new UnsupportedOperationException();
-	}
-
-}
Index: bidspace/src/main/java/geniusweb/bidspace/OpponentModel.java
===================================================================
--- bidspace/src/main/java/geniusweb/bidspace/OpponentModel.java	(revision 25)
+++ 	(revision )
@@ -1,18 +1,0 @@
-package geniusweb.bidspace;
-
-import geniusweb.issuevalue.Bid;
-import geniusweb.profile.utilityspace.UtilitySpace;
-
-/**
- * An opponentmodel estimates a {@link UtilitySpace} from received opponent
- * bids.
- */
-public interface OpponentModel extends UtilitySpace {
-	/**
-	 *
-	 * @param bid the next bid that was received
-	 * @return a new {@link OpponentModel} that takes the next bid into account.
-	 */
-	OpponentModel update(Bid bid);
-
-}
Index: bidspace/src/test/java/geniusweb/bidspace/FrequencyOppModelTest.java
===================================================================
--- bidspace/src/test/java/geniusweb/bidspace/FrequencyOppModelTest.java	(revision 25)
+++ 	(revision )
@@ -1,138 +1,0 @@
-package geniusweb.bidspace;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Test;
-
-import geniusweb.bidspace.FrequencyOpponentModel;
-import geniusweb.bidspace.OpponentModel;
-import geniusweb.issuevalue.Bid;
-import geniusweb.issuevalue.DiscreteValue;
-import geniusweb.issuevalue.DiscreteValueSet;
-import geniusweb.issuevalue.Domain;
-import geniusweb.issuevalue.NumberValue;
-import geniusweb.issuevalue.NumberValueSet;
-import geniusweb.issuevalue.Value;
-import geniusweb.issuevalue.ValueSet;
-import tudelft.utilities.junit.GeneralTests;
-
-public class FrequencyOppModelTest extends GeneralTests<FrequencyOpponentModel> {
-	private final static String ISS1 = "issue1";
-	private final static String ISS2 = "issue2";
-	private static final DiscreteValue I1V1 = new DiscreteValue("i1v1");
-	private static final DiscreteValue I1V2 = new DiscreteValue("i1v2");
-	private static final DiscreteValue I1V2b = new DiscreteValue("i1v2b");
-
-	private static Domain domain, domain2, domain3;
-	private static FrequencyOpponentModel oppModel1, oppModel1b, oppModel2, oppModel3, oppModel4;
-
-	private final static List<List<Bid>> list = new LinkedList<>();
-
-	private final static Bid bid1, bid2, bid3;
-	private static final BigDecimal HALF = new BigDecimal("0.5");
-
-	static {
-		Map<String, ValueSet> issues = new HashMap<>();
-		Collection<DiscreteValue> discretevalues1 = new LinkedList<>();
-		discretevalues1.add(I1V1);
-		discretevalues1.add(I1V2);
-		DiscreteValueSet values1 = new DiscreteValueSet(discretevalues1);
-		issues.put(ISS1, values1);
-		NumberValueSet values2 = new NumberValueSet(BigDecimal.ZERO, BigDecimal.TEN, new BigDecimal("0.3"));
-		issues.put(ISS2, values2);
-		domain = new Domain("test", issues);
-		domain2 = new Domain("test2", issues);
-
-		// slightly different issue1
-		issues = new HashMap<>();
-		discretevalues1 = new LinkedList<>();
-		discretevalues1.add(I1V1);
-		discretevalues1.add(I1V2b);
-		values1 = new DiscreteValueSet(discretevalues1);
-		issues.put(ISS1, values1);
-		values2 = new NumberValueSet(BigDecimal.ZERO, BigDecimal.TEN, new BigDecimal("0.3"));
-		issues.put(ISS2, values2);
-		domain3 = new Domain("test", issues);
-
-		// all bids are for domain
-		Map<String, Value> issuevalues = new HashMap<>();
-		issuevalues.put(ISS1, I1V1);
-		issuevalues.put(ISS2, new NumberValue(new BigDecimal("1.2")));
-		bid1 = new Bid(issuevalues);
-
-		issuevalues.put(ISS1, I1V1);
-		issuevalues.put(ISS2, new NumberValue(new BigDecimal("1.5")));
-		bid2 = new Bid(issuevalues);
-
-		issuevalues.put(ISS1, I1V2);
-		issuevalues.put(ISS2, new NumberValue(new BigDecimal("1.5")));
-		bid3 = new Bid(issuevalues);
-
-		oppModel1 = new FrequencyOpponentModel(domain);
-		oppModel1b = new FrequencyOpponentModel(domain);
-		oppModel2 = new FrequencyOpponentModel(domain2);
-		oppModel3 = new FrequencyOpponentModel(domain3);
-		oppModel4 = (FrequencyOpponentModel) oppModel3.update(bid1);
-
-	}
-
-	@Override
-	public List<List<FrequencyOpponentModel>> getGeneralTestData() {
-		return Arrays.asList(Arrays.asList(oppModel1, oppModel1b), Arrays.asList(oppModel2), Arrays.asList(oppModel3),
-				Arrays.asList(oppModel4));
-	}
-
-	@Override
-	public List<String> getGeneralTestStrings() {
-		return Arrays.asList("FrequencyOpponentModel\\[0,\\{issue2=\\{\\}, issue1=\\{\\}\\}\\]",
-				"FrequencyOpponentModel\\[0,\\{issue2=\\{\\}, issue1=\\{\\}\\}\\]",
-				"FrequencyOpponentModel\\[0,\\{issue2=\\{\\}, issue1=\\{\\}\\}\\]",
-				"FrequencyOpponentModel\\[1,\\{issue2=\\{1.2=1\\}, issue1=\\{\"i1v1\"=1\\}\\}\\]");
-	}
-
-	@Test(expected = NullPointerException.class)
-	public void smokeNullTest() {
-		new FrequencyOpponentModel(null);
-	}
-
-	@Test
-	public void smokeTest() {
-		new FrequencyOpponentModel(domain);
-	}
-
-	@Test
-	public void testEmptyModel() {
-		FrequencyOpponentModel oppModel = new FrequencyOpponentModel(domain);
-		assertEquals(BigDecimal.ONE, oppModel.getUtility(bid1));
-		assertEquals(BigDecimal.ONE, oppModel.getUtility(bid2));
-	}
-
-	@Test
-	public void testUpdate() {
-		OpponentModel oppModel = oppModel1.update(bid1);
-		assertTrue(BigDecimal.ONE.compareTo(oppModel.getUtility(bid1)) == 0);
-		assertTrue(BigDecimal.ZERO.compareTo(oppModel.getUtility(bid3)) == 0);
-		// bid2 has 1 of 2 issue values same as bid1.
-		assertTrue(HALF.compareTo(oppModel.getUtility(bid2)) == 0);
-	}
-
-	@Test
-	public void testUpdate2() {
-		// bid1 and bid2 both want I1V1. They differ on the number value.
-		// bid3 wants I1V2 but does have the number value from bid2
-		OpponentModel oppModel = oppModel1.update(bid1).update(bid2);
-		assertTrue(new BigDecimal("0.75").compareTo(oppModel.getUtility(bid1)) == 0);
-		assertTrue(new BigDecimal("0.75").compareTo(oppModel.getUtility(bid2)) == 0);
-		assertTrue(new BigDecimal("0.25").compareTo(oppModel.getUtility(bid3)) == 0);
-	}
-
-}
