mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-11 05:12:43 +00:00
bug4469 added tolerance parameter in services, DTOs and PLT
This commit is contained in:
1 parent
175615790a
commit
6583ab359f
13 files changed
+49
-32
No files matched your search
+16
-6
@@ -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;
|
||||
}
|
||||
|
||||
+1
-1
@@ -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) {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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,
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+4
-4
@@ -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}
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -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);
|
||||
}
|
||||
+3
-3
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user