bug3484 little changes

This commit is contained in:
Joshua Schulz committed 2017-11-15 16:16:53 +01:00
1 parent 497d021e12
commit 96f4dcedd8
2 files changed
+31 -13

No files matched your search

@@ -3,6 +3,7 @@ package com.sap.see.pairinglist.test;
import static org.junit.Assert.assertNotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.IntStream;
import org.junit.Before;
@@ -60,13 +61,12 @@ public class PairingListTemplateFactoryTest {
@Test
public void testGeneration() {
PairingListTemplateFactoryImpl factoryImpl = new PairingListTemplateFactoryImpl();
PairingListTemplate example1 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 18));
PairingListTemplate example2 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(45, 6, 18));
// PairingListTemplate example1 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(15, 3, 18));
// PairingListTemplate example2 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(45, 6, 18));
PairingListTemplate example3 = factoryImpl.getOrCreatePairingListTemplate(new PairingFrameProviderTest(10, 3, 30));
assertNotNull(example1);
assertNotNull(example2);
// assertNotNull(example1);
// assertNotNull(example2);
assertNotNull(example3);
/*
for(int[] row : example1.getPairingListTemplate()) {
System.out.println(Arrays.toString(row));
@@ -22,6 +22,8 @@ public class PairingListTemplateImpl implements PairingListTemplate{
ThreadPoolUtil.INSTANCE.getDefaultBackgroundTaskThreadPoolExecutor();
private final int maxConstantFlights;
private final int MAX_TASKS = 1024;
private final int seedsCount;
private final int iterations;
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider) {
@@ -31,7 +33,8 @@ public class PairingListTemplateImpl implements PairingListTemplate{
public PairingListTemplateImpl(PairingFrameProvider pairingFrameProvider, int iterations) {
this.iterations = iterations;
this.maxConstantFlights = (int) (pairingFrameProvider.getFlightsCount() * 0.9);
this.seedsCount = (int) ((Math.log(iterations))/(Math.log(pairingFrameProvider.getFlightsCount())));
this.maxConstantFlights = (int) ((Math.log(MAX_TASKS))/(Math.log(seedsCount)));
if (this.checkValues(pairingFrameProvider.getFlightsCount(), pairingFrameProvider.getGroupsCount(),
pairingFrameProvider.getCompetitorsCount())) {
@@ -139,7 +142,7 @@ public class PairingListTemplateImpl implements PairingListTemplate{
* @return int array of random competitors
*/
private int[] generateSeeds(int flights, int competitors) {
int[] seeds=new int[(int)(Math.log(iterations)/Math.log(flights)*0.5)];
int[] seeds=new int[seedsCount];
for(int x=0;x<seeds.length;x++){
int random=this.randomIntegerBetween(1, competitors);
while(this.contains(seeds, random)) {
@@ -327,27 +330,33 @@ public class PairingListTemplateImpl implements PairingListTemplate{
*/
protected int[][] create(int flights, int groups, int competitors, int iterationCount,
int[][] constantPLT, int[][] associations) {
int[][] seeds=new int[iterationCount][flights-maxConstantFlights];
int[][] bestPLT = new int[groups*flights][competitors / groups];
for (int m = 0; m < maxConstantFlights*groups; m++) {
System.arraycopy(constantPLT[m], 0, bestPLT[m], 0, constantPLT[0].length);
}
int[][] currentAssociations = new int[competitors][competitors];
double bestDev = Double.POSITIVE_INFINITY;
for(int[] row : seeds){
do{
for(int i=0;i<seeds[0].length;i++){
row[i]=this.randomIntegerBetween(1, competitors);
}
}while(!this.containsRow(seeds, row));
}
//TODO identify equal prefixes
for (int iteration = 0; iteration < iterationCount; iteration++) {
for(int[] row : seeds){
for (int m = 0; m < associations.length; m++) {
System.arraycopy(associations[m], 0, currentAssociations[m], 0, associations[0].length);
}
int[][] currentPLT = new int[groups * flights][competitors / groups];
for (int flightIndex = maxConstantFlights; flightIndex < flights; flightIndex++) {
for (int i=maxConstantFlights;i<maxConstantFlights+seeds[0].length;i++) {
//TODO: change competitor number
int[][] flightColumn = this.createFlight(flights, groups, competitors, currentAssociations, this.randomIntegerBetween(1, competitors));
int[][] flightColumn = this.createFlight(flights, groups, competitors, currentAssociations, row[i-maxConstantFlights]);
currentAssociations = this.getAssociationsFromPairingList(flightColumn, currentAssociations);
for (int m = 0; m < groups; m++) {
System.arraycopy(flightColumn[m], 0, currentPLT[(flightIndex * groups) + m], 0, competitors / groups);
System.arraycopy(flightColumn[m], 0, currentPLT[(i * groups) + m], 0, competitors / groups);
}
}
@@ -362,6 +371,15 @@ public class PairingListTemplateImpl implements PairingListTemplate{
return bestPLT;
}
private boolean containsRow(int[][] seeds, int[] row) {
for(int[] line : seeds){
if(Arrays.toString(row).equals(Arrays.toString(line))){
return true;
}
}
return false;
}
/**
* Returns a matrix that describes how often the competitors competed on a boat.
* The matrix has the following dimension: <code>assignmentAssociations[competitors][boats]</code>.