acquire: amount ofResource: resourceName produce: amount ofResource: resourceName release: aStaticResource
Coordinated Resource: More than one object needs to know
coordinate: resourceName acquireResource: resourceName produceResource: resourceName resume: anEvent
Whether a resource is simple or coordinated depends on your model
Nothing at all initialization methods
defineResources self produce: 15 of: 'Jelly Beans'.defineArrivalSchedule self scheduleArrivalOf: Visitor accordingTo: (Uniform from: 1 to: 3).
Visitor Task method
tasks self aquire: 2 ofResource: 'Jelly Beans'. self holdFor: 2.Sample output:
0.0 Visitor 1 enters 2.0 Visitor 1 exits 2.03671 Visitor 2 enters 4.03671 Visitor 2 exits 4.34579 Visitor 3 enters 5.92712 Visitor 4 enters 6.34579 Visitor 3 exits 7.92712 Visitor 4 exits 8.46271 Visitor 5 enters 10.4627 Visitor 5 exits 10.5804 Visitor 6 enters 12.5804 Visitor 6 exits 12.7189 Visitor 7 enters 14.7189 Visitor 7 exits 15.0638 Visitor 8 enters 17.6466 Visitor 9 enters 19.8276 Visitor 10 enterstasks (self inquireFor: 2 ofResource: 'Jelly Beans') ifTrue: [self aquire: 2 ofResource: 'Jelly Beans'. self holdFor: 2].
Simulation subclass: CarWash instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'defineArrivalSchedule self scheduleArrivalOf: Wash accordingTo: (Exponential mean: 20). self scheduleArrivalOf: WashAndWax accordingTo: (Exponential mean: 30). self scheduleArrivalOf: (Washer new) at: 0.0.
defineResources self coordinate: 'CarCustomer'
SimulationObject subclass Washer instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'
tasks | carRequest | [true] whileTrue: [carRequest := self aquireResource: 'CarCustomer'. (carRequest condition wants: 'wash') ifTrue: [self holdFor: (Uniform from: 12.0 to: 26.0) next]. (carRequest condition wants: 'wax') ifTrue: [self holdFor: (Uniform from: 8.0 to: 12.0) next]. self resume: carRequest.
SimulationObject subclass Wash instanceVariableNames: 'service' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'
wants: aService ^service includes: aService
initialize super initalize. service := #('wash').
tasks self produceResource: 'CarCustomer'
Wash subclass WashAndWax instanceVariableNames: 'service' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'
initialize super initalize. service := #('wash' 'wax').
Simulation subclass Bank Simulation instanceVariableNames: '' classVariableNames: 'Hour' poolDictionaries: '' catagory: 'Simulation-Demos'defineArrivalSchedule self scheduleArrivalOf: BankCustomer accordingTo: (Normal mean: 10 deviation: 5) startingAt: 9 * Hour. self scheduleArrivalOf: (BankTeller name: 'first') at: 9 * Hour. self scheduleArrivalOf: (BankTeller name: 'second') at: 9 * Hour. self scheduleArrivalOf: BankCustomer accordingTo: (SampleSpaceWithoutReplacement data: ((1 to: 20 collect [:i|3])) startingAt: 12 * Hour. self schedule: [self hireMoreTellers] at: 12 * Hour. self schedule: [self finishUp] at: 15 * Hour.
defineResources self coordinate: TellerCustomer
hireMoreTellers self schedule: [(LunchtimeTeller name: 'first') startUp after: 0.0. self schedule: [(LunchtimeTeller name: 'second') startUp after: 0.0.
SimulationObject subclass BankCustomer instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'
tasks self produceResource: 'TellerCustomer'
SimulationObject subclass BankTeller instanceVariableNames: 'service' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'
tasks | customerRequest | [true] whileTrue: [ (self numberOfProvidersOfResource: 'TellerCustomer' > 0) ifTrue: [self counterWork] ifFalse: [self deskWork]]
counterWork | customerRequest | customerRequest := self acqureResource: 'TellerCustomer'. self holdFor: (Uniform from: 2 to: 15) next. self resume: customerRequest.
deskWork self holdFor: (Uniform from: 1 to 5) next BankTeller subclass LunchtimeTeller instanceVariableNames: 'getDone' classVariableNames: '' poolDictionaries: '' catagory: 'Simulation-Demos'
initialize super initialize getDone := false. (Simulation active) schedule: [self finishUp] after: 60.
finishUp getDone ifTrue: [super finishUp] ifFalse: [getDone := true]
tasks getDone whileFalse: [self counterWork]. self finishUp.
News | CS2390 Sum'97 Home Page | MMC | STABLE
Questions/comments/concerns to guzdial@cc.gatech.edu
Page last updated 6/20/97; 4:06:33 PM