From a97c9e07dbb416da2f2fdd107da3725a1e78f2a1 Mon Sep 17 00:00:00 2001
From: dansl <dansl@LAPTOP-SIKRVJU7.ern.nps.edu>
Date: Tue, 25 Apr 2023 16:08:54 -0700
Subject: [PATCH] Commit HW 4 Sloan

---
 .../src/mv3302/PartArrivalProcess.java        |  9 ++++
 .../src/mv3302/TransferLineComponent.java     | 47 +++++++++----------
 .../mv3302/run/RunTransferLineComponent.java  | 26 +++++-----
 3 files changed, 44 insertions(+), 38 deletions(-)

diff --git a/MV3302ClassCode/src/mv3302/PartArrivalProcess.java b/MV3302ClassCode/src/mv3302/PartArrivalProcess.java
index fc00f2272f..30b3456d2d 100644
--- a/MV3302ClassCode/src/mv3302/PartArrivalProcess.java
+++ b/MV3302ClassCode/src/mv3302/PartArrivalProcess.java
@@ -14,6 +14,7 @@ import simkit.random.RandomVariate;
  */
 public class PartArrivalProcess extends ArrivalProcess{
 
+    public int numberPartsArrived;
     /**
      * Zero-argument constructor
      */
@@ -38,6 +39,14 @@ public class PartArrivalProcess extends ArrivalProcess{
     public void doArrival() {
         super.doArrival();
         Part part = new Part();
+        numberPartsArrived +=1;
         waitDelay("Arrival", 0.0, part, 0);
     }
+
+    /**
+     * @return the numberPartsArrived
+     */
+    public int getNumberPartsArrived() {
+        return numberPartsArrived;
+    }
 }
diff --git a/MV3302ClassCode/src/mv3302/TransferLineComponent.java b/MV3302ClassCode/src/mv3302/TransferLineComponent.java
index 3522e8bef1..b46c066033 100644
--- a/MV3302ClassCode/src/mv3302/TransferLineComponent.java
+++ b/MV3302ClassCode/src/mv3302/TransferLineComponent.java
@@ -14,7 +14,7 @@ public class TransferLineComponent extends SimEntityBase {
     protected double[] timeAtStation;
     protected double totalDelayInQueue;
     protected double totalTimeInSystem;
-    private int numberComplete;
+    protected int numberComplete;
 
     /**
      * Constructor method for TransferLineComponent that passes in Array values
@@ -74,11 +74,11 @@ public class TransferLineComponent extends SimEntityBase {
      * Init Event.
      */
     public void doRun() {
-//        totalDelayInQueue = Double.NaN;
-//        totalTimeInSystem = Double.NaN;
-        firePropertyChange("totalDelayInQueue", getTotalDelayInQueue());
-        firePropertyChange("totalDelayInSystem", getTotalTimeInSystem());
-        firePropertyChange("numberAvailableMachines", getNumberAvailableMachines());
+        totalDelayInQueue = Double.NaN;
+        totalTimeInSystem = Double.NaN;
+//        firePropertyChange("totalDelayInQueue", getTotalDelayInQueue());
+//        firePropertyChange("totalDelayInSystem", getTotalTimeInSystem());
+//        firePropertyChange("numberAvailableMachines", getNumberAvailableMachines());
         waitDelay("Init", 0.0, 0);
     }
 
@@ -95,20 +95,18 @@ public class TransferLineComponent extends SimEntityBase {
      * @param i
      */
     public void doInit(int i) {
-        if (i < totalNumberMachines.length) {
-            this.numberAvailableMachines[i] = totalNumberMachines[i];
+        this.numberAvailableMachines[i] = totalNumberMachines[i];
 //            fireIndexedPropertyChange(i, "numberAvailableMachines", getNumberAvailableMachines(i));
-            queue.get(i).clear();
+        queue.get(i).clear();
 //            fireIndexedPropertyChange(i, "queue", getQueue(i));
 //            double[] oldDelayInQueue = getDelayInQueue().clone();
-            delayInQueue[i] = Double.NaN;
+        delayInQueue[i] = Double.NaN;
 //            firePropertyChange("delayInQueue", oldDelayInQueue, getDelayInQueue());
 //            double[] oldTimeAtStation = getTimeAtStation().clone();
-            timeAtStation[i] = Double.NaN;
+        timeAtStation[i] = Double.NaN;
 //            firePropertyChange("timeAtStation", oldTimeAtStation, getTimeAtStation());
-            if (i < totalNumberMachines.length - 1) {
-                waitDelay("Init", 0.0, i + 1);
-            }
+        if (i < totalNumberMachines.length - 1) {
+            waitDelay("Init", 0.0, i + 1);
         }
     }
 
@@ -143,15 +141,19 @@ public class TransferLineComponent extends SimEntityBase {
     public void doStartProcessing(int station) {
         SortedSet<Part> oldQueue = queue.get(station);
         Part part = oldQueue.first();
+
         queue.get(station).remove(part);
-        fireIndexedPropertyChange(station, "queue", oldQueue, getQueue(station));
+//fireIndexedPropertyChange(station, "queue", oldQueue, getQueue(station));
         int[] oldNumberAvailableMachines = getNumberAvailableMachines().clone();
-        oldNumberAvailableMachines[station]--;
+        numberAvailableMachines[station]--;
         fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]);
-        double[] oldDelayInQueue = getDelayInQueue().clone();
+        double[] oldDelayInQueue = getDelayInQueue();
         delayInQueue[station] = part.getElapsedTime();
-        firePropertyChange("delayInQueue", oldDelayInQueue, getDelayInQueue());
-        part.incrementDelayInQueue(oldDelayInQueue[station]);
+
+        fireIndexedPropertyChange(station, "delayInQueue", oldDelayInQueue[station], delayInQueue[station]);
+        part.incrementDelayInQueue(delayInQueue[station]);
+
+        
         waitDelay("EndProcessing", getProcessingTimeGenerator()[station].generate(), part, station);
     }
 
@@ -168,8 +170,8 @@ public class TransferLineComponent extends SimEntityBase {
         fireIndexedPropertyChange(station, "numberAvailableMachines", oldNumberAvailableMachines[station], getNumberAvailableMachines()[station]);
         double[] oldTimeAtStation = getTimeAtStation().clone();
         timeAtStation[station] = part.getElapsedTime();
-        firePropertyChange("timeAtStation", oldTimeAtStation, getTimeAtStation());
-        if (station < totalNumberMachines.length) {
+        fireIndexedPropertyChange(station, "timeAtStation", oldTimeAtStation[station], getTimeAtStation(station));
+        if (station < totalNumberMachines.length - 1) {
             waitDelay("Arrival", 0.0, part, station + 1);
         }
         if (station == totalNumberMachines.length - 1) {
@@ -179,7 +181,6 @@ public class TransferLineComponent extends SimEntityBase {
             waitDelay("StartProcessing", 0.0, station);
         }
     }
-
     /**
      * doPartComplete brings in argument part and assigns the value of
      * totalTimeInSystem to the parts getAge() value. It also assigns the
@@ -189,9 +190,7 @@ public class TransferLineComponent extends SimEntityBase {
     public void doPartComplete(Part part) {
         totalTimeInSystem = part.getAge();
         totalDelayInQueue = part.getTotalDelayInQueue();
-        numberComplete += 1;
     }
-
     /**
      * @return the totalNumberMachines
      */
diff --git a/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java b/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java
index 38a4e1eeb2..dbd08447ed 100644
--- a/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java
+++ b/MV3302ClassCode/src/mv3302/run/RunTransferLineComponent.java
@@ -43,8 +43,7 @@ public class RunTransferLineComponent {
         arrivalProcess.addSimEventListener(transferLineComponent);
 
         //        This was used for debugging model
-        SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper(true);
-
+//        SimplePropertyDumper simplePropertyDumper = new SimplePropertyDumper(true);
 //        This listener computes time-varying statistics for multiple Collection states
         MultipleCollectionSizeTimeVarying numberInQueueStat
                 = new MultipleCollectionSizeTimeVarying("queue");
@@ -65,31 +64,30 @@ public class RunTransferLineComponent {
         transferLineComponent.addPropertyChangeListener("delayInQueue",
                 delayInQueueStat);
 
-        arrivalProcess.addPropertyChangeListener(simplePropertyDumper);
-        transferLineComponent.addPropertyChangeListener(simplePropertyDumper);
-
+//        arrivalProcess.addPropertyChangeListener(simplePropertyDumper);
+//        transferLineComponent.addPropertyChangeListener(simplePropertyDumper);
 //        Was "true" when debugging model
         Schedule.setVerbose(false);
 
 //        Run for 500,000 time units        
-        double stopTime = 500000.0;
+        double stopTime = 500.0;
         Schedule.stopAtTime(stopTime);
 
 //      Initialized and Run
         Schedule.reset();
 //Start Running of Simulation
-        //Schedule.startSimulation(); //Commented out because I couldn't get the code to run past the doArrival() method.
+        Schedule.startSimulation(); //Commented out because I couldn't get the code to run past the doArrival() method.
         System.out.printf("%nSimulation ended at time %,.2f%n%n", Schedule.getSimTime());
 
-        System.out.printf("Number arrivals: %n", arrivalProcess.getNumberArrivals());
-        System.out.printf("Number Completed: %n%n", transferLineComponent.getNumberComplete());
+        System.out.printf("Number arrivals: %5s%n", arrivalProcess.getNumberArrivals());
+        System.out.printf("Number Completed: %4s%n%n", timeAtStationStat.getCount());
 
         System.out.printf("%15s%15s%15s%15s%15s%n", "", "Avg", "Avg #", "Avg Delay", "Avg Time");
         System.out.printf("%15s%15s%15s%15s%15s%n", "station", "util", "in Queue", "in Queue", "at Station");
         for (int i = 0; i < totalNumberMachines.length; i++) {
-            double utilization = 1.0 - numberAvailableMachinesStat.getMean() / totalNumberMachines.length;
-            double avgNumberInQueue = numberInQueueStat.getMean();
-            double avgDelayInQueue = delayInQueueStat.getMean();
+            double utilization = 1.0 - numberAvailableMachinesStat.getMean(i) / transferLineComponent.getTotalNumberMachines(i);
+            double avgNumberInQueue = numberInQueueStat.getMean(i);
+            double avgDelayInQueue = delayInQueueStat.getMean(i);
             double avgTimeAtStation = timeAtStationStat.getMean(i);
             System.out.printf("%15d%15.4f%15.4f%15.4f%15.4f%n", i, utilization, avgNumberInQueue, avgDelayInQueue, avgTimeAtStation);
         }
@@ -100,8 +98,8 @@ public class RunTransferLineComponent {
         System.out.printf("%15s%15s%15s%n", "station", "in Queue", "at Station");
         for (int i = 0; i < totalNumberMachines.length; i++) {
             double avgDelayInQueue = delayInQueueStat.getMean(i);
-            double avgTimeInSystem = avgDelayInQueue + timeAtStationStat.getMean(i) / transferLineComponent.getNumberComplete();
-            System.out.printf("%15s%15.4f%15.4f%n", i, avgDelayInQueue, avgTimeInSystem);
+            double avgTimeAtStation = avgDelayInQueue + timeAtStationStat.getMean() / transferLineComponent.getNumberComplete();
+            System.out.printf("%15s%15.4f%15.4f%n", i, avgDelayInQueue, avgTimeAtStation);
         }
         System.out.println();
         System.out.printf("Avg Time in System: %.4f (Using Little: %.4f)%n", timeAtStationStat.getMean() + delayInQueueStat.getMean(),
-- 
GitLab