bug4469 added tolerance parameter in services, DTOs and PLT

This commit is contained in:
Raphael Müßeler committed 2018-06-04 12:32:45 +02:00
1 parent 175615790a
commit 6583ab359f
13 files changed
+49 -32

No files matched your search

@@ -10,6 +10,7 @@ public class PairingListTemplateDTO implements Serializable {
private int groupCount = 0;
private int competitorCount = 0;
private int flightMultiplier = 0;
private int tolerance = 0;
private int[][] pairingListTemplate;
private double quality;
@@ -18,27 +19,28 @@ public class PairingListTemplateDTO implements Serializable {
public PairingListTemplateDTO() { }
public PairingListTemplateDTO(int competitorCount, int flightMultiplier) {
this(0, 0, competitorCount, flightMultiplier, null, 0.0, /* selected flight names */ null);
this(0, 0, competitorCount, flightMultiplier, 0, null, 0.0, /* selected flight names */ null);
}
public PairingListTemplateDTO(int competitorCount, int flightMultiplier, int[][] pairingListTemplate, double quality) {
this(0, 0, competitorCount, flightMultiplier, pairingListTemplate, quality, /* selected flight names */ null);
this(0, 0, competitorCount, flightMultiplier, 0, pairingListTemplate, quality, /* selected flight names */ null);
}
public PairingListTemplateDTO(int competitorCount, int[][] pairingListTemplate, double quality) {
this(0, 0, competitorCount, 0, pairingListTemplate, quality, /* selected flight names */ null);
this(0, 0, competitorCount, 0, 0, pairingListTemplate, quality, /* selected flight names */ null);
}
public PairingListTemplateDTO(int flightCount, int groupCount, int competitorCount, int flightMultiplier, int[][] pairingListTemplate, double quality) {
this(flightCount, groupCount, competitorCount, flightMultiplier, pairingListTemplate, quality, /* selected flight names */ null);
public PairingListTemplateDTO(int flightCount, int groupCount, int competitorCount, int flightMultiplier, int tolerance, int[][] pairingListTemplate, double quality) {
this(flightCount, groupCount, competitorCount, flightMultiplier, tolerance, pairingListTemplate, quality, /* selected flight names */ null);
}
public PairingListTemplateDTO(int flightCount, int groupCount, int competitorCount, int flightMultiplier,
public PairingListTemplateDTO(int flightCount, int groupCount, int competitorCount, int flightMultiplier, int tolerance,
int[][] pairingListTemplate, double quality, Iterable<String> selectedFlightNames) {
this.flightCount = flightCount;
this.groupCount = groupCount;
this.competitorCount = competitorCount;
this.flightMultiplier = flightMultiplier;
this.tolerance = tolerance;
this.quality = quality;
this.pairingListTemplate = pairingListTemplate;
this.selectedFlightNames = selectedFlightNames;
@@ -56,6 +58,10 @@ public class PairingListTemplateDTO implements Serializable {
this.flightMultiplier = flightMultiplier;
}
public void setTolerance(int tolerance) {
this.tolerance = tolerance;
}
public void setSelectedFlightNames(Iterable<String> selectedFlightNames) {
this.selectedFlightNames = selectedFlightNames;
}
@@ -84,6 +90,10 @@ public class PairingListTemplateDTO implements Serializable {
return flightMultiplier;
}
public int getTolerance() {
return tolerance;
}
public Iterable<String> getSelectedFlightNames() {
return selectedFlightNames;
}
@@ -1067,7 +1067,7 @@ TrackedRaceChangedListener, LeaderboardsDisplayer {
BusyDialog busyDialog = new BusyDialog();
busyDialog.show();
sailingService.calculatePairingListTemplate(editedObject.getFlightCount(), editedObject.getGroupCount(),
editedObject.getCompetitorCount(), editedObject.getFlightMultiplier(),
editedObject.getCompetitorCount(), editedObject.getFlightMultiplier(), editedObject.getTolerance(),
new AsyncCallback<PairingListTemplateDTO>() {
@Override
public void onFailure(Throwable caught) {
@@ -211,7 +211,7 @@ public class PairingListCreationDialog extends DataEntryDialog<PairingListTempla
busyDialog.show();
try {
sailingService.calculatePairingListTemplate(template.getFlightCount(), template.getGroupCount(),
template.getCompetitorCount(), template.getFlightMultiplier(),
template.getCompetitorCount(), template.getFlightMultiplier(), template.getTolerance(),
new AsyncCallback<PairingListTemplateDTO>() {
@Override
@@ -127,6 +127,8 @@ public class PairingListCreationSetupDialog extends AbstractPairingListCreationS
}
dto.setSelectedFlightNames(selectedFlightNames);
dto.setFlightCount(selectedFlightNames.size());
// TODO get tolerance from ui component
dto.setTolerance(3);
return dto;
}
@@ -7,7 +7,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import com.google.gwt.user.client.rpc.RemoteService;
import com.sap.sailing.domain.abstractlog.Revokable;
import com.sap.sailing.domain.abstractlog.race.tracking.RaceLogDenoteForTrackingEvent;
@@ -742,7 +742,7 @@ public interface SailingService extends RemoteService, FileStorageManagementGwtS
* is thrown if the leaderboard is not found by name
*/
PairingListTemplateDTO calculatePairingListTemplate(final int flightCount, final int groupCount, final int competitorCount,
final int flightMultiplier)
final int flightMultiplier, final int tolerance)
throws NotFoundException, IllegalArgumentException;
PairingListDTO getPairingListFromTemplate(String leaderboardName, int flightMultiplier,
@@ -927,7 +927,7 @@ public interface SailingServiceAsync extends ServerInfoRetriever, FileStorageMan
* returns a {@link PairingListTemplateDTO}
*/
void calculatePairingListTemplate(final int flightCount, final int groupCount, final int competitorCount,
final int flightMultiplier, AsyncCallback<PairingListTemplateDTO> callback);
final int flightMultiplier, final int tolerance, AsyncCallback<PairingListTemplateDTO> callback);
/**
* Creates a {@link PairingListDTO} in which the competitors will be matched to a {@link PairingList} based on the
@@ -7259,10 +7259,10 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
@Override
public PairingListTemplateDTO calculatePairingListTemplate(final int flightCount, final int groupCount,
final int competitorCount, final int flightMultiplier) {
final int competitorCount, final int flightMultiplier, final int tolerance) {
PairingListTemplate template = getService().createPairingListTemplate(flightCount, groupCount, competitorCount,
flightMultiplier);
return new PairingListTemplateDTO(flightCount, groupCount, competitorCount, flightMultiplier,
flightMultiplier, tolerance);
return new PairingListTemplateDTO(flightCount, groupCount, competitorCount, flightMultiplier, tolerance,
template.getPairingListTemplate(), template.getQuality());
}
@@ -7280,7 +7280,7 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
}
}
PairingListTemplate pairingListTemplate = new PairingListTemplateImpl(templateDTO.getPairingListTemplate(),
templateDTO.getCompetitorCount(), templateDTO.getFlightMultiplier());
templateDTO.getCompetitorCount(), templateDTO.getFlightMultiplier(), templateDTO.getTolerance());
PairingList<RaceColumn, Fleet, Competitor, Boat> pairingList = getService()
.getPairingListFromTemplate(pairingListTemplate, leaderboardName, selectedRaces);
List<List<List<Pair<CompetitorDTO, BoatDTO>>>> result = new ArrayList<>();
@@ -828,7 +828,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
* @return calculated {@link PairingListTemplate}
*/
PairingListTemplate createPairingListTemplate(final int flightsCount, final int groupsCount,
final int competitorsCount, final int flightMultiplier);
final int competitorsCount, final int flightMultiplier, final int tolerance);
/**
* Matches the competitors of a leaderboard to the {@link PairingList}
@@ -4248,7 +4248,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
@Override
public PairingListTemplate createPairingListTemplate(final int flightsCount, final int groupsCount,
final int competitorsCount, final int flightMultiplier) {
final int competitorsCount, final int flightMultiplier, final int tolerance) {
PairingListTemplate template = pairingListTemplateFactory
.createPairingListTemplate(new PairingFrameProvider() {
@Override
@@ -4265,7 +4265,7 @@ public class RacingEventServiceImpl implements RacingEventService, ClearStateTes
public int getCompetitorsCount() {
return competitorsCount;
}
}, flightMultiplier);
}, flightMultiplier, tolerance);
return template;
}
@@ -79,9 +79,9 @@ public class PairingListTemplateFactoryTest {
PairingListTemplate example2 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(100, 6, 18));
PairingListTemplate example3 = factoryImpl.createPairingListTemplate(new PairingFrameProviderTest(10, 3, 30));
PairingListTemplate example4 = factoryImpl
.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3);
.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3, 0);
PairingListTemplate example5 = factoryImpl
.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3);
.createPairingListTemplate(new PairingFrameProviderTest(15, 3, 18), 3, 0);
assertNotNull(example1);
assertNotNull(example2);
assertNotNull(example3);
@@ -99,7 +99,7 @@ public class PairingListTemplateFactoryTest {
PairingListTemplateFactoryImpl factoryImpl = new PairingListTemplateFactoryImpl();
PairingListTemplate example = factoryImpl.createPairingListTemplate(
new PairingFrameProviderTest(flightCount, groupCount, competitorCount), multiplier);
new PairingFrameProviderTest(flightCount, groupCount, competitorCount), multiplier, 0);
for (int groupIndex = 0; groupIndex < flightCount * groupCount; groupIndex = groupIndex
+ (groupCount * (multiplier))) {
@@ -12,5 +12,5 @@ public interface PairingListTemplateFactory {
* @param flightMultiplier specifies how often the flights will be repeated within a single {@link PairingList}
* @return PairingListTemplate correlates with the new {@link PairingListTemplate}
*/
PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int flightMultiplier);
PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int flightMultiplier, int tolerance);
}
@@ -10,11 +10,11 @@ public class PairingListTemplateFactoryImpl implements PairingListTemplateFactor
@Override
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int flightMultiplier) {
return new PairingListTemplateImpl(pairingFrameProvider, flightMultiplier);
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int flightMultiplier, int tolerance) {
return new PairingListTemplateImpl(pairingFrameProvider, flightMultiplier, tolerance);
}
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int iterations, int flightMultiplier) {
public PairingListTemplate createPairingListTemplate(PairingFrameProvider pairingFrameProvider, int iterations, int flightMultiplier, int tolerance) {
return new PairingListTemplateImpl(pairingFrameProvider, iterations, flightMultiplier);
}
@@ -19,7 +19,7 @@ public class PairingListTemplateImpl implements PairingListTemplate {
private final Random random = new Random();
private final int[][] pairingListTemplate;
private final double standardDev;
private final int flightMultiplier;
private final int flightMultiplier, tolerance;
private final int dummies;
private final ExecutorService executorService = ThreadPoolUtil.INSTANCE
.getDefaultBackgroundTaskThreadPoolExecutor();
@@ -27,17 +27,22 @@ public class PairingListTemplateImpl implements PairingListTemplate {
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider) {
// setting iterations to default of 100.000
this(pairingFrameProvider, 100000, 0);
this(pairingFrameProvider, 100000, 0, 0);
}
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider, int flightMultiplier) {
// setting iterations to default of 100.000
this(pairingFrameProvider, 100000, flightMultiplier);
this(pairingFrameProvider, 100000, flightMultiplier, 0);
}
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider, int flighMultiplier, int tolerance) {
this(pairingFrameProvider, 100000, flighMultiplier, tolerance);
}
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider, int iterations, int flightMultiplier) {
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider, int iterations, int flightMultiplier, int tolerance) {
this.iterations = iterations;
this.flightMultiplier = flightMultiplier;
this.tolerance = tolerance;
if (this.checkValues(pairingFrameProvider.getFlightsCount(), pairingFrameProvider.getGroupsCount(),
pairingFrameProvider.getCompetitorsCount())) {
if (pairingFrameProvider.getCompetitorsCount() % pairingFrameProvider.getGroupsCount() != 0) {
@@ -70,7 +75,7 @@ public class PairingListTemplateImpl implements PairingListTemplate {
}
// Used to convert a TemplateDTO to PairingListTemplate
public PairingListTemplateImpl(int[][] template, int competitorsCount, int flightMultiplier) {
public PairingListTemplateImpl(int[][] template, int competitorsCount, int flightMultiplier, int tolerance) {
this.pairingListTemplate = template;
int groupCount = (int) (competitorsCount / this.pairingListTemplate[0].length + 1);
this.dummies = groupCount - (competitorsCount % groupCount);
@@ -94,6 +99,7 @@ public class PairingListTemplateImpl implements PairingListTemplate {
this.resetDummies(this.pairingListTemplate, competitorsCount + this.dummies);
this.iterations = 100000;
this.flightMultiplier = flightMultiplier;
this.tolerance = tolerance;
}
@Override
@@ -532,7 +538,6 @@ public class PairingListTemplateImpl implements PairingListTemplate {
* @return improved pairing list template
*/
protected int[][] improveCompetitorAllocations(int[][] pairingList, int flights, int groups, int competitors) {
int tolerance = (int) (competitors / groups);
int[][] assignments = this.getAssignmentAssociations(pairingList, new int[competitors][competitors / groups]);
double averageAssignments = flights / (competitors / groups);
for (int iteration = 0; iteration < 10; iteration++) {
@@ -560,7 +565,7 @@ public class PairingListTemplateImpl implements PairingListTemplate {
break;
} else {
int temp = 0;
int bestPosition = this.getBestPositionToChangeTo(groupAssignments[position[0]], prevPosition, tolerance);
int bestPosition = this.getBestPositionToChangeTo(groupAssignments[position[0]], prevPosition, this.tolerance);
temp = pairingList[zGroup][bestPosition];
pairingList[zGroup][bestPosition] = pairingList[zGroup][position[0]];
pairingList[zGroup][position[0]] = temp;