http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java deleted file mode 100644 index 09b7327..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CategoryWeightFunction.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ExponentialPDF; -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ProbabilityDensityFunction; -import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.ConditionalWeightFunction; -import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.WeightFunction; - -public class CategoryWeightFunction implements ConditionalWeightFunction<Double, Double> -{ - private final ProbabilityDensityFunction<Double> pdf; - - public CategoryWeightFunction(double averagePurchaseTriggerTime) - { - double lambda = 1.0 / averagePurchaseTriggerTime; - pdf = new ExponentialPDF(lambda); - } - - @Override - public double weight(Double exhaustionTime, Double transactionTime) - { - double remainingTime = Math.max(0.0, exhaustionTime - transactionTime); - return pdf.probability(remainingTime); - } -}
http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java deleted file mode 100644 index f0f538a..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventory.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.Constants; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Maps; - -public class CustomerInventory -{ - final private ImmutableMap<String, ProductCategoryInventory> productCategoryInventories; - - public CustomerInventory(Map<String, ProductCategoryInventory> productCategoryInventories) - { - this.productCategoryInventories = ImmutableMap.copyOf(productCategoryInventories); - } - - public void simulatePurchase(double time, Product product) throws Exception - { - String category = product.getFieldValueAsString(Constants.PRODUCT_CATEGORY); - ProductCategoryInventory inventory = productCategoryInventories.get(category); - inventory.simulatePurchase(time, product); - } - - public ImmutableMap<String, Double> getInventoryAmounts(double time) - { - Map<String, Double> amounts = Maps.newHashMap(); - for(String category : productCategoryInventories.keySet()) - { - double amount = productCategoryInventories.get(category).findRemainingAmount(time); - amounts.put(category, amount); - } - - return ImmutableMap.copyOf(amounts); - } - - public ImmutableMap<String, Double> getExhaustionTimes() - { - Map<String, Double> times = Maps.newHashMap(); - for(String category : productCategoryInventories.keySet()) - { - double time = productCategoryInventories.get(category).findExhaustionTime(); - times.put(category, time); - } - - return ImmutableMap.copyOf(times); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java deleted file mode 100644 index 80ed944..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerInventoryBuilder.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; - -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -public class CustomerInventoryBuilder -{ - final private List<ProductCategory> productCategories; - final private SeedFactory seedFactory; - final private CustomerTransactionParameters parameters; - - public CustomerInventoryBuilder(CustomerTransactionParameters parameters, - SeedFactory seedFactory) - { - productCategories = Lists.newArrayList(); - this.seedFactory = seedFactory; - this.parameters = parameters; - } - - public void addProductCategory(ProductCategory productCategory) - { - this.productCategories.add(productCategory); - } - - public void addAllProductCategories(Collection<ProductCategory> productCategories) - { - this.productCategories.addAll(productCategories); - } - - public CustomerInventory build() - { - Map<String, ProductCategoryInventory> inventories = Maps.newHashMap(); - for(ProductCategory productCategory : productCategories) - { - if(parameters.countPetsBySpecies(productCategory.getApplicableSpecies()) > 0) - { - ProductCategoryInventory inventory = new ProductCategoryInventory(productCategory, - parameters, seedFactory); - inventories.put(productCategory.getCategoryLabel(), inventory); - } - } - - return new CustomerInventory(inventories); - } -} - - http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java deleted file mode 100644 index 9267635..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParameters.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.Collection; -import java.util.Set; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; - -import com.google.common.collect.ImmutableMultiset; -import com.google.common.collect.Multiset; -import com.google.common.collect.Sets; - -public class CustomerTransactionParameters -{ - final ImmutableMultiset<PetSpecies> petCounts; - final double averageTransactionTriggerTime; - final double averagePurchaseTriggerTime; - - public CustomerTransactionParameters(Multiset<PetSpecies> petCounts, - double averageTransactionTriggerTime, double averagePurchaseTriggerTime) - { - this.petCounts = ImmutableMultiset.copyOf(petCounts); - this.averageTransactionTriggerTime = averageTransactionTriggerTime; - this.averagePurchaseTriggerTime = averagePurchaseTriggerTime; - } - - public double getAverageTransactionTriggerTime() - { - return averageTransactionTriggerTime; - } - - public double getAveragePurchaseTriggerTime() - { - return averagePurchaseTriggerTime; - } - - public int countPetsBySpecies(PetSpecies species) - { - return petCounts.count(species); - } - - public int countPetsBySpecies(Collection<PetSpecies> allSpecies) - { - int count = 0; - Set<PetSpecies> speciesSet = Sets.newHashSet(allSpecies); - for(PetSpecies species : speciesSet) - { - count += countPetsBySpecies(species); - } - - return count; - } - - public int countPets() - { - return petCounts.size(); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java deleted file mode 100644 index 9adfa4c..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersBuilder.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; - -import com.google.common.collect.HashMultiset; -import com.google.common.collect.Multiset; - -public class CustomerTransactionParametersBuilder -{ - private Multiset<PetSpecies> petCounts; - private double averageTransactionTriggerTime; - private double averagePurchaseTriggerTime; - - public CustomerTransactionParametersBuilder() - { - this.petCounts = HashMultiset.create(); - this.averagePurchaseTriggerTime = 0.0; - this.averageTransactionTriggerTime = 0.0; - } - - public void addPet(PetSpecies species) - { - this.petCounts.add(species); - } - - public void setAverageTransactionTriggerTime( - double averageTransactionTriggerTime) - { - this.averageTransactionTriggerTime = averageTransactionTriggerTime; - } - - public void setAveragePurchaseTriggerTime(double averagePurchaseTriggerTime) - { - this.averagePurchaseTriggerTime = averagePurchaseTriggerTime; - } - - public CustomerTransactionParameters build() - { - return new CustomerTransactionParameters(this.petCounts, - this.averageTransactionTriggerTime, - this.averagePurchaseTriggerTime); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java deleted file mode 100644 index 8495fd9..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSampler.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -public class CustomerTransactionParametersSampler implements Sampler<CustomerTransactionParameters> -{ - final private Sampler<Integer> nPetsSampler; - final private Sampler<PetSpecies> petSpeciesSampler; - final private Sampler<Double> purchaseTriggerTimeSampler; - final private Sampler<Double> transactionTriggerTimeSampler; - - public CustomerTransactionParametersSampler(Sampler<Integer> nPetsSampler, - Sampler<PetSpecies> petSpeciesSampler, - Sampler<Double> purchaseTriggerTimeSampler, - Sampler<Double> transactionTriggerTimeSampler) - { - - this.nPetsSampler = nPetsSampler; - this.petSpeciesSampler = petSpeciesSampler; - this.purchaseTriggerTimeSampler = purchaseTriggerTimeSampler; - this.transactionTriggerTimeSampler = transactionTriggerTimeSampler; - } - - protected void generatePets(CustomerTransactionParametersBuilder builder) throws Exception - { - int nPets = this.nPetsSampler.sample(); - - for(int i = 0; i < nPets; i++) - { - PetSpecies species = this.petSpeciesSampler.sample(); - builder.addPet(species); - } - } - - public CustomerTransactionParameters sample() throws Exception - { - CustomerTransactionParametersBuilder builder = new CustomerTransactionParametersBuilder(); - - this.generatePets(builder); - builder.setAveragePurchaseTriggerTime(this.purchaseTriggerTimeSampler.sample()); - builder.setAverageTransactionTriggerTime(this.transactionTriggerTimeSampler.sample()); - - return builder.build(); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java deleted file mode 100644 index 249a456..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/CustomerTransactionParametersSamplerBuilder.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.Arrays; - -import org.apache.bigtop.bigpetstore.datagenerator.Constants; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.PetSpecies; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.BoundedMultiModalGaussianSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.UniformIntSampler; - -public class CustomerTransactionParametersSamplerBuilder -{ - final private SeedFactory seedFactory; - - public CustomerTransactionParametersSamplerBuilder(SeedFactory seedFactory) - { - this.seedFactory = seedFactory; - } - - public Sampler<CustomerTransactionParameters> build() - { - Sampler<Integer> nPetsSampler = new UniformIntSampler(Constants.MIN_PETS, Constants.MAX_PETS, seedFactory); - - Sampler<PetSpecies> petSpeciesSampler = RouletteWheelSampler.createUniform(Arrays.asList(PetSpecies.values()), seedFactory); - - Sampler<Double> transactionTriggerTimeSampler = new BoundedMultiModalGaussianSampler(Constants.TRANSACTION_TRIGGER_TIME_GAUSSIANS, - Constants.TRANSACTION_TRIGGER_TIME_MIN, Constants.TRANSACTION_TRIGGER_TIME_MAX, - seedFactory); - - Sampler<Double> purchaseTriggerTimeSampler = new BoundedMultiModalGaussianSampler(Constants.PURCHASE_TRIGGER_TIME_GAUSSIANS, - Constants.PURCHASE_TRIGGER_TIME_MIN, Constants.PURCHASE_TRIGGER_TIME_MAX, - seedFactory); - - return new CustomerTransactionParametersSampler(nPetsSampler, petSpeciesSampler, - transactionTriggerTimeSampler, purchaseTriggerTimeSampler); - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java deleted file mode 100644 index 8d43b82..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryInventory.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.Constants; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; - -public class ProductCategoryInventory -{ - private ProductCategoryUsageTrajectory trajectory; - private ProductCategoryUsageSimulator simulator; - - public ProductCategoryInventory(ProductCategory productCategory, CustomerTransactionParameters parameters, - SeedFactory seedFactory) - { - - double amountUsedAverage = productCategory.getBaseAmountUsedAverage() * parameters.countPetsBySpecies(productCategory.getApplicableSpecies()); - double amountUsedVariance = productCategory.getBaseAmountUsedVariance() * parameters.countPetsBySpecies(productCategory.getApplicableSpecies()); - - trajectory = new ProductCategoryUsageTrajectory(0.0, 0.0); - simulator = new ProductCategoryUsageSimulator(productCategory.getDailyUsageRate(), - amountUsedAverage, amountUsedVariance, seedFactory); - } - - public void simulatePurchase(double time, Product product) throws Exception - { - double amountPurchased = product.getFieldValueAsDouble(Constants.PRODUCT_QUANTITY); - - double amountRemainingBeforePurchase = trajectory.amountAtTime(time); - - trajectory = simulator.simulate(time, amountRemainingBeforePurchase + amountPurchased); - } - - public double findExhaustionTime() - { - return trajectory.getLastTime(); - } - - public double findRemainingAmount(double time) - { - return trajectory.amountAtTime(time); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java deleted file mode 100644 index b09d395..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageSimulator.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ExponentialSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.GaussianSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -public class ProductCategoryUsageSimulator -{ - final private double amountUsedAverage; - final private double amountUsedVariance; - - final private Sampler<Double> timestepSampler; - final private Sampler<Double> R; - - public ProductCategoryUsageSimulator(double dailyUsageRate, double amountUsedAverage, - double amountUsedVariance, SeedFactory seedFactory) - { - this.amountUsedAverage = amountUsedAverage; - this.amountUsedVariance = amountUsedVariance; - - timestepSampler = new ExponentialSampler(dailyUsageRate, seedFactory); - R = new GaussianSampler(0.0, 1.0, seedFactory); - } - - private void step(ProductCategoryUsageTrajectory trajectory) throws Exception - { - // given in days since last usage - double timestep = timestepSampler.sample(); - - double r = R.sample(); - - // given in units per day - double usageAmount = this.amountUsedAverage * timestep + - Math.sqrt(this.amountUsedVariance * timestep) * r; - - // can't use a negative amount - usageAmount = Math.max(usageAmount, 0.0); - - double remainingAmount = Math.max(0.0, trajectory.getLastAmount() - usageAmount); - double time = trajectory.getLastTime() + timestep; - - trajectory.append(time, remainingAmount); - } - - public ProductCategoryUsageTrajectory simulate(double initialTime, double initialAmount) throws Exception - { - ProductCategoryUsageTrajectory trajectory = new ProductCategoryUsageTrajectory(initialTime, initialAmount); - - while(trajectory.getLastAmount() > 0.0) - { - step(trajectory); - } - - return trajectory; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java deleted file mode 100644 index f3c20c7..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProductCategoryUsageTrajectory.java +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.List; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.Lists; - -public class ProductCategoryUsageTrajectory -{ - final private List<Pair<Double, Double>> trajectory; - - public ProductCategoryUsageTrajectory(double initialTime, double initialAmount) - { - trajectory = Lists.newArrayList(); - this.append(initialTime, initialAmount); - } - - public void append(double time, double amount) - { - trajectory.add(Pair.of(time, amount)); - } - - public double getLastAmount() - { - return trajectory.get(trajectory.size() - 1).getValue(); - } - - public double getLastTime() - { - return trajectory.get(trajectory.size() - 1).getKey(); - } - - public double amountAtTime(double time) - { - Pair<Double, Double> previous = null; - for(Pair<Double, Double> entry : trajectory) - { - if(entry.getKey() > time) - break; - previous = entry; - } - - if(previous == null) - return 0.0; - - return previous.getValue(); - } - - public Pair<Double, Double> getStep(int idx) - { - return trajectory.get(idx); - } - - public int size() - { - return trajectory.size(); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java deleted file mode 100644 index 3fa2ef9..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/ProposedPurchaseTimeSampler.java +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -public class ProposedPurchaseTimeSampler implements Sampler<Double> -{ - final CustomerInventory customerInventory; - final Sampler<Double> arrivalTimeSampler; - - public ProposedPurchaseTimeSampler(CustomerInventory customerInventory, - Sampler<Double> arrivalTimeSampler) - { - this.customerInventory = customerInventory; - this.arrivalTimeSampler = arrivalTimeSampler; - } - - protected double categoryProposedTime(double exhaustionTime) throws Exception - { - return Math.max(exhaustionTime - arrivalTimeSampler.sample(), 0.0); - } - - public Double sample() throws Exception - { - double minProposedTime = Double.MAX_VALUE; - for(Double exhaustionTime : this.customerInventory.getExhaustionTimes().values()) - { - double proposedTime = this.categoryProposedTime(exhaustionTime); - minProposedTime = Math.min(proposedTime, minProposedTime); - } - - return minProposedTime; - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java deleted file mode 100644 index 83924e3..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesHiddenMarkovModel.java +++ /dev/null @@ -1,108 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.List; -import java.util.Map; - -import org.apache.bigtop.bigpetstore.datagenerator.Constants; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.RouletteWheelSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.ConditionalWeightFunction; - -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; - -public class TransactionPurchasesHiddenMarkovModel implements ConditionalSampler<List<Product>, Double> -{ - - protected final static String STOP_STATE = "STOP"; - - final ConditionalSampler<Product, String> purchasingProcesses; - final ConditionalWeightFunction<Double, Double> categoryWF; - final CustomerInventory inventory; - - final SeedFactory seedFactory; - - public TransactionPurchasesHiddenMarkovModel(ConditionalSampler<Product, String> purchasingProcesses, - ConditionalWeightFunction<Double, Double> categoryWF, CustomerInventory inventory, - SeedFactory seedFactory) - { - this.purchasingProcesses = purchasingProcesses; - this.inventory = inventory; - this.categoryWF = categoryWF; - - this.seedFactory = seedFactory; - } - - protected String chooseCategory(double transactionTime, int numPurchases) throws Exception - { - ImmutableMap<String, Double> exhaustionTimes = this.inventory.getExhaustionTimes(); - Map<String, Double> weights = Maps.newHashMap(); - - for(Map.Entry<String, Double> entry : exhaustionTimes.entrySet()) - { - String category = entry.getKey(); - double weight = this.categoryWF.weight(entry.getValue(), transactionTime); - weights.put(category, weight); - } - - if(numPurchases > 0) - { - weights.put(STOP_STATE, Constants.STOP_CATEGORY_WEIGHT); - } - - Sampler<String> sampler = RouletteWheelSampler.create(weights, seedFactory); - - return sampler.sample(); - } - - protected Product chooseProduct(String category) throws Exception - { - return this.purchasingProcesses.sample(category); - } - - public List<Product> sample(Double transactionTime) throws Exception - { - int numPurchases = 0; - - List<Product> purchasedProducts = Lists.newArrayList(); - - String category; - while(true) - { - category = this.chooseCategory(transactionTime, numPurchases); - - if(category.equals(STOP_STATE)) - { - break; - } - - Product product = this.chooseProduct(category); - - purchasedProducts.add(product); - - this.inventory.simulatePurchase(transactionTime, product); - numPurchases += 1; - } - - return purchasedProducts; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java deleted file mode 100644 index 4400151..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionPurchasesSamplerBuilder.java +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.Collection; -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.wfs.ConditionalWeightFunction; -import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingModel; -import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingProcesses; - -public class TransactionPurchasesSamplerBuilder -{ - final SeedFactory seedFactory; - final Collection<ProductCategory> productCategories; - final PurchasingModel purchasingProfile; - - protected CustomerTransactionParameters transactionParameters; - protected CustomerInventory inventory; - - public TransactionPurchasesSamplerBuilder(Collection<ProductCategory> productCategories, - PurchasingModel purchasingProfile, - SeedFactory seedFactory) - { - this.seedFactory = seedFactory; - this.productCategories = productCategories; - this.purchasingProfile = purchasingProfile; - } - - public void setTransactionParameters( - CustomerTransactionParameters transactionParameters) - { - this.transactionParameters = transactionParameters; - } - - public void setInventory(CustomerInventory inventory) - { - this.inventory = inventory; - } - - public ConditionalSampler<List<Product>, Double> build() throws Exception - { - PurchasingProcesses processes = purchasingProfile.buildProcesses(seedFactory); - - ConditionalWeightFunction<Double, Double> categoryWF = - new CategoryWeightFunction(transactionParameters.getAveragePurchaseTriggerTime()); - - ConditionalSampler<List<Product>, Double> sampler = new TransactionPurchasesHiddenMarkovModel(processes, - categoryWF, inventory, this.seedFactory); - - return sampler; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java deleted file mode 100644 index b19ae38..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSampler.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Transaction; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; - -public class TransactionSampler implements Sampler<Transaction> -{ - private final Sampler<Double> timeSampler; - private final ConditionalSampler<List<Product>, Double> purchasesSampler; - private final Sampler<Integer> idSampler; - private final Customer customer; - - public TransactionSampler(Customer customer, Sampler<Double> timeSampler, - ConditionalSampler<List<Product>, Double> purchasesSampler, - Sampler<Integer> idSampler) - { - this.timeSampler = timeSampler; - this.customer = customer; - this.purchasesSampler = purchasesSampler; - this.idSampler = idSampler; - } - - - public Transaction sample() throws Exception - { - Double transactionTime = timeSampler.sample(); - List<Product> purchase = purchasesSampler.sample(transactionTime); - Integer id = idSampler.sample(); - - Transaction transaction = new Transaction(id, customer, customer.getStore(), - transactionTime, purchase); - - return transaction; - } - -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java deleted file mode 100644 index 748b4db..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionSamplerBuilder.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import java.util.Collection; -import java.util.List; - -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Customer; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Product; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.Transaction; -import org.apache.bigtop.bigpetstore.datagenerator.datamodels.inputs.ProductCategory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ConditionalSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.SequenceSampler; -import org.apache.bigtop.bigpetstore.datagenerator.generators.purchase.PurchasingModel; - -public class TransactionSamplerBuilder -{ - private final Collection<ProductCategory> productCategories; - private final Customer customer; - private final PurchasingModel purchasingProfile; - private final SeedFactory seedFactory; - - CustomerTransactionParameters parameters; - CustomerInventory inventory; - - public TransactionSamplerBuilder(Collection<ProductCategory> productCategories, - Customer customer, - PurchasingModel purchasingProfile, - SeedFactory seedFactory) throws Exception - { - this.customer = customer; - this.seedFactory = seedFactory; - this.purchasingProfile = purchasingProfile; - this.productCategories = productCategories; - } - - protected void buildParameters() throws Exception - { - CustomerTransactionParametersSamplerBuilder builder = new CustomerTransactionParametersSamplerBuilder(seedFactory); - parameters = builder.build().sample(); - } - - protected ConditionalSampler<List<Product>, Double> buildPurchasesSampler() throws Exception - { - TransactionPurchasesSamplerBuilder builder = new TransactionPurchasesSamplerBuilder(productCategories, - purchasingProfile, seedFactory); - - builder.setTransactionParameters(parameters); - builder.setInventory(inventory); - - return builder.build(); - } - - protected Sampler<Double> buildTimeSampler() - { - TransactionTimeSamplerBuilder builder = new TransactionTimeSamplerBuilder(seedFactory); - builder.setCustomerTransactionParameters(parameters); - builder.setCustomerInventory(inventory); - - return builder.build(); - } - - protected void buildCustomerInventory() - { - CustomerInventoryBuilder inventoryBuilder = new CustomerInventoryBuilder(parameters, - seedFactory); - inventoryBuilder.addAllProductCategories(productCategories); - inventory = inventoryBuilder.build(); - } - - public Sampler<Transaction> build() throws Exception - { - buildParameters(); - buildCustomerInventory(); - - Sampler<Double> timeSampler = buildTimeSampler(); - - return new TransactionSampler(customer, timeSampler, buildPurchasesSampler(), new SequenceSampler()); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java deleted file mode 100644 index b2b284f..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimePDF.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.framework.pdfs.ConditionalProbabilityDensityFunction; - -public class TransactionTimePDF implements ConditionalProbabilityDensityFunction<Double, Double> -{ - public double probability(Double proposedTime, Double lastTransactionTime) - { - if(proposedTime >= lastTransactionTime) - { - return 1.0; - } - - return 0.0; - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java deleted file mode 100644 index 261d5a3..0000000 --- a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/bigpetstore/datagenerator/generators/transaction/TransactionTimeSamplerBuilder.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.bigtop.bigpetstore.datagenerator.generators.transaction; - -import org.apache.bigtop.bigpetstore.datagenerator.framework.SeedFactory; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.ExponentialSampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.Sampler; -import org.apache.bigtop.bigpetstore.datagenerator.framework.samplers.StatefulMonteCarloSampler; - -public class TransactionTimeSamplerBuilder -{ - private final SeedFactory seedFactory; - private CustomerInventory customerInventory; - private CustomerTransactionParameters transactionParameters; - - public TransactionTimeSamplerBuilder(SeedFactory seedFactory) - { - this.seedFactory = seedFactory; - } - - public void setCustomerInventory(CustomerInventory inventory) - { - this.customerInventory = inventory; - } - - public void setCustomerTransactionParameters(CustomerTransactionParameters parameters) - { - this.transactionParameters = parameters; - } - - public Sampler<Double> build() - { - double lambda = 1.0 / transactionParameters.getAverageTransactionTriggerTime(); - Sampler<Double> arrivalTimeSampler = new ExponentialSampler(lambda, seedFactory); - Sampler<Double> proposedTimeSampler = new ProposedPurchaseTimeSampler(customerInventory, - arrivalTimeSampler); - - return new StatefulMonteCarloSampler<Double>(proposedTimeSampler, - new TransactionTimePDF(), - 0.0, - seedFactory); - } -} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java new file mode 100644 index 0000000..21827d5 --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/Constants.java @@ -0,0 +1,99 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import java.io.File; +import java.util.List; +import java.util.Set; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +public class Constants +{ + public static enum PurchasingModelType + { + MULTINOMIAL, + MARKOV; + } + + public static enum ProductsCollectionSize + { + SMALL, + MEDIUM; + } + + public static final File COORDINATES_FILE = new File("zips.csv"); + public static final File INCOMES_FILE = new File("ACS_12_5YR_S1903/ACS_12_5YR_S1903_with_ann.csv"); + public static final File POPULATION_FILE = new File("population_data.csv"); + + public static final File NAMEDB_FILE = new File("namedb/data/data.dat"); + + public static final ProductsCollectionSize PRODUCTS_COLLECTION = ProductsCollectionSize.MEDIUM; + + public static final double INCOME_SCALING_FACTOR = 100.0; + + public static final int MIN_PETS = 1; + public static final int MAX_PETS = 10; + + public static final List<Pair<Double, Double>> TRANSACTION_TRIGGER_TIME_GAUSSIANS = ImmutableList.of(Pair.of(5.0, 2.0)); + public static final List<Pair<Double, Double>> PURCHASE_TRIGGER_TIME_GAUSSIANS = ImmutableList.of(Pair.of(10.0, 4.0)); + + public static final double TRANSACTION_TRIGGER_TIME_MAX = 10.0; + public static final double TRANSACTION_TRIGGER_TIME_MIN = 1.0; + + public static final double PURCHASE_TRIGGER_TIME_MAX = 20.0; + public static final double PURCHASE_TRIGGER_TIME_MIN = 1.0; + + public static final double AVERAGE_CUSTOMER_STORE_DISTANCE = 5.0; // miles + + public static final PurchasingModelType PURCHASING_MODEL_TYPE = PurchasingModelType.MULTINOMIAL; + + public static final List<Pair<Double, Double>> PRODUCT_MSM_FIELD_WEIGHT_GAUSSIANS = ImmutableList.of(Pair.of(0.15, 0.1), Pair.of(0.85, 0.1)); + public static final double PRODUCT_MSM_FIELD_WEIGHT_LOWERBOUND = 0.05; + public static final double PRODUCT_MSM_FIELD_WEIGHT_UPPERBOUND = 0.95; + + public static final List<Pair<Double, Double>> PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_GAUSSIANS = ImmutableList.of(Pair.of(0.15, 0.1), Pair.of(0.85, 0.1)); + public static final double PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_LOWERBOUND = 0.05; + public static final double PRODUCT_MSM_FIELD_SIMILARITY_WEIGHT_UPPERBOUND = 0.95; + + public static final List<Pair<Double, Double>> PRODUCT_MSM_LOOPBACK_WEIGHT_GAUSSIANS = ImmutableList.of(Pair.of(0.25, 0.1), Pair.of(0.75, 0.1)); + public static final double PRODUCT_MSM_LOOPBACK_WEIGHT_LOWERBOUND = 0.05; + public static final double PRODUCT_MSM_LOOPBACK_WEIGHT_UPPERBOUND = 0.95; + + public static final double PRODUCT_MULTINOMIAL_POSITIVE_WEIGHT = 10.0; + public static final double PRODUCT_MULTINOMIAL_NEUTRAL_WEIGHT = 1.0; + public static final double PRODUCT_MULTINOMIAL_NEGATIVE_WEIGHT = 0.1; + public static final int PRODUCT_MULTINOMIAL_POSITIVE_COUNT_MIN = 1; + public static final double PRODUCT_MULTINOMIAL_POSITIVE_FREQUENCY = 0.1; // 10% + + public static final String PRODUCT_QUANTITY = "quantity"; + public static final String PRODUCT_CATEGORY = "category"; + public static final String PRODUCT_UNIT_PRICE = "unitPrice"; + public static final String PRODUCT_PRICE = "price"; + + /* + * Until we have a more intelligent way (e.g., based on range) of dealing with prices, + * let's exclude them. + */ + public static final Set<String> PRODUCT_MODEL_EXCLUDED_FIELDS = ImmutableSet.of(PRODUCT_CATEGORY, + PRODUCT_UNIT_PRICE, + PRODUCT_PRICE); + + public static final double STOP_CATEGORY_WEIGHT = 0.01; +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java new file mode 100644 index 0000000..7fc2cbe --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/CustomerGenerator.java @@ -0,0 +1,41 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import java.util.List; + +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Store; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData; +import org.apache.bigtop.datagenerators.bigpetstore.generators.customer.CustomerSamplerBuilder; +import org.apache.bigtop.datagenerators.samplers.SeedFactory; +import org.apache.bigtop.datagenerators.samplers.samplers.Sampler; + +public class CustomerGenerator +{ + final Sampler<Customer> sampler; + + public CustomerGenerator(InputData inputData, List<Store> stores, SeedFactory seedFactory) + { + CustomerSamplerBuilder builder = new CustomerSamplerBuilder(stores, inputData, seedFactory); + sampler = builder.build(); + } + + public Customer generate() throws Exception + { + return sampler.sample(); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java new file mode 100644 index 0000000..d3393fe --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/DataLoader.java @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.InputStream; +import java.util.List; + +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.Names; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ZipcodeRecord; +import org.apache.bigtop.datagenerators.bigpetstore.datareaders.NameReader; +import org.apache.bigtop.datagenerators.bigpetstore.datareaders.ZipcodeReader; + +public class DataLoader +{ + private InputStream getResource(File filename) throws Exception + { + InputStream stream = getClass().getResourceAsStream("/input_data/" + filename); + return new BufferedInputStream(stream); + } + + public InputData loadData() throws Exception + { + + System.out.println("Reading zipcode data"); + ZipcodeReader zipcodeReader = new ZipcodeReader(); + zipcodeReader.setCoordinatesFile(getResource(Constants.COORDINATES_FILE)); + zipcodeReader.setIncomesFile(getResource(Constants.INCOMES_FILE)); + zipcodeReader.setPopulationFile(getResource(Constants.POPULATION_FILE)); + List<ZipcodeRecord> zipcodeTable = zipcodeReader.readData(); + System.out.println("Read " + zipcodeTable.size() + " zipcode entries"); + + System.out.println("Reading name data"); + NameReader nameReader = new NameReader(getResource(Constants.NAMEDB_FILE)); + Names names = nameReader.readData(); + System.out.println("Read " + names.getFirstNames().size() + " first names and " + names.getLastNames().size() + " last names"); + + InputData inputData = new InputData(zipcodeTable, names); + + return inputData; + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java new file mode 100644 index 0000000..d6a0412 --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/ProductGenerator.java @@ -0,0 +1,50 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import java.util.List; + +import org.apache.bigtop.datagenerators.bigpetstore.Constants.ProductsCollectionSize; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory; +import org.apache.bigtop.datagenerators.bigpetstore.generators.products.collections.MediumProductCollection; +import org.apache.bigtop.datagenerators.bigpetstore.generators.products.collections.SmallProductCollection; + +public class ProductGenerator +{ + ProductsCollectionSize collection; + + public ProductGenerator(ProductsCollectionSize collection) + { + this.collection = collection; + } + + public List<ProductCategory> generate() + { + List<ProductCategory> categories; + + if(collection.equals(ProductsCollectionSize.SMALL)) + { + SmallProductCollection collection = new SmallProductCollection(); + categories = collection.generateProductCategory(); + } else + { + MediumProductCollection collection = new MediumProductCollection(); + categories = collection.generateProductCategory(); + } + + return categories; + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java new file mode 100644 index 0000000..21f82a5 --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/PurchasingModelGenerator.java @@ -0,0 +1,40 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import java.util.Collection; + +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory; +import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel; +import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModelSamplerBuilder; +import org.apache.bigtop.datagenerators.samplers.SeedFactory; +import org.apache.bigtop.datagenerators.samplers.samplers.Sampler; + +public class PurchasingModelGenerator +{ + final Sampler<? extends PurchasingModel> sampler; + + public PurchasingModelGenerator(Collection<ProductCategory> productCategories, SeedFactory seedFactory) throws Exception + { + PurchasingModelSamplerBuilder builder = new PurchasingModelSamplerBuilder(productCategories, seedFactory); + sampler = builder.build(); + } + + public PurchasingModel generate() throws Exception + { + return sampler.sample(); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java new file mode 100644 index 0000000..60a150e --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/StoreGenerator.java @@ -0,0 +1,38 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Store; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData; +import org.apache.bigtop.datagenerators.bigpetstore.generators.store.StoreSamplerBuilder; +import org.apache.bigtop.datagenerators.samplers.SeedFactory; +import org.apache.bigtop.datagenerators.samplers.samplers.Sampler; + +public class StoreGenerator +{ + final Sampler<Store> sampler; + + public StoreGenerator(InputData inputData, SeedFactory seedFactory) + { + StoreSamplerBuilder builder = new StoreSamplerBuilder(inputData.getZipcodeTable(), seedFactory); + sampler = builder.build(); + } + + public Store generate() throws Exception + { + return sampler.sample(); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java new file mode 100644 index 0000000..7f56093 --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/TransactionGenerator.java @@ -0,0 +1,43 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore; + +import java.util.Collection; + +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Transaction; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory; +import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel; +import org.apache.bigtop.datagenerators.bigpetstore.generators.transaction.TransactionSamplerBuilder; +import org.apache.bigtop.datagenerators.samplers.SeedFactory; +import org.apache.bigtop.datagenerators.samplers.samplers.Sampler; + +public class TransactionGenerator +{ + Sampler<Transaction> sampler; + + public TransactionGenerator(Customer customer, PurchasingModel profile, + Collection<ProductCategory> productCategories, SeedFactory seedFactory) throws Exception + { + sampler = new TransactionSamplerBuilder(productCategories, + customer, profile, seedFactory).build(); + } + + public Transaction generate() throws Exception + { + return sampler.sample(); + } +} http://git-wip-us.apache.org/repos/asf/bigtop/blob/15af83eb/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java ---------------------------------------------------------------------- diff --git a/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java new file mode 100644 index 0000000..623b947 --- /dev/null +++ b/bigtop-data-generators/bigpetstore-data-generator/src/main/java/org/apache/bigtop/datagenerators/bigpetstore/cli/Driver.java @@ -0,0 +1,315 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.bigtop.datagenerators.bigpetstore.cli; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.util.Collection; +import java.util.List; + +import org.apache.bigtop.datagenerators.bigpetstore.DataLoader; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Customer; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Product; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Store; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.Transaction; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.InputData; +import org.apache.bigtop.datagenerators.bigpetstore.datamodels.inputs.ProductCategory; +import org.apache.bigtop.datagenerators.bigpetstore.generators.purchase.PurchasingModel; +import org.apache.commons.lang3.tuple.Pair; + + +public class Driver +{ + int nStores; + int nCustomers; + int nPurchasingModels; + double simulationTime; + long seed; + File outputDir; + + static final int NPARAMS = 6; + + private void printUsage() + { + String usage = "BigPetStore Data Generator\n" + + "\n" + + "Usage: java -jar bps-data-generator-v0.2.java outputDir nStores nCustomers nPurchasingModels simulationLength seed\n" + + "\n" + + "outputDir - (string) directory to write files\n" + + "nStores - (int) number of stores to generate\n" + + "nCustomers - (int) number of customers to generate\n" + + "nPurchasingModels - (int) number of purchasing models to generate\n" + + "simulationLength - (float) number of days to simulate\n" + + "seed - (long) seed for RNG. If not given, one is reandomly generated.\n"; + + System.out.println(usage); + } + + public void parseArgs(String[] args) + { + if(args.length != NPARAMS && args.length != (NPARAMS - 1)) + { + printUsage(); + System.exit(1); + } + + int i = -1; + + outputDir = new File(args[++i]); + if(! outputDir.exists()) + { + System.err.println("Given path (" + args[i] + ") does not exist.\n"); + printUsage(); + System.exit(1); + } + + if(! outputDir.isDirectory()) + { + System.err.println("Given path (" + args[i] + ") is not a directory.\n"); + printUsage(); + System.exit(1); + } + + try + { + nStores = Integer.parseInt(args[++i]); + } + catch(Exception e) + { + System.err.println("Unable to parse '" + args[i] + "' as an integer for nStores.\n"); + printUsage(); + System.exit(1); + } + + try + { + nCustomers = Integer.parseInt(args[++i]); + } + catch(Exception e) + { + System.err.println("Unable to parse '" + args[i] + "' as an integer for nCustomers.\n"); + printUsage(); + System.exit(1); + } + + try + { + nPurchasingModels = Integer.parseInt(args[++i]); + } + catch(Exception e) + { + System.err.println("Unable to parse '" + args[i] + "' as an integer for nPurchasingModels.\n"); + printUsage(); + System.exit(1); + } + + try + { + simulationTime = Double.parseDouble(args[++i]); + } + catch(Exception e) + { + System.err.println("Unable to parse '" + args[i] + "' as a float for simulationLength.\n"); + printUsage(); + System.exit(1); + } + + try + { + seed = Long.parseLong(args[++i]); + } + catch(Exception e) + { + System.err.println("Unable to parse '" + args[i] + "' as a long for the seed.\n"); + printUsage(); + System.exit(1); + } + } + + private void writeTransactions(Collection<Transaction> transactions) throws Exception + { + File outputFile = new File(outputDir.toString() + File.separator + "transactions.txt"); + System.out.println(outputFile.toString()); + OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); + + for(Transaction transaction : transactions) + { + for(Product product : transaction.getProducts()) + { + String record = transaction.getId() + ","; + record += transaction.getDateTime() + ","; + record += transaction.getStore().getId() + ","; + record += transaction.getStore().getLocation().getZipcode() + ","; + record += transaction.getStore().getLocation().getCity() + ","; + record += transaction.getStore().getLocation().getState() + ","; + record += transaction.getCustomer().getId() + ","; + Pair<String, String> name = transaction.getCustomer().getName(); + record += name.getLeft() + " " + name.getRight() + ","; + record += transaction.getCustomer().getLocation().getZipcode() + ","; + record += transaction.getCustomer().getLocation().getCity() + ","; + record += transaction.getCustomer().getLocation().getState() + ","; + record += product.toString() + "\n"; + + outputStream.write(record.getBytes()); + } + } + + outputStream.close(); + } + + private void writeCustomers(Collection<Customer> customers) throws Exception + { + File outputFile = new File(outputDir.toString() + File.separator + "customers.txt"); + System.out.println(outputFile.toString()); + OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); + + for(Customer customer : customers) + { + String record = customer.getId() + ","; + Pair<String, String> name = customer.getName(); + record += name.getLeft() + "," + name.getRight() + ","; + record += customer.getLocation().getZipcode() + ","; + record += customer.getLocation().getCity() + ","; + record += customer.getLocation().getState() + "\n"; + + outputStream.write(record.getBytes()); + } + + outputStream.close(); + } + + private void writeStores(Collection<Store> stores) throws Exception + { + File outputFile = new File(outputDir.toString() + File.separator + "stores.txt"); + System.out.println(outputFile.toString()); + OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); + + for(Store store : stores) + { + String record = store.getId() + ","; + record += store.getLocation().getZipcode() + ","; + record += store.getLocation().getCity() + ","; + record += store.getLocation().getState() + "\n"; + + outputStream.write(record.getBytes()); + } + + outputStream.close(); + } + + private void writeProducts(Collection<ProductCategory> productCategories) throws Exception + { + File outputFile = new File(outputDir.toString() + File.separator + "products.txt"); + System.out.println(outputFile.toString()); + OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); + + for(ProductCategory category : productCategories) + { + + for(Product product : category.getProducts()) + { + String record = category.getCategoryLabel() + ","; + record += product.toString() + "\n"; + + outputStream.write(record.getBytes()); + } + } + + outputStream.close(); + } + + private void writePurchasingProfiles(List<ProductCategory> productCategories, List<PurchasingModel> profiles) throws Exception + { + File outputFile = new File(outputDir.toString() + File.separator + "purchasing_profiles.txt"); + System.out.println(outputFile.toString()); + OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile)); + + for(ProductCategory category : productCategories) + { + int i = 0; + for(PurchasingModel model : profiles) + { + Object productModel = model.getProfile(category.getCategoryLabel()); + String record = productModel.toString(); + + outputStream.write(record.getBytes()); + + i += 1; + } + } + + outputStream.close(); + } + + public Simulation buildSimulation(InputData inputData) + { + return new Simulation(inputData, nStores, nCustomers, nPurchasingModels, simulationTime, seed); + } + + private void run(InputData inputData) throws Exception + { + Simulation simulation = buildSimulation(inputData); + + simulation.simulate(); + + writeStores(simulation.getStores()); + writeCustomers(simulation.getCustomers()); + writeProducts(simulation.getProductCategories()); + writePurchasingProfiles(simulation.getProductCategories(), simulation.getPurchasingProfiles()); + writeTransactions(simulation.getTransactions()); + } + public void run(String[] args) throws Exception + { + parseArgs(args); + + InputData inputData = (new DataLoader()).loadData(); + + run(inputData); + } + + public static void main(String[] args) throws Exception + { + Driver driver = new Driver(); + driver.run(args); + } + + public Double getSimulationLength() + { + return simulationTime; + } + + public int getNCustomers() + { + return nCustomers; + } + + public long getSeed() + { + return seed; + } + + public int getNStores() + { + return nStores; + } + + public File getOutputDir() + { + return outputDir; + } +}
