Skip to content

Commit

Permalink
added ensembly
Browse files Browse the repository at this point in the history
  • Loading branch information
Mintas committed Mar 3, 2016
1 parent 442f61a commit d2f3fe4
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import model.Purchase;
import model.Purchases;
import service.JackSparrowHelper;
import service.JackSparrowHelperEnsemble;
import service.JackSparrowHelperGreedy;
import service.JackSparrowHelperWithSolver;

import static java.util.Arrays.asList;

/**
* Created by SBT-Kovalev-DA on 24.02.2016.
*/
Expand All @@ -14,13 +17,17 @@ public static void main(String[] args) {
JackSparrowHelper jackSparrowHelperOld = new JackSparrowHelperGreedy(new CSVCommodityParserImpl(";"));
JackSparrowHelper jackSparrowHelper = new JackSparrowHelperWithSolver(new CSVCommodityParserImpl(";"), new GreedyBoundedKnapsackSolver());

JackSparrowHelper jackSparrowHelperEnsemble = new JackSparrowHelperEnsemble(asList(jackSparrowHelper, jackSparrowHelperOld));

printSolution(jackSparrowHelperOld);
System.out.println();
printSolution(jackSparrowHelper);
System.out.println();
printSolution(jackSparrowHelperEnsemble);
}

private static void printSolution(JackSparrowHelper jackSparrowHelper) {
Purchases abr = jackSparrowHelper.helpJackSparrow("C:\\Users\\SBT-Kovalev-DA\\Downloads\\pirates\\sources.csv", 222);
Purchases abr = jackSparrowHelper.helpJackSparrow("C:\\Users\\SBT-Kovalev-DA\\Downloads\\pirates\\sources.csv", 353);

System.out.println(abr.calculateAveragePrice() + " REAL AVG: " + getAvg(abr));
System.out.println("amount: " + getGallons(abr));
Expand Down
1 change: 1 addition & 0 deletions src/model/Purchase.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package model;

public class Purchase {
public static final Purchase HEAVY = new Purchase("", Integer.MAX_VALUE, Double.MAX_VALUE);
private final String sourceName;
private final Integer numberOfGallons;
private final Double priceOfGallon;
Expand Down
18 changes: 18 additions & 0 deletions src/model/Purchases.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

import java.util.Set;

import static java.util.Collections.singleton;
import static model.Purchase.HEAVY;

public class Purchases {
private final int requestedNumberOfGallons;
private final Set<Purchase> purchases;
Expand All @@ -11,6 +14,10 @@ public Purchases(int requestedNumberOfGallons, Set<Purchase> purchases) {
this.purchases = purchases;
}

public static Purchases heavyEmpty(int requestedNumberOfGallons){
return new Purchases(requestedNumberOfGallons, singleton(HEAVY));
}

public Double calculateAveragePrice() {
double totalSum = 0;
for (Purchase purchase : getPurchases()) {
Expand All @@ -25,6 +32,17 @@ public Integer getRequestedNumberOfGallons() {
return requestedNumberOfGallons;
}

public double getAvg() {
return getTotalPrice()/getGallons();
}

public int getGallons( ) {
return purchases.stream().mapToInt(Purchase::getNumberOfGallons).sum();
}
public double getTotalPrice( ) {
return purchases.stream().mapToDouble(Purchase::getTotalPrice).sum();
}

public Set<Purchase> getPurchases() {
return purchases;
}
Expand Down
37 changes: 37 additions & 0 deletions src/service/JackSparrowHelperEnsemble.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package service;

import model.Purchases;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

import static java.util.Comparator.comparing;
import static java.util.Comparator.comparingDouble;
import static model.Purchases.heavyEmpty;

/**
* Created by SBT-Kovalev-DA on 03.03.2016.
*/
public class JackSparrowHelperEnsemble implements JackSparrowHelper {
private final List<JackSparrowHelper> helpers;

public JackSparrowHelperEnsemble(List<JackSparrowHelper> helpers) {
this.helpers = helpers;
}

@Override
public Purchases helpJackSparrow(String pathToPrices, int numberOfGallons) {
List<Purchases> candidates = helpers.stream()
.map(h -> h.helpJackSparrow(pathToPrices, numberOfGallons))
.collect(Collectors.toList());
return candidates.stream()
.reduce(heavyEmpty(numberOfGallons), this::findBest);
}

private Purchases findBest(Purchases first, Purchases second) {
Comparator<Purchases> purchasesComparator = comparingDouble(Purchases::getTotalPrice)
.thenComparing(comparing(Purchases::getGallons).reversed());
return purchasesComparator.compare(first, second) <= 0 ? first : second;
}
}

0 comments on commit d2f3fe4

Please sign in to comment.