List of usage examples for org.apache.commons.math3.stat.descriptive SummaryStatistics getMean
public double getMean()
From source file:gdsc.smlm.ij.plugins.DensityImage.java
/** * Output a log message of the results including the average density for localisations and the expected average. * /*from w w w .j a va2 s.c o m*/ * @param results * @param density * @param radius * @param filtered * @return */ private SummaryStatistics logDensityResults(MemoryPeakResults results, int[] density, float radius, int filtered) { float region = (float) (radius * radius * ((useSquareApproximation) ? 4 : Math.PI)); Rectangle bounds = results.getBounds(); float area = bounds.width * bounds.height; float expected = results.size() * region / area; SummaryStatistics summary = new SummaryStatistics(); for (int i = 0; i < results.size(); i++) { summary.addValue(density[i]); } DensityManager dm = new DensityManager(results); // Compute this using the input density scores since the radius is the same. final double l = (useSquareApproximation) ? dm.ripleysLFunction(radius) : dm.ripleysLFunction(density, radius); String msg = String.format("Density %s : N=%d, %.0fpx : Radius=%s : L(r) - r = %s : E = %s, Obs = %s (%sx)", results.getName(), summary.getN(), area, rounded(radius), rounded(l - radius), rounded(expected), rounded(summary.getMean()), rounded(summary.getMean() / expected)); if (filterLocalisations) msg += String.format(" : Filtered=%d (%s%%)", filtered, rounded(filtered * 100.0 / density.length)); IJ.log(msg); return summary; }
From source file:model.scenario.OneLinkSupplyChainScenarioRegressionTest.java
private OneLinkSupplyChainResult testFoodMonopolistWithFixedProductionRun(int random, final boolean competitorsLearned, int speed, float divideGainsByThis, File csvFileToWrite) { final MacroII macroII = new MacroII(random); final OneLinkSupplyChainScenarioCheatingBuyPriceAndForcedMonopolist scenario1 = new OneLinkSupplyChainScenarioCheatingBuyPriceAndForcedMonopolist( macroII, OneLinkSupplyChainScenario.OUTPUT_GOOD) { @Override//from w w w . ja v a2 s. co m protected void buildBeefSalesPredictor(SalesDepartment dept) { if (competitorsLearned) dept.setPredictorStrategy(new FixedDecreaseSalesPredictor(0)); } }; scenario1.setControlType(MarginalMaximizer.class); scenario1.setSalesDepartmentType(SalesDepartmentOneAtATime.class); //use standard PID parameters scenario1.setDivideProportionalGainByThis(divideGainsByThis); scenario1.setDivideIntegrativeGainByThis(divideGainsByThis); //100 days delay scenario1.setBeefPricingSpeed(speed); //no need for filter with the cheating price scenario1.setBeefPriceFilterer(null); scenario1.setBeefTargetInventory(10); //add csv writer if needed if (csvFileToWrite != null) DailyStatCollector.addDailyStatCollectorToModel(csvFileToWrite, macroII); macroII.setScenario(scenario1); macroII.start(); while (macroII.schedule.getTime() < 9000) { macroII.schedule.step(macroII); } //I used to assert this: //Assert.assertEquals(macroII.getMarket(OneLinkSupplyChainScenario.OUTPUT_GOOD).getLatestObservation(MarketDataType.AVERAGE_CLOSING_PRICE),85,6 ); //but that's too hard because while on average the price hovers there, competition is noisy. Sometimes a lot. //so what I did was to attach a daily stat collector and then check the average of the last 10 prices SummaryStatistics averageFoodPrice = new SummaryStatistics(); SummaryStatistics averageBeefProduced = new SummaryStatistics(); SummaryStatistics averageBeefPrice = new SummaryStatistics(); for (int j = 0; j < 1000; j++) { //make the model run one more day: macroII.schedule.step(macroII); averageFoodPrice.addValue(macroII.getMarket(OneLinkSupplyChainScenario.OUTPUT_GOOD) .getLatestObservation(MarketDataType.AVERAGE_CLOSING_PRICE)); averageBeefProduced .addValue(macroII.getMarket(OneLinkSupplyChainScenario.INPUT_GOOD).getYesterdayVolume()); averageBeefPrice.addValue(macroII.getMarket(OneLinkSupplyChainScenario.INPUT_GOOD) .getLatestObservation(MarketDataType.AVERAGE_CLOSING_PRICE)); } System.out.println("beef price: " + averageBeefPrice.getMean()); System.out.println("food price: " + averageFoodPrice.getMean()); System.out.println("produced: " + averageBeefProduced.getMean()); System.out.println(); return new OneLinkSupplyChainResult(averageBeefPrice.getMean(), averageFoodPrice.getMean(), averageBeefProduced.getMean(), macroII); }
From source file:model.experiments.stickyprices.StickyPricesCSVPrinter.java
private static void simpleDelaySweep(int maxDivider, int maxSpeed, int demandDelay, int experimentsPerSetup) throws IOException { CSVWriter writer = new CSVWriter(new FileWriter(Paths.get("runs", "rawdata", "delaySweep.csv").toFile())); writer.writeNext(new String[] { "speed", "divider", "distance", "variance", "success" }); for (int divider = 1; divider < maxDivider; divider++) { //for all speeds for (int speed = 0; speed < maxSpeed; speed++) { SummaryStatistics averageSquaredDistance = new SummaryStatistics(); SummaryStatistics averageVariance = new SummaryStatistics(); int successes = 0; for (int runNumber = 0; runNumber < experimentsPerSetup; runNumber++) { float totalDistance = 0; SummaryStatistics prices = new SummaryStatistics(); //runNumber! final SimpleSellerScenario run = runWithDelay(demandDelay, speed, divider, false, true, runNumber);// ww w . ja v a2s . c o m final double[] pricesInRun = run.getDepartments().get(0).getData() .getObservationsRecordedTheseDays(SalesDataType.LAST_ASKED_PRICE, 0, 14999); for (double price : pricesInRun) { totalDistance += Math.pow(price - 51, 2); prices.addValue(price); } averageSquaredDistance.addValue(Math.sqrt(totalDistance)); averageVariance.addValue(prices.getVariance()); if (pricesInRun[pricesInRun.length - 1] == 51) successes++; } String[] csvLine = new String[5]; csvLine[0] = String.valueOf(speed); csvLine[1] = String.valueOf(divider); csvLine[2] = String.valueOf(averageSquaredDistance.getMean()); csvLine[3] = String.valueOf(averageVariance.getMean()); csvLine[4] = String.valueOf(successes); writer.writeNext(csvLine); writer.flush(); System.out.println(Arrays.toString(csvLine)); } } }
From source file:model.scenario.CompetitiveScenarioTest.java
@Test public void rightPriceAndQuantityLearningInventory() { for (int competitors = 4; competitors <= 7; competitors++) { System.out.println("FORCED COMPETITIVE FIRMS: " + (competitors + 1)); for (int i = 0; i < 5; i++) { final MacroII macroII = new MacroII(System.currentTimeMillis()); final TripolistScenario scenario1 = new TripolistScenario(macroII); scenario1.setSalesDepartmentType(SalesDepartmentOneAtATime.class); scenario1.setAskPricingStrategy(SalesControlWithFixedInventoryAndPID.class); scenario1.setControlType(//from w w w. j a va 2 s .c om MonopolistScenario.MonopolistScenarioIntegratedControlEnum.MARGINAL_PLANT_CONTROL); scenario1.setAdditionalCompetitors(competitors); scenario1.setWorkersToBeRehiredEveryDay(true); scenario1.setDemandIntercept(102); //assign scenario macroII.setScenario(scenario1); macroII.start(); while (macroII.schedule.getTime() < 8000) { macroII.schedule.step(macroII); /* System.out.println("sales: " + scenario1.getCompetitors().get(0).getSalesDepartment(GoodType.GENERIC). getLatestObservation(SalesDataType.OUTFLOW) +"," + scenario1.getCompetitors().get(1).getSalesDepartment(GoodType.GENERIC). getLatestObservation(SalesDataType.OUTFLOW)); */ } SummaryStatistics prices = new SummaryStatistics(); SummaryStatistics quantities = new SummaryStatistics(); SummaryStatistics target = new SummaryStatistics(); for (int j = 0; j < 500; j++) { macroII.schedule.step(macroII); assert !Float.isNaN(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); prices.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); quantities.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); for (EconomicAgent agent : macroII.getMarket(UndifferentiatedGoodType.GENERIC).getSellers()) { SalesDepartment department = ((Firm) agent) .getSalesDepartment(UndifferentiatedGoodType.GENERIC); target.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); } } System.out.println(prices.getMean() + " - " + quantities.getMean() + "/" + target.getMean() + "----" + macroII.seed() + " | " + macroII.getMarket(UndifferentiatedGoodType.GENERIC).getLastDaysAveragePrice()); System.out.println("standard deviations: price : " + prices.getStandardDeviation() + " , quantity: " + quantities.getStandardDeviation()); OneSectorStatics.printSlopes(scenario1); if (competitors >= 4) { assertEquals(prices.getMean(), 58, 5); // assertTrue(prices.getStandardDeviation() < 5.5); assertEquals(quantities.getMean(), 44, 5); // assertTrue(quantities.getStandardDeviation() < 5.5); } macroII.finish(); } } }
From source file:model.scenario.CompetitiveScenarioTest.java
@Test public void rightPriceAndQuantityTestAsMarginalNoPIDAlreadyLearnedFlows() { for (int competitors = 4; competitors <= 7; competitors++) { // System.out.println("FORCED COMPETITIVE FIRMS: " + (competitors+1)); for (int i = 0; i < 5; i++) { final MacroII macroII = new MacroII(System.currentTimeMillis()); final TripolistScenario scenario1 = new TripolistScenario(macroII); scenario1.setSalesDepartmentType(SalesDepartmentOneAtATime.class); scenario1.setAskPricingStrategy(InventoryBufferSalesControl.class); scenario1.setControlType(/*from w ww . j a v a 2 s.c o m*/ MonopolistScenario.MonopolistScenarioIntegratedControlEnum.MARGINAL_PLANT_CONTROL); scenario1.setAdditionalCompetitors(competitors); scenario1.setWorkersToBeRehiredEveryDay(true); scenario1.setDemandIntercept(102); scenario1.setSalesPricePreditorStrategy(FixedDecreaseSalesPredictor.class); //assign scenario macroII.setScenario(scenario1); macroII.start(); macroII.schedule.step(macroII); for (Firm firm : scenario1.getCompetitors()) { for (HumanResources hr : firm.getHRs()) hr.setPredictor(new FixedIncreasePurchasesPredictor(0)); firm.getSalesDepartment(UndifferentiatedGoodType.GENERIC) .setPredictorStrategy(new FixedDecreaseSalesPredictor(0)); } while (macroII.schedule.getTime() < 5000) { macroII.schedule.step(macroII); } SummaryStatistics prices = new SummaryStatistics(); SummaryStatistics quantities = new SummaryStatistics(); SummaryStatistics target = new SummaryStatistics(); for (int j = 0; j < 500; j++) { macroII.schedule.step(macroII); assert !Float.isNaN(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); prices.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); quantities.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); for (EconomicAgent agent : macroII.getMarket(UndifferentiatedGoodType.GENERIC).getSellers()) { SalesDepartment department = ((Firm) agent) .getSalesDepartment(UndifferentiatedGoodType.GENERIC); target.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); } } System.out.println(prices.getMean() + " - " + quantities.getMean() + "/" + target.getMean() + "----" + macroII.seed() + " | " + macroII.getMarket(UndifferentiatedGoodType.GENERIC).getLastDaysAveragePrice()); System.out.println("standard deviations: price : " + prices.getStandardDeviation() + " , quantity: " + quantities.getStandardDeviation()); assertEquals(prices.getMean(), 58, 5); assertTrue(prices.getStandardDeviation() < 5.5); assertEquals(quantities.getMean(), 44, 5); assertTrue(quantities.getStandardDeviation() < 5.5); } } }
From source file:model.scenario.CompetitiveScenarioTest.java
@Test public void rightPriceAndQuantityTestAsMarginalNoPIDStickyLearned() { for (int competitors = 4; competitors <= 7; competitors++) { System.out.println("FORCED COMPETITIVE FIRMS: " + (competitors + 1)); float averageResultingPrice = 0; float averageResultingQuantity = 0; for (int i = 0; i < 5; i++) { final MacroII macroII = new MacroII(System.currentTimeMillis()); final TripolistScenario scenario1 = new TripolistScenario(macroII); scenario1.setSalesDepartmentType(SalesDepartmentOneAtATime.class); scenario1.setAskPricingStrategy(InventoryBufferSalesControl.class); scenario1.setControlType(/*w w w .ja va 2 s .co m*/ MonopolistScenario.MonopolistScenarioIntegratedControlEnum.MARGINAL_PLANT_CONTROL); scenario1.setAdditionalCompetitors(competitors); scenario1.setWorkersToBeRehiredEveryDay(true); scenario1.setDemandIntercept(102); scenario1.setBuyerDelay(50); //assign scenario macroII.setScenario(scenario1); macroII.start(); macroII.schedule.step(macroII); for (Firm firm : scenario1.getCompetitors()) { SalesDepartment department = firm.getSalesDepartment(UndifferentiatedGoodType.GENERIC); final SimpleFlowSellerPID askPricingStrategy = new SimpleFlowSellerPID(department); // askPricingStrategy.setTargetInventory(1000); askPricingStrategy.setSpeed(0); //stickiness! department.setAskPricingStrategy(askPricingStrategy); department.setPredictorStrategy(new FixedDecreaseSalesPredictor(0)); } while (macroII.schedule.getTime() < 8000) { macroII.schedule.step(macroII); } SummaryStatistics prices = new SummaryStatistics(); SummaryStatistics quantities = new SummaryStatistics(); SummaryStatistics target = new SummaryStatistics(); for (int j = 0; j < 3000; j++) { macroII.schedule.step(macroII); // assert !Float.isNaN(macroII.getMarket(GoodType.GENERIC).getTodayAveragePrice()); prices.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getLastPrice()); quantities.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); for (EconomicAgent agent : macroII.getMarket(UndifferentiatedGoodType.GENERIC).getSellers()) { SalesDepartment department = ((Firm) agent) .getSalesDepartment(UndifferentiatedGoodType.GENERIC); target.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); } } System.out.println(prices.getMean() + " - " + quantities.getMean() + "/" + target.getMean() + "----" + macroII.seed() + " | " + macroII.getMarket(UndifferentiatedGoodType.GENERIC).getLastDaysAveragePrice()); System.out.println("standard deviations: price : " + prices.getStandardDeviation() + " , quantity deviation: " + quantities.getStandardDeviation()); OneSectorStatics.printSlopes(scenario1); if (competitors >= 4) { assertEquals(prices.getMean(), 58, 5); // assertTrue(prices.getStandardDeviation() < 5.5); these are probably a lot higher with stickiness assertEquals(quantities.getMean(), 44, 5); // assertTrue(quantities.getStandardDeviation() < 5.5); } } } }
From source file:model.scenario.CompetitiveScenarioTest.java
@Test public void rightPriceAndQuantityLearningFlows() { for (int competitors = 4; competitors <= 7; competitors++) { System.out.println("FORCED COMPETITIVE FIRMS: " + (competitors + 1)); for (int i = 0; i < 5; i++) { final MacroII macroII = new MacroII(System.currentTimeMillis()); final TripolistScenario scenario1 = new TripolistScenario(macroII); scenario1.setSalesDepartmentType(SalesDepartmentOneAtATime.class); scenario1.setAskPricingStrategy(InventoryBufferSalesControl.class); scenario1.setControlType(/* w w w . j a v a 2 s .c o m*/ MonopolistScenario.MonopolistScenarioIntegratedControlEnum.MARGINAL_PLANT_CONTROL); scenario1.setAdditionalCompetitors(competitors); scenario1.setWorkersToBeRehiredEveryDay(true); scenario1.setDemandIntercept(102); //assign scenario macroII.setScenario(scenario1); macroII.start(); macroII.schedule.step(macroII); try { final HumanResources hr = scenario1.getMonopolist().getHRs().iterator().next(); final ErrorCorrectingPurchasePredictor predictor = new ErrorCorrectingPurchasePredictor(macroII, hr); hr.setPredictor(predictor); predictor.setDebugWriter(Paths.get("runs", "tmp.csv")); } catch (IOException e) { e.printStackTrace(); } while (macroII.schedule.getTime() < 8000) { macroII.schedule.step(macroII); /* System.out.println("sales: " + scenario1.getCompetitors().get(0).getSalesDepartment(GoodType.GENERIC). getLatestObservation(SalesDataType.OUTFLOW) +"," + scenario1.getCompetitors().get(1).getSalesDepartment(GoodType.GENERIC). getLatestObservation(SalesDataType.OUTFLOW)); */ } SummaryStatistics prices = new SummaryStatistics(); SummaryStatistics quantities = new SummaryStatistics(); SummaryStatistics target = new SummaryStatistics(); for (int j = 0; j < 500; j++) { macroII.schedule.step(macroII); assert !Float.isNaN(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); prices.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); quantities.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); for (EconomicAgent agent : macroII.getMarket(UndifferentiatedGoodType.GENERIC).getSellers()) { SalesDepartment department = ((Firm) agent) .getSalesDepartment(UndifferentiatedGoodType.GENERIC); target.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); } } System.out.println(prices.getMean() + " - " + quantities.getMean() + "/" + target.getMean() + "----" + macroII.seed() + " | " + macroII.getMarket(UndifferentiatedGoodType.GENERIC).getLastDaysAveragePrice()); System.out.println("standard deviations: price : " + prices.getStandardDeviation() + " , quantity: " + quantities.getStandardDeviation()); OneSectorStatics.printSlopes(scenario1); if (competitors >= 4) { assertEquals(prices.getMean(), 58, 5); assertTrue(prices.getStandardDeviation() < 5.5); assertEquals(quantities.getMean(), 44, 5); assertTrue(quantities.getStandardDeviation() < 5.5); } macroII.finish(); } } }
From source file:model.scenario.CompetitiveScenarioTest.java
@Test public void rightPriceAndQuantityTestAsMarginalInventoryTargetAlreadyLearned() { List<Integer> competitors = new LinkedList<>(); for (int competitor = 0; competitor <= 7; competitor++) competitors.add(competitor);/*from w ww. j a va 2 s. c o m*/ competitors.add(25); for (Integer competitor : competitors) { System.out.println("FORCED COMPETITIVE FIRMS: " + (competitor + 1)); float averageResultingPrice = 0; float averageResultingQuantity = 0; for (int i = 0; i < 5; i++) { final MacroII macroII = new MacroII(System.currentTimeMillis()); //1387582416533 final TripolistScenario scenario1 = new TripolistScenario(macroII); scenario1.setSalesDepartmentType(SalesDepartmentOneAtATime.class); scenario1.setAskPricingStrategy(SalesControlWithFixedInventoryAndPID.class); scenario1.setControlType( MonopolistScenario.MonopolistScenarioIntegratedControlEnum.MARGINAL_PLANT_CONTROL); scenario1.setAdditionalCompetitors(competitor); scenario1.setWorkersToBeRehiredEveryDay(true); scenario1.setDemandIntercept(102); scenario1.setSalesPricePreditorStrategy(FixedDecreaseSalesPredictor.class); //assign scenario macroII.setScenario(scenario1); macroII.start(); macroII.schedule.step(macroII); for (Firm firm : scenario1.getCompetitors()) { for (HumanResources hr : firm.getHRs()) hr.setPredictor(new FixedIncreasePurchasesPredictor(0)); for (SalesDepartment dept : firm.getSalesDepartments().values()) dept.setPredictorStrategy(new FixedDecreaseSalesPredictor(0)); } while (macroII.schedule.getTime() < 10000) { macroII.schedule.step(macroII); } SummaryStatistics prices = new SummaryStatistics(); SummaryStatistics quantities = new SummaryStatistics(); SummaryStatistics target = new SummaryStatistics(); for (int j = 0; j < 500; j++) { macroII.schedule.step(macroII); // assert !Float.isNaN(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); prices.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayAveragePrice()); quantities.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); for (EconomicAgent agent : macroII.getMarket(UndifferentiatedGoodType.GENERIC).getSellers()) { SalesDepartment department = ((Firm) agent) .getSalesDepartment(UndifferentiatedGoodType.GENERIC); target.addValue(macroII.getMarket(UndifferentiatedGoodType.GENERIC).getTodayVolume()); } } System.out.println(prices.getMean() + " - " + quantities.getMean() + "/" + target.getMean() + "----" + macroII.seed() + " | " + macroII.getMarket(UndifferentiatedGoodType.GENERIC).getLastDaysAveragePrice()); System.out.println("standard deviations: price : " + prices.getStandardDeviation() + " , quantity: " + quantities.getStandardDeviation()); averageResultingPrice += prices.getMean(); averageResultingQuantity += quantities.getMean(); assertEquals(prices.getMean(), 58, 5); // assertTrue(String.valueOf(prices.getStandardDeviation()),prices.getStandardDeviation() < 5.5); assertEquals(quantities.getMean(), 44, 5); // assertTrue(String.valueOf(prices.getStandardDeviation()),quantities.getStandardDeviation() < 5.5); } System.out.println(averageResultingPrice / 5f + " --- " + averageResultingQuantity / 5f); } }
From source file:gdsc.smlm.ij.plugins.TraceMolecules.java
private double getBlinkingRate(Trace[] traces) { SummaryStatistics stats = new SummaryStatistics(); for (Trace trace : traces) stats.addValue(trace.getNBlinks()); double blinkingRate = stats.getMean(); return blinkingRate; }
From source file:model.experiments.stickyprices.StickyPricesCSVPrinter.java
private static double[] competitiveSweepRun(int seed, int demandIntercept, int demandSlope, int wageSlope, int dailyWageIntercept, float proportionalGain, float integralGain, int maximizationTimePeriod, double correctCompetitivePrice, String filename, int additionalCompetitors) { //create the run MacroII macroII = new MacroII(seed); TripolistScenario scenario = new TripolistScenario(macroII); macroII.setScenario(scenario);// w ww . j av a 2s . com scenario.setAdditionalCompetitors(additionalCompetitors); //set the demand scenario.setDemandIntercept(demandIntercept); scenario.setDemandSlope(demandSlope); scenario.setDailyWageSlope(wageSlope); scenario.setDailyWageIntercept(dailyWageIntercept); scenario.setAskPricingStrategy(SimpleFlowSellerPID.class); scenario.setControlType(MonopolistScenario.MonopolistScenarioIntegratedControlEnum.MARGINAL_PLANT_CONTROL); //start it and have one step macroII.start(); macroII.schedule.step(macroII); //now set the right parameters for (final Firm firm : scenario.getCompetitors()) { final SalesDepartment salesDepartment = firm.getSalesDepartment(UndifferentiatedGoodType.GENERIC); final SimpleFlowSellerPID strategy = new SimpleFlowSellerPID(salesDepartment, proportionalGain + (float) macroII.random.nextGaussian() / 100f, integralGain + (float) macroII.random.nextGaussian() / 100f, 0f, 0, salesDepartment.getMarket(), salesDepartment.getRandom().nextInt(100), salesDepartment.getFirm().getModel()); //added a bit of noise salesDepartment.setAskPricingStrategy(strategy); //all impacts are 0 because it's perfect competitive salesDepartment.setPredictorStrategy(new FixedDecreaseSalesPredictor(0)); firm.getHRs().iterator().next().setPredictor(new FixedIncreasePurchasesPredictor(0)); } for (final PlantControl control : scenario.getMaximizers()) { ((MarginalPlantControl) control).getMaximizer().setHowManyDaysBeforeEachCheck(maximizationTimePeriod); } SummaryStatistics distance = new SummaryStatistics(); SummaryStatistics finalPrice = new SummaryStatistics(); SummaryStatistics finalDistance = new SummaryStatistics(); //run the model for (int i = 0; i < 4000; i++) { macroII.schedule.step(macroII); MarginalMaximizerPIDTuning.printProgressBar(5000, i, 100); final double closingPrice = macroII.getMarket(UndifferentiatedGoodType.GENERIC).getData() .getLatestObservation(MarketDataType.AVERAGE_CLOSING_PRICE); double distanceFromCorrect; if (Double.isNaN(closingPrice) || closingPrice < 0) { distanceFromCorrect = correctCompetitivePrice; } else { distanceFromCorrect = Math.pow(correctCompetitivePrice - closingPrice, 2); } distance.addValue(distanceFromCorrect); } //run the model for (int i = 0; i < 1000; i++) { macroII.schedule.step(macroII); MarginalMaximizerPIDTuning.printProgressBar(1000, i, 100); double closingPrice = macroII.getMarket(UndifferentiatedGoodType.GENERIC).getData() .getLatestObservation(MarketDataType.AVERAGE_CLOSING_PRICE); finalPrice.addValue(closingPrice); double distanceFromCorrect; if (Double.isNaN(closingPrice) || closingPrice < 0) { closingPrice = 0; } distanceFromCorrect = Math.pow(correctCompetitivePrice - closingPrice, 2); distance.addValue(distanceFromCorrect); finalDistance.addValue(distanceFromCorrect); } if (filename != null) macroII.getMarket(UndifferentiatedGoodType.GENERIC).getData() .writeToCSVFile(Paths.get("runs", "rawdata", filename).toFile()); return new double[] { distance.getMean(), finalDistance.getMean(), finalPrice.getVariance() }; }