diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject.zip b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject.zip new file mode 100644 index 0000000000000000000000000000000000000000..e2add3454d15bcca8457489ddc78a17d94aa0b74 Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject.zip differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/AnalystReports/Viskit.ico b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/AnalystReports/Viskit.ico new file mode 100644 index 0000000000000000000000000000000000000000..c9d5908c91e327600695feac75e406ee99fbb30a Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/AnalystReports/Viskit.ico differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/Assemblies/examples/TestAssembly.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/Assemblies/examples/TestAssembly.xml new file mode 100644 index 0000000000000000000000000000000000000000..670bf5e342254d05e495b69bf1f3157b7649b7e6 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/Assemblies/examples/TestAssembly.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<SimkitAssembly name="TestAssembly" version="1.0" package="examples" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/assembly.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <SimEntity name="arrivalProcess" type="examples.ArrivalProcess" description=""> + <FactoryParameter factory="simkit.random.RandomVariateFactory" type="simkit.random.RandomVariate"> + <TerminalParameter name="" value="Exponential" type="java.lang.String"/> + <TerminalParameter name="" value="1.6" type="double"/> + </FactoryParameter> + <Coordinate x="120.0" y="190.0"/> + </SimEntity> + <SimEntity name="twoTypeServer" type="examples.TwoTypeServer" description=""> + <TerminalParameter name="numberServersA" value="1" type="int"/> + <TerminalParameter name="numberServersB" value="2" type="int"/> + <FactoryParameter factory="simkit.random.RandomVariateFactory" type="simkit.random.RandomVariate"> + <TerminalParameter name="" value="Exponential" type="java.lang.String"/> + <TerminalParameter name="" value="0.9" type="double"/> + </FactoryParameter> + <FactoryParameter factory="simkit.random.RandomVariateFactory" type="simkit.random.RandomVariate"> + <TerminalParameter name="" value="Exponential" type="java.lang.String"/> + <TerminalParameter name="" value="1.2" type="double"/> + </FactoryParameter> + <Coordinate x="360.0" y="190.0"/> + </SimEntity> + <PropertyChangeListener name="numAvailServerAStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description=""> + <TerminalParameter name="p[0] : " value="numberAvailableServersA" type="java.lang.String"/> + <Coordinate x="360.0" y="290.0"/> + </PropertyChangeListener> + <PropertyChangeListener name="queueStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description=""> + <TerminalParameter name="p[0] : " value="queue" type="java.lang.String"/> + <Coordinate x="510.0" y="190.0"/> + </PropertyChangeListener> + <PropertyChangeListener name="numAvailServerBStat" type="simkit.stat.SimpleStatsTimeVarying" mode="replicationStat" meanStatistics="false" countStatistics="true" description=""> + <TerminalParameter name="p[0] : " value="numberAvailableServersB" type="java.lang.String"/> + <Coordinate x="360.0" y="80.0"/> + </PropertyChangeListener> + <PropertyChangeListenerConnection property="numberAvailableServersA" listener="numAvailServerAStat" source="twoTypeServer" description=""/> + <PropertyChangeListenerConnection property="queue" listener="queueStat" source="twoTypeServer" description=""/> + <PropertyChangeListenerConnection property="numberAvailableServersB" listener="numAvailServerBStat" source="twoTypeServer" description=""/> + <Adapter name="adptr" eventHeard="Arrival" eventSent="Arrival" from="arrivalProcess" to="twoTypeServer" description=""/> + <Output entity="arrivalProcess"/> + <Output entity="twoTypeServer"/> + <Schedule stopTime="100.0" verbose="false" saveReplicationData="false"/> +</SimkitAssembly> diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcess.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcess.xml new file mode 100644 index 0000000000000000000000000000000000000000..b22b9b36c0fdb2384cfb496f7a1e2a04862530f6 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcess.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<SimEntity name="ArrivalProcess" package="examples" version="1.0" author="advan" extend="SimEntityBase" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/simkit.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <Parameter name="interarrivalTime" type="simkit.random.RandomVariate"> + <Comment></Comment> + </Parameter> + <StateVariable name="numberArrivals" type="int"> + <Comment></Comment> + </StateVariable> + <Event name="Run" description="This event is fired first to facilitate initialization of all simulation state variables"> + <Schedule delay="interarrivalTime.generate()" event="Arrival" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="30.0" y="60.0"/> + </Event> + <Event name="Arrival"> + <Comment></Comment> + <StateTransition state="numberArrivals"> + <Assignment value="numberArrivals + 1"/> + </StateTransition> + <Schedule delay="interarrivalTime.generate()" event="Arrival" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="230.0" y="60.0"/> + </Event> +</SimEntity> diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcessTwo.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcessTwo.xml new file mode 100644 index 0000000000000000000000000000000000000000..b22b9b36c0fdb2384cfb496f7a1e2a04862530f6 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcessTwo.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<SimEntity name="ArrivalProcess" package="examples" version="1.0" author="advan" extend="SimEntityBase" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/simkit.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <Parameter name="interarrivalTime" type="simkit.random.RandomVariate"> + <Comment></Comment> + </Parameter> + <StateVariable name="numberArrivals" type="int"> + <Comment></Comment> + </StateVariable> + <Event name="Run" description="This event is fired first to facilitate initialization of all simulation state variables"> + <Schedule delay="interarrivalTime.generate()" event="Arrival" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="30.0" y="60.0"/> + </Event> + <Event name="Arrival"> + <Comment></Comment> + <StateTransition state="numberArrivals"> + <Assignment value="numberArrivals + 1"/> + </StateTransition> + <Schedule delay="interarrivalTime.generate()" event="Arrival" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="230.0" y="60.0"/> + </Event> +</SimEntity> diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/TwoTypeServer.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/TwoTypeServer.xml new file mode 100644 index 0000000000000000000000000000000000000000..e17ab0cc4d8503c444a571328c8ee36549d75c80 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/TwoTypeServer.xml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<SimEntity name="TwoTypeServer" package="examples" version="1.0" author="advan" extend="SimEntityBase" xsi:noNamespaceSchemaLocation="http://diana.nps.edu/Simkit/simkit.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + <Parameter name="numberServersA" type="int"> + <Comment></Comment> + </Parameter> + <Parameter name="numberServersB" type="int"> + <Comment></Comment> + </Parameter> + <Parameter name="serviceTimeA" type="simkit.random.RandomVariate"> + <Comment></Comment> + </Parameter> + <Parameter name="serviceTimeB" type="simkit.random.RandomVariate"> + <Comment></Comment> + </Parameter> + <StateVariable name="numberAvailableServersA" type="int"> + <Comment></Comment> + </StateVariable> + <StateVariable name="numberAvailableServersB" type="int"> + <Comment></Comment> + </StateVariable> + <StateVariable name="queue" type="int"> + <Comment></Comment> + </StateVariable> + <Event name="Run" description="This event is fired first to facilitate initialization of all simulation state variables"> + <Comment></Comment> + <StateTransition state="numberAvailableServersA"> + <Assignment value="getNumberServersA()"/> + </StateTransition> + <StateTransition state="numberAvailableServersB"> + <Assignment value="getNumberServersB()"/> + </StateTransition> + <StateTransition state="queue"> + <Assignment value="0"/> + </StateTransition> + <Code></Code> + <Coordinate x="40.0" y="60.0"/> + </Event> + <Event name="Arrival"> + <Comment></Comment> + <StateTransition state="queue"> + <Assignment value="queue + 1"/> + </StateTransition> + <Schedule delay="0.0" event="StartServiceA" condition="getNumberAvailableServersA() > 0" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Schedule delay="0.0" event="StartServiceB" condition="getNumberAvailableServersA() == 0 && getNumberAvailableServersB() > 0" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="40.0" y="180.0"/> + </Event> + <Event name="StartServiceA"> + <Comment></Comment> + <StateTransition state="numberAvailableServersA"> + <Assignment value="numberAvailableServersA - 1"/> + </StateTransition> + <StateTransition state="queue"> + <Assignment value="queue - 1"/> + </StateTransition> + <Schedule delay="serviceTimeA.generate()" event="EndServiceA" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="180.0" y="100.0"/> + </Event> + <Event name="StartServiceB"> + <Comment></Comment> + <StateTransition state="numberAvailableServersB"> + <Assignment value="numberAvailableServersB - 1"/> + </StateTransition> + <StateTransition state="queue"> + <Assignment value="queue - 1"/> + </StateTransition> + <Schedule delay="serviceTimeB.generate()" event="EndServiceB" priority="DEFAULT"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="180.0" y="260.0"/> + </Event> + <Event name="EndServiceA"> + <Comment></Comment> + <StateTransition state="numberAvailableServersA"> + <Assignment value="numberAvailableServersA + 1"/> + </StateTransition> + <Schedule delay="0.0" event="StartServiceA" condition="queue > 0" priority="HIGH"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="350.0" y="100.0"/> + </Event> + <Event name="EndServiceB"> + <Comment></Comment> + <StateTransition state="numberAvailableServersB"> + <Assignment value="numberAvailableServersB + 1"/> + </StateTransition> + <Schedule delay="0.0" event="StartServiceB" condition="queue > 0" priority="HIGH"> + <Comment></Comment> + </Schedule> + <Code></Code> + <Coordinate x="350.0" y="260.0"/> + </Event> +</SimEntity> diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class new file mode 100644 index 0000000000000000000000000000000000000000..9ae9ff1c1968f2c75a16bcf3f92168383699f3f3 Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/EntityCreator.class b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/EntityCreator.class new file mode 100644 index 0000000000000000000000000000000000000000..223b0d32e9af9d75e3599736e4c729b051a3bb1f Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/EntityCreator.class differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ServerGeneric.class b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ServerGeneric.class new file mode 100644 index 0000000000000000000000000000000000000000..d18e66dbc7c39b9ae85af6d3249268a450b4156b Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ServerGeneric.class differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TestAssembly.class b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TestAssembly.class new file mode 100644 index 0000000000000000000000000000000000000000..1f69eea93b9c735d4496bb4a13bf8a50cc5ebbdd Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TestAssembly.class differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServer.class b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServer.class new file mode 100644 index 0000000000000000000000000000000000000000..32f3485bc9e6513c0d997c15cd18decc559504cb Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServer.class differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServerAssembly.class b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServerAssembly.class new file mode 100644 index 0000000000000000000000000000000000000000..891976c4198510717712fc7952b01b4c56cc07cd Binary files /dev/null and b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServerAssembly.class differ diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/ArrivalProcess.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/ArrivalProcess.java new file mode 100644 index 0000000000000000000000000000000000000000..e581c58add42865e05f6c076f206ac1cebcfd8a2 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/ArrivalProcess.java @@ -0,0 +1,72 @@ +package examples; + +// Standard library imports +import java.util.*; + +// Application specific imports +import simkit.*; +import simkit.random.*; + +public class ArrivalProcess extends SimEntityBase { + + /* Simulation Parameters */ + + /** */ + private simkit.random.RandomVariate interarrivalTime; + + /* Simulation State Variables */ + + /** */ + protected int numberArrivals; + + @viskit.ParameterMap ( + names = {"interarrivalTime"}, + types = {"simkit.random.RandomVariate"} + ) + + /** Creates a new default instance of ArrivalProcess */ + public ArrivalProcess() { + } + + public ArrivalProcess(simkit.random.RandomVariate interarrivalTime) { + setInterarrivalTime(interarrivalTime); + } + + @Override + public void reset() { + super.reset(); + } + + /** Bootstraps the first simulation event */ + public void doRun() { + + waitDelay("Arrival", interarrivalTime.generate(), Priority.DEFAULT); + } + + public void doArrival() { + + /* StateTransition for numberArrivals */ + int _old_NumberArrivals = getNumberArrivals(); + numberArrivals = numberArrivals + 1; + firePropertyChange("numberArrivals", _old_NumberArrivals, getNumberArrivals()); + + waitDelay("Arrival", interarrivalTime.generate(), Priority.DEFAULT); + } + + public final void setInterarrivalTime(simkit.random.RandomVariate interarrivalTime) { + this.interarrivalTime = interarrivalTime; + } + + public simkit.random.RandomVariate getInterarrivalTime() { + return interarrivalTime; + } + + public int getNumberArrivals() { + return numberArrivals; + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/EntityCreator.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/EntityCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..72fac7aaf60500597af6fa0d40c54d2b7d36b05b --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/EntityCreator.java @@ -0,0 +1,42 @@ +package examples; + +// Standard library imports +import java.util.*; + +// Application specific imports +import simkit.*; +import simkit.random.*; + +public class EntityCreator extends SimEntityBase { + + /* Simulation Parameters */ + + /* None */ + + /* Simulation State Variables */ + + /* None */ + + @viskit.ParameterMap ( + names = {}, + types = {} + ) + + /** Creates a new default instance of EntityCreator */ + public EntityCreator() { + } + + public void doArrival() { + + waitDelay("EntityArrival", 0.0, Priority.DEFAULT, (Object) new simkit.Entity()); + } + + public void doEntityArrival(simkit.Entity customer) { + + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/ServerGeneric.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/ServerGeneric.java new file mode 100644 index 0000000000000000000000000000000000000000..294206dc6983676231769ffe4e07ad375dd9c353 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/ServerGeneric.java @@ -0,0 +1,160 @@ +package examples; + +// Standard library imports +import java.util.*; + +// Application specific imports +import simkit.*; +import simkit.random.*; + +public class ServerGeneric extends SimEntityBase { + + /* Simulation Parameters */ + + /** */ + private int totalNumberServers; + + /** */ + private simkit.random.RandomVariate serviceTimeGenerator; + + /* Simulation State Variables */ + + /** */ + protected int numberAvailableServers; + + /** */ + protected java.util.LinkedList<simkit.Entity> queue = new java.util.LinkedList<>(); + + /** */ + protected double delayInQueue; + + /** */ + protected double timeInSystem; + + @viskit.ParameterMap ( + names = {"totalNumberServers", + "serviceTimeGenerator"}, + types = {"int", + "simkit.random.RandomVariate"} + ) + + /** Creates a new default instance of ServerGeneric */ + public ServerGeneric() { + } + + public ServerGeneric(int totalNumberServers, + simkit.random.RandomVariate serviceTimeGenerator) { + setTotalNumberServers(totalNumberServers); + setServiceTimeGenerator(serviceTimeGenerator); + } + + @Override + public void reset() { + super.reset(); + numberAvailableServers = totalNumberServers; + queue = new java.util.LinkedList<simkit.Entity>(); + } + + /** Bootstraps the first simulation event */ + public void doRun() { + + firePropertyChange("numberAvailableServers", getNumberAvailableServers()); + firePropertyChange("queue", getQueue()); + + } + + public void doArrival(simkit.Entity customer) { + + /* Code insertion for Event Arrival */ + customer.stampTime(); + /* End Code insertion */ + + /* StateTransition for queue */ + java.util.LinkedList<simkit.Entity> _old_Queue = getQueue(); + queue.add(customer); + firePropertyChange("queue", _old_Queue, getQueue()); + + if (numberAvailableServers > 0) { + waitDelay("StartService", 0.0, Priority.HIGH); + } + } + + public void doStartService() { + + /* Code insertion for Event StartService */ + Entity customer = queue.getFirst(); + /* End Code insertion */ + + /* StateTransition for numberAvailableServers */ + int _old_NumberAvailableServers = getNumberAvailableServers(); + numberAvailableServers = numberAvailableServers - 1; + firePropertyChange("numberAvailableServers", _old_NumberAvailableServers, getNumberAvailableServers()); + + /* StateTransition for queue */ + java.util.LinkedList<simkit.Entity> _old_Queue = getQueue(); + queue.removeFirst(); + firePropertyChange("queue", _old_Queue, getQueue()); + + /* StateTransition for delayInQueue */ + double _old_DelayInQueue = getDelayInQueue(); + delayInQueue = customer.getElapsedTime(); + firePropertyChange("delayInQueue", _old_DelayInQueue, getDelayInQueue()); + + waitDelay("EndService", serviceTimeGenerator.generate(), Priority.DEFAULT, (Object) customer); + } + + public void doEndService(simkit.Entity customer) { + + /* StateTransition for numberAvailableServers */ + int _old_NumberAvailableServers = getNumberAvailableServers(); + numberAvailableServers = numberAvailableServers + 1; + firePropertyChange("numberAvailableServers", _old_NumberAvailableServers, getNumberAvailableServers()); + + /* StateTransition for timeInSystem */ + double _old_TimeInSystem = getTimeInSystem(); + timeInSystem = customer.getElapsedTime(); + firePropertyChange("timeInSystem", _old_TimeInSystem, getTimeInSystem()); + + if (queue.size() > 0) { + waitDelay("StartService", 0.0, Priority.HIGH); + } + } + + public final void setTotalNumberServers(int totalNumberServers) { + this.totalNumberServers = totalNumberServers; + } + + public int getTotalNumberServers() { + return totalNumberServers; + } + + public final void setServiceTimeGenerator(simkit.random.RandomVariate serviceTimeGenerator) { + this.serviceTimeGenerator = serviceTimeGenerator; + } + + public simkit.random.RandomVariate getServiceTimeGenerator() { + return serviceTimeGenerator; + } + + public int getNumberAvailableServers() { + return numberAvailableServers; + } + + @SuppressWarnings("unchecked") + public java.util.LinkedList<simkit.Entity> getQueue() { + return (java.util.LinkedList<simkit.Entity>) queue.clone(); + } + + public double getDelayInQueue() { + return delayInQueue; + } + + public double getTimeInSystem() { + return timeInSystem; + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TestAssembly.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TestAssembly.java new file mode 100644 index 0000000000000000000000000000000000000000..17f6b479833267663c4879963f18cf504f27c4e8 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TestAssembly.java @@ -0,0 +1,106 @@ +package examples; + +public class TestAssembly extends viskit.assembly.ViskitAssembly { + + public TestAssembly() { + super(); + setStopTime(100.0); + setVerbose(false); + setNumberReplications(1); + setPrintReplicationReports(true); + setPrintSummaryReport(true); + setSaveReplicationData(false); + } + + @Override + protected void createSimEntities() { + + addSimEntity( "arrivalProcess", + new examples.ArrivalProcess( + simkit.random.RandomVariateFactory.getInstance( + "Exponential", + 1.6 + ) + ) + ); + + addSimEntity( "twoTypeServer", + new examples.TwoTypeServer( + 1, + 2, + simkit.random.RandomVariateFactory.getInstance( + "Exponential", + 0.9 + ), + simkit.random.RandomVariateFactory.getInstance( + "Exponential", + 1.2 + ) + ) + ); + + addAdapter("adptr", "Arrival", "Arrival", "arrivalProcess", "twoTypeServer"); + + super.createSimEntities(); + } + + @Override + public void createPropertyChangeListeners() { + addPropertyChangeListenerConnection("numAvailServerAStat", "numberAvailableServersA", "twoTypeServer"); + + addPropertyChangeListenerConnection("queueStat", "queue", "twoTypeServer"); + + addPropertyChangeListenerConnection("numAvailServerBStat", "numberAvailableServersB", "twoTypeServer"); + + super.createPropertyChangeListeners(); + } + + @Override + public void createReplicationStats() { + addReplicationStats("numAvailServerAStat", + new simkit.stat.SimpleStatsTimeVarying( + "numberAvailableServersA" + ) + ); + + addReplicationStatsListenerConnection("numAvailServerAStat", "numberAvailableServersA", "twoTypeServer"); + + addReplicationStats("queueStat", + new simkit.stat.SimpleStatsTimeVarying( + "queue" + ) + ); + + addReplicationStatsListenerConnection("queueStat", "queue", "twoTypeServer"); + + addReplicationStats("numAvailServerBStat", + new simkit.stat.SimpleStatsTimeVarying( + "numberAvailableServersB" + ) + ); + + addReplicationStatsListenerConnection("numAvailServerBStat", "numberAvailableServersB", "twoTypeServer"); + + super.createReplicationStats(); + } + + @Override + public void createDesignPointStats() { + super.createDesignPointStats(); + } + + @Override + public void printInfo() { + System.out.println(); + System.out.println("Entity Details"); + System.out.println("--------------"); + System.out.println(getSimEntityByName("arrivalProcess")); + System.out.println(getSimEntityByName("twoTypeServer")); + System.out.println("--------------"); + } + + public static void main(String[] args) { + TestAssembly testAssembly = new TestAssembly(); + new Thread(testAssembly).start(); + } +} diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TwoTypeServer.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TwoTypeServer.java new file mode 100644 index 0000000000000000000000000000000000000000..b0465276cef6b56f2fe773c019d77b1304ba6263 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TwoTypeServer.java @@ -0,0 +1,196 @@ +package examples; + +// Standard library imports +import java.util.*; + +// Application specific imports +import simkit.*; +import simkit.random.*; + +public class TwoTypeServer extends SimEntityBase { + + /* Simulation Parameters */ + + /** */ + private int numberServersA; + + /** */ + private int numberServersB; + + /** */ + private simkit.random.RandomVariate serviceTimeA; + + /** */ + private simkit.random.RandomVariate serviceTimeB; + + /* Simulation State Variables */ + + /** */ + protected int numberAvailableServersA; + + /** */ + protected int numberAvailableServersB; + + /** */ + protected int queue; + + @viskit.ParameterMap ( + names = {"numberServersA", + "numberServersB", + "serviceTimeA", + "serviceTimeB"}, + types = {"int", + "int", + "simkit.random.RandomVariate", + "simkit.random.RandomVariate"} + ) + + /** Creates a new default instance of TwoTypeServer */ + public TwoTypeServer() { + } + + public TwoTypeServer(int numberServersA, + int numberServersB, + simkit.random.RandomVariate serviceTimeA, + simkit.random.RandomVariate serviceTimeB) { + setNumberServersA(numberServersA); + setNumberServersB(numberServersB); + setServiceTimeA(serviceTimeA); + setServiceTimeB(serviceTimeB); + } + + @Override + public void reset() { + super.reset(); + numberAvailableServersA = getNumberServersA(); + numberAvailableServersB = getNumberServersB(); + queue = 0; + } + + /** Bootstraps the first simulation event */ + public void doRun() { + + firePropertyChange("numberAvailableServersA", getNumberAvailableServersA()); + firePropertyChange("numberAvailableServersB", getNumberAvailableServersB()); + firePropertyChange("queue", getQueue()); + + } + + public void doArrival() { + + /* StateTransition for queue */ + int _old_Queue = getQueue(); + queue = queue + 1; + firePropertyChange("queue", _old_Queue, getQueue()); + + if (getNumberAvailableServersA() > 0) { + waitDelay("StartServiceA", 0.0, Priority.DEFAULT); + } + if (getNumberAvailableServersA() == 0 && getNumberAvailableServersB() > 0) { + waitDelay("StartServiceB", 0.0, Priority.DEFAULT); + } + } + + public void doStartServiceA() { + + /* StateTransition for numberAvailableServersA */ + int _old_NumberAvailableServersA = getNumberAvailableServersA(); + numberAvailableServersA = numberAvailableServersA - 1; + firePropertyChange("numberAvailableServersA", _old_NumberAvailableServersA, getNumberAvailableServersA()); + + /* StateTransition for queue */ + int _old_Queue = getQueue(); + queue = queue - 1; + firePropertyChange("queue", _old_Queue, getQueue()); + + waitDelay("EndServiceA", serviceTimeA.generate(), Priority.DEFAULT); + } + + public void doStartServiceB() { + + /* StateTransition for numberAvailableServersB */ + int _old_NumberAvailableServersB = getNumberAvailableServersB(); + numberAvailableServersB = numberAvailableServersB - 1; + firePropertyChange("numberAvailableServersB", _old_NumberAvailableServersB, getNumberAvailableServersB()); + + /* StateTransition for queue */ + int _old_Queue = getQueue(); + queue = queue - 1; + firePropertyChange("queue", _old_Queue, getQueue()); + + waitDelay("EndServiceB", serviceTimeB.generate(), Priority.DEFAULT); + } + + public void doEndServiceA() { + + /* StateTransition for numberAvailableServersA */ + int _old_NumberAvailableServersA = getNumberAvailableServersA(); + numberAvailableServersA = numberAvailableServersA + 1; + firePropertyChange("numberAvailableServersA", _old_NumberAvailableServersA, getNumberAvailableServersA()); + + if (queue > 0) { + waitDelay("StartServiceA", 0.0, Priority.HIGH); + } + } + + public void doEndServiceB() { + + /* StateTransition for numberAvailableServersB */ + int _old_NumberAvailableServersB = getNumberAvailableServersB(); + numberAvailableServersB = numberAvailableServersB + 1; + firePropertyChange("numberAvailableServersB", _old_NumberAvailableServersB, getNumberAvailableServersB()); + + if (queue > 0) { + waitDelay("StartServiceB", 0.0, Priority.HIGH); + } + } + + public final void setNumberServersA(int numberServersA) { + this.numberServersA = numberServersA; + } + + public int getNumberServersA() { + return numberServersA; + } + + public final void setNumberServersB(int numberServersB) { + this.numberServersB = numberServersB; + } + + public int getNumberServersB() { + return numberServersB; + } + + public final void setServiceTimeA(simkit.random.RandomVariate serviceTimeA) { + this.serviceTimeA = serviceTimeA; + } + + public simkit.random.RandomVariate getServiceTimeA() { + return serviceTimeA; + } + + public final void setServiceTimeB(simkit.random.RandomVariate serviceTimeB) { + this.serviceTimeB = serviceTimeB; + } + + public simkit.random.RandomVariate getServiceTimeB() { + return serviceTimeB; + } + + public int getNumberAvailableServersA() { + return numberAvailableServersA; + } + + public int getNumberAvailableServersB() { + return numberAvailableServersB; + } + + public int getQueue() { + return queue; + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TwoTypeServerAssembly.java b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TwoTypeServerAssembly.java new file mode 100644 index 0000000000000000000000000000000000000000..127a9cdf783ffb99e33d4589d25905432dbf444c --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/src/examples/TwoTypeServerAssembly.java @@ -0,0 +1,108 @@ +package examples; + +public class TwoTypeServerAssembly extends viskit.assembly.ViskitAssembly { + + public TwoTypeServerAssembly() { + super(); + setStopTime(100.0); + setVerbose(false); + setNumberReplications(1); + setPrintReplicationReports(true); + setPrintSummaryReport(true); + setSaveReplicationData(false); + } + + @Override + protected void createSimEntities() { + + addSimEntity( "arrivalProcess", + new examples.ArrivalProcess( + simkit.random.RandomVariateFactory.getInstance( + "Exponential", + 1.7 + ) + ) + ); + + addSimEntity( "twoTypeServer", + new examples.TwoTypeServer( + 1, + 2, + simkit.random.RandomVariateFactory.getInstance( + "Exponential", + 1.6 + ), + simkit.random.RandomVariateFactory.getInstance( + "Exponential", + 1.6 + ) + ) + ); + + addAdapter("adptr_0", "Arrival", "Arrival", "arrivalProcess_0", "twoTypeServer_1"); + addAdapter("adptr0", "Arrival", "Arrival", "arrivalProcess", "twoTypeServer"); + addAdapter("adptr_1", "Arrival", "Arrival", "arrivalProcess", "twoTypeServer"); + + super.createSimEntities(); + } + + @Override + public void createPropertyChangeListeners() { + addPropertyChangeListenerConnection("numAvailServersBStat", "numberAvailableServersB", "twoTypeServer"); + + addPropertyChangeListenerConnection("numAvailServersAStat", "numberAvailableServersA", "twoTypeServer"); + + addPropertyChangeListenerConnection("numberInQueueStat", "queue", "twoTypeServer"); + + super.createPropertyChangeListeners(); + } + + @Override + public void createReplicationStats() { + addReplicationStats("numAvailServersAStat", + new simkit.stat.SimpleStatsTimeVarying( + "numberAvailableServersA" + ) + ); + + addReplicationStatsListenerConnection("numAvailServersAStat", "numberAvailableServersA", "twoTypeServer"); + + addReplicationStats("numberInQueueStat", + new simkit.stat.SimpleStatsTimeVarying( + "queue" + ) + ); + + addReplicationStatsListenerConnection("numberInQueueStat", "queue", "twoTypeServer"); + + addReplicationStats("numAvailServersBStat", + new simkit.stat.SimpleStatsTimeVarying( + "numberAvailableServersB" + ) + ); + + addReplicationStatsListenerConnection("numAvailServersBStat", "numberAvailableServersB", "twoTypeServer"); + + super.createReplicationStats(); + } + + @Override + public void createDesignPointStats() { + super.createDesignPointStats(); + } + + @Override + public void printInfo() { + System.out.println(); + System.out.println("Entity Details"); + System.out.println("--------------"); + System.out.println(getSimEntityByName("arrivalProcess")); + System.out.println(getSimEntityByName("twoTypeServer")); + System.out.println("--------------"); + } + + public static void main(String[] args) { + TwoTypeServerAssembly twoTypeServerAssembly = new TwoTypeServerAssembly(); + new Thread(twoTypeServerAssembly).start(); + } +} diff --git a/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/viskitProject.xml b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/viskitProject.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c7a80c56592bbedd169a0c1b229cebeccf07539 --- /dev/null +++ b/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/viskitProject.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ViskitProject> + <AnalystReports name="AnalystReports" /> + <AssembliesDirectory name="Assemblies" /> + <EventGraphsDirectory name="EventGraphs" /> + <BuildDirectory name="build"> + <ClassesDirectory name="classes" /> + <SourceDirectory name="src" /> + </BuildDirectory> + <DistDirectory name="dist" /> + <LibDirectory name="lib" /> + <Project name="FinalProject" /> + <Cached> + <EventGraphs class="/Users/terry/Downloads/FinalProject/build/classes/examples/TwoTypeServer.class" digest="-512d144abdf3a25c1fd0468cca19fbe6" xml="/Users/terry/Downloads/FinalProject/EventGraphs/examples/TwoTypeServer.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServer.class" digest="5dde00358e407bfd4311883c8721b5e3" xml="C:/Users/advan/MyViskitProjects/FinalProject/EventGraphs/examples/TwoTypeServer.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class" digest="690320b04ecb012c8a9ca57e07351225" xml="C:/Users/advan/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcessTwo.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class" digest="2c654b4016e3310aea37d46120d91c16" xml="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/ArrivalProcess.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/EntityCreator.class" digest="7020026ff300a02fa0ca78b16afd0a77" xml="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/EntityCreator.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/ServerGeneric.class" digest="256ca2b5c866392a6c42353961b30c1a" xml="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/viskit/MyViskitProjects/DefaultProject/EventGraphs/examples/ServerGeneric.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class" digest="690320b04ecb012c8a9ca57e07351225" xml="C:/Users/advan/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcess.xml" /> + <EventGraphs class="C:/Users/advan/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServer.class" digest="5dde00358e407bfd4311883c8721b5e3" xml="C:/Users/advan/MyViskitProjects/FinalProject/EventGraphs/examples/TwoTypeServer.xml" /> + <EventGraphs class="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class" digest="690320b04ecb012c8a9ca57e07351225" xml="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcess.xml" /> + <EventGraphs class="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/ArrivalProcess.class" digest="690320b04ecb012c8a9ca57e07351225" xml="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/ArrivalProcessTwo.xml" /> + <EventGraphs class="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/build/classes/examples/TwoTypeServer.class" digest="5dde00358e407bfd4311883c8721b5e3" xml="C:/Users/advan/Netbeans/NetworkedGraphicsMV3500/assignments/src/MV3500Cohort2024JulySeptember/projects/Yu/MyViskitProjects/FinalProject/EventGraphs/examples/TwoTypeServer.xml" /> + </Cached> +</ViskitProject> +