Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
Preloaded Examples
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Monterey Phoenix
MP Model Collection
Preloaded Examples
Commits
48564c2c
Commit
48564c2c
authored
3 years ago
by
Giammarco, Kristin M
Browse files
Options
Downloads
Patches
Plain Diff
Update models/Application_examples/Baseball_At_Bat
parent
67762eec
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
models/Application_examples/Baseball_At_Bat
+297
-0
297 additions, 0 deletions
models/Application_examples/Baseball_At_Bat
with
297 additions
and
0 deletions
models/Application_examples/Baseball_At_Bat
+
297
−
0
View file @
48564c2c
/*┬────────────────────────────────────────────────────────┐
│*│ ┌─[ Title and Authors ]──────────────────────────────┐ │
│*│ │ Model of Baseball At Bat │ │
│*│ │ Created by Pamela Dyer in July, 2021. │ │
│*│ │ Edited by Pamela Dyer in August, 2021. │ │
│*│ │ Edited by Pamela Dyer in February, 2022. │ │
│*│ │ Edited by Pamela Dyer in March, 2022. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Purpose ]────────────────────────────────────────┐ │
│*│ │ To show that MP can be used to model results from │ │
│*│ │ interactions that are found in a very well-known │ │
│*│ │ game such as Baseball. This model demonstrates a │ │
│*│ │ baseball at bat involving 1 Pitcher and 1 Batter. │ │
│*│ │ It is important to note, though, that this model │ │
│*│ │ shows only a selection of all of the possible │ │
│*│ │ Batter outcomes that can actually occur in the │ │
│*│ │ game of Baseball. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Description ]────────────────────────────────────┐ │
│*│ │ Scope 1 shows the possible outcomes for the Batter │ │
│*│ │ once receiving 1 pitch from the Pitcher. Scopes 2, │ │
│*│ │ 3, 4, and 5 show the possible outcomes for 2, 3, 4,│ │
│*│ │ and 5 pitches, respectively. There are certain │ │
│*│ │ outcomes (events) that end the at bat, which means │ │
│*│ │ there is no further pitch after them. These can │ │
│*│ │ occur after the 1st, 2nd, 3rd, or later pitch, │ │
│*│ │ depending on specifics with regards to the rules │ │
│*│ │ of Baseball. For example: if on the 1st pitch the │ │
│*│ │ Batter hits a Fly Ball and it is caught by the │ │
│*│ │ opponent, the at bat ends. Scope 2 will never have │ │
│*│ │ traces where a Fly Ball was caught on the 1st pitch│ │
│*│ │ and another event happened on the 2nd pitch - │ │
│*│ │ impossible with only 1 Batter. │ │
│*│ │ │ │
│*│ │ A snapshot of typical baseball occurrences are │ │
│*│ │ highlighted in the Pitcher and Batter ROOT events. │ │
│*│ │ Fastball, Breaking_Ball, and Changeup represent the│ │
│*│ │ three main categories of baseball pitches. The │ │
│*│ │ composite events No_Swing, Swing_and_Miss, │ │
│*│ │ Swing_and_Foul, and Swing_and_Fair are four broad │ │
│*│ │ categories representing what the Batter can do with│ │
│*│ │ the incoming pitch. The atomic events Ball, │ │
│*│ │ Strike_Looking, and Strike_Swinging all have an │ │
│*│ │ optional event following them that is enclosed in │ │
│*│ │ square brackets [ ]. One of the atomic events under│ │
│*│ │ Swing_and_Foul and all of the atomic events under │ │
│*│ │ Swing_and_Fair have an additional event following │ │
│*│ │ them that always occurs afterwards. │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ References ]─────────────────────────────────────┐ │
│*│ │ Dhakar, Lokesh. "Baseball pitches illustrated." │ │
│*│ │ Baseball pitches illustrated | Lokesh Dhakar. │ │
│*│ │ Accessed March 14, 2022. │ │
│*│ │ https://lokeshdhakar.com/baseball-pitches-illustrated/
│*│ │ │ │
│*│ │ "Walk (BB): Glossary." MLB.com. │ │
│*│ │ Accessed March 14, 2022. │ │
│*│ │ https://www.mlb.com/glossary/standard-stats/walk│ │
│*│ │ │ │
│*│ │ "Strikeout (SO, K): Glossary." MLB.com. │ │
│*│ │ Accessed March 14, 2022. │ │
│*│ │ https://www.mlb.com/glossary/standard-stats/strikeout
│*│ │ │ │
│*│ │ "Hit." Sports Definitions. Accessed March 14, 2022.│ │
│*│ │ https://www.sportsdefinitions.com/baseball/hit/ │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Search Terms ]───────────────────────────────────┐ │
│*│ │ behavior, baseball at bat; coordination, event; │ │
│*│ │ ENSURE condition; SAY statement; trace annotation; │ │
│*│ │ coordination, nested composition │ │
│*│ └────────────────────────────────────────────────────┘ │
│*│ │
│*│ ┌─[ Instructions ]───────────────────────────────────┐ │
│*│ │ Run for Scopes 1 and up. It is important to note │ │
│*│ │ that starting at Scope 3 and above, graphing all │ │
│*│ │ generated traces does take some time when using │ │
│*│ │ MP-Firebird, as will the inspection of the traces. │ │
│*│ ├─[ Run Statistics ]─────────────────────────────────┤ │
│*│ │ Scope 1: 39 traces in less than 1 sec. │ │
│*│ │ Scope 2: 507 traces in less than 1 sec. │ │
│*│ │ Scope 3: 6123 traces in approx. 1.2 min. │ │
│*│ └────────────────────────────────────────────────────┘ │
└*┴───────────────────────────────────────────────────────*/
SCHEMA Baseball_At_Bat
ROOT Pitcher: Choose_Pitch;
Choose_Pitch: (+ ( Fastball | Breaking_Ball | Changeup ) +);
ROOT Batter: (+ ( No_Swing | Swing_and_Miss | Swing_and_Foul | Swing_and_Fair ) +);
No_Swing: ( Ball [ WALK ] | Strike_Looking [ STRIKEOUT ] );
Swing_and_Miss: Strike_Swinging [ STRIKEOUT ];
Swing_and_Foul: ( Strike_Foul | NonStrike_Foul | Caught_Foul OUT );
Swing_and_Fair: ( Single HIT | Double HIT | Triple HIT | Home_Run HIT |
Caught_Line_Drive OUT | Caught_Pop_Up OUT | Caught_Fly_Ball OUT |
Fielded_Grounder_thrown_to_First_Base OUT );
COORDINATE $x: ( Fastball | Breaking_Ball | Changeup ) FROM Pitcher,
$y: ( No_Swing |
Swing_and_Miss |
Swing_and_Foul |
Swing_and_Fair ) FROM Batter
DO ADD $x PRECEDES $y; OD;
/* The number of Balls in the at bat can never exceed 4. */
ENSURE #Ball <= 4;
/* If the number of Balls in the at bat is less than 4, the Batter cannot Walk.
Also: If the Batter did not Walk, the number of Balls in the at bat was
less than 4. */
ENSURE #Ball < 4 <-> #WALK == 0;
/* If the number of Balls in the at bat is equal to 4, the Batter does Walk.
Also: If the Batter did Walk, the number of Balls in the at bat was
equal to 4. */
ENSURE #Ball == 4 <-> #WALK == 1;
/* If the Batter does Walk, then there cannot be another pitch to the Batter.
Therefore, with a Walk, the at bat always ends. This is because WALK means
Batter takes first base safely. */
COORDINATE $w: WALK
DO ENSURE #$$EVENT AFTER $w == 0;
OD;
/* The number of Strikes the Batter can receive from hitting the baseball into
Foul territory during the at bat can never exceed 2. Strike_Foul cannot be the
3rd and final strike. */
ENSURE #Strike_Foul <= 2;
/* The NonStrike_Foul count cannot begin until at least the 3rd pitch. Here the
meta-symbol $$ATOM is referring to any atomic event that is present prior to
NonStrike_Foul in any given trace. Therefore, the "greater than or equal to 5"
below comes from the minimum requirement: 2 previous pitches + 2 Batter results
from those pitches + 1 additional pitch. NonStrike_Foul may occur for the first
time as the Batter result from that additional (3rd) pitch. */
COORDINATE $n: NonStrike_Foul
DO ENSURE #$$ATOM BEFORE $n >= 5;
OD;
/* In addition to the COORDINATE statement just above, it is also a requirement
that the total number of Strikes in the at bat (from any combination of
Strike_Looking, Strike_Swinging, and Strike_Foul) is equal to 2 before the
NonStrike_Foul count can begin. The term NonStrike_Foul is essentially just
referring to any time the Batter hits the baseball into Foul territory after
having already accumulated 2 strikes. In the game of Baseball, there is no set
end value for how many times a Batter can hit the baseball into Foul territory
during an at bat. */
COORDINATE $n: NonStrike_Foul
DO ENSURE #Strike_Looking + #Strike_Swinging + #Strike_Foul == 2;
OD;
/* The total number of Strikes the Batter can receive during the at bat
(from any combination of Strike_Looking, Strike_Swinging, and Strike_Foul)
can never exceed 3. */
ENSURE #Strike_Looking + #Strike_Swinging + #Strike_Foul <= 3;
/* If the total number of Strikes in the at bat is less than 3, then the Batter
cannot receive a Strikeout. Also, if the Batter did not receive a Strikeout,
then the total number of Strikes in the at bat was less than 3. */
ENSURE #Strike_Looking + #Strike_Swinging + #Strike_Foul < 3 <-> #STRIKEOUT == 0;
/* If the total number of Strikes in the at bat is equal to 3, then the Batter
receives a Strikeout. Also, if the Batter received a Strikeout, then the
total number of Strikes in the at bat was equal to 3. */
ENSURE #Strike_Looking + #Strike_Swinging + #Strike_Foul == 3 <-> #STRIKEOUT == 1;
/* If the Batter does receive a Strikeout, then there cannot be another pitch
to the Batter. Therefore, with a Strikeout, the at bat always ends. */
COORDINATE $s: STRIKEOUT
DO ENSURE #$$EVENT AFTER $s == 0;
OD;
/* If the Batter gets Out resulting from any of the applicable events shown
above, then there cannot be another pitch to the Batter. Therefore, with an Out,
the at bat always ends. */
COORDINATE $o: OUT
DO ENSURE #$$EVENT AFTER $o == 0;
OD;
/* If the Batter gets a Hit resulting from any of the applicable events shown
above, then there cannot be another pitch to the Batter. Therefore, with a Hit,
the at bat always ends. This is because HIT means Batter safely reaches or
passes first base. */
COORDINATE $h: HIT
DO ENSURE #$$EVENT AFTER $h == 0;
OD;
/* If the number of Balls recorded during the at bat is equal to 4, then those
traces will be annotated with a message that the Batter did Walk. */
IF #Ball == 4 THEN
SAY("BB (WALK)");
FI;
/* If the total number of Strikes recorded during the at bat equals 3, those
traces will be annotated with a message that the Batter received a Strikeout. */
IF #Strike_Looking + #Strike_Swinging + #Strike_Foul == 3 THEN
SAY("STRIKEOUT");
FI;
/* If Strike_Looking is the event immediately preceding STRIKEOUT, then
those traces will be annotated with an additional message that the at bat ended
in a Strikeout Looking, which in Baseball is denoted by a ꓘ. */
COORDINATE $b: STRIKEOUT
DO COORDINATE $a: Strike_Looking SUCH THAT $a PRECEDES $b
DO
ADD SAY("ꓘ (Strikeout Looking)")
PRECEDES $a;
OD;
OD;
/* If Strike_Swinging is the event immediately preceding STRIKEOUT, then
those traces will be annotated with an additional message that the at bat ended
in a Strikeout Swinging, which in Baseball is denoted by a K. */
COORDINATE $d: STRIKEOUT
DO COORDINATE $c: Strike_Swinging SUCH THAT $c PRECEDES $d
DO
ADD SAY("K (Strikeout Swinging)")
PRECEDES $c;
OD;
OD;
/* It is necessary to note again that the event Strike_Foul cannot be the event
immediately preceding STRIKEOUT. Also, this model does not take into account
certain nuances that can occur on 3rd strikes, such as foul tips and instances
where the catcher does not cleanly hold onto the baseball, for example. */
/* Shown below are the remaining trace annotations for if any of the applicable
events occur once, all of which end the at bat. */
IF #Caught_Foul > 0 THEN
SAY("OUT - Foul Out");
FI;
IF #Single > 0 THEN
SAY("HIT - 1B (Single)");
FI;
IF #Double > 0 THEN
SAY("HIT - 2B (Double)");
FI;
IF #Triple > 0 THEN
SAY("HIT - 3B (Triple)");
FI;
IF #Home_Run > 0 THEN
SAY("HIT - HR (Home Run)");
FI;
IF #Caught_Line_Drive > 0 THEN
SAY("OUT - Line Out");
FI;
IF #Caught_Pop_Up > 0 THEN
SAY("OUT - Pop Out");
FI;
IF #Caught_Fly_Ball > 0 THEN
SAY("OUT - Fly Out");
FI;
IF #Fielded_Grounder_thrown_to_First_Base > 0 THEN
SAY("OUT - Ground Out");
FI;
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment