@@ -7,12 +7,16 @@ Part of the problem is the question "who will win?"
7
7
8
8
ASS tries to answer that question by allowing a simulation of possible outcome.
9
9
10
+ Additionally, various utilities for path-finding or fast location queries are also available.
11
+
10
12
## References
11
13
12
14
[ Appveyor Build Artifact] ( https://ci.appveyor.com/project/Bytekeeper/ass/build/artifacts )
13
15
14
16
[ Javadoc] ( http://docs.bytekeeper.org/ )
15
17
18
+ [ JBWAPI] ( https://github.com/JasperGeurtz/JBWAPI/ )
19
+
16
20
[ BWAPI4J] ( https://github.com/OpenBW/BWAPI4J )
17
21
18
22
[ BWMirror] ( https://github.com/vjurenka/BWMirror )
@@ -24,8 +28,8 @@ ASS tries to answer that question by allowing a simulation of possible outcome.
24
28
25
29
26
30
## Usage
27
- While the simulator is API independent, [ BWAPI4J ] ( https://github.com/OpenBW/BWAPI4J )
28
- is working out of the box. [ JBWAPI ] ( https://github.com/JasperGeurtz/JBWAPI/ )
31
+ While the simulator is API independent, [ JBWAPI ] ( https://github.com/JasperGeurtz/JBWAPI/ )
32
+ and [ BWAPI4J ] ( https://github.com/OpenBW/BWAPI4J ) work out of the box.
29
33
[ BWMirror] ( https://github.com/vjurenka/BWMirror ) should also
30
34
work but is not thoroughly tested.
31
35
@@ -75,21 +79,11 @@ To get it, either download and build it yourself or grab the
75
79
the ` BWAPI4JAgentFactory ` (resp. ` BWMirrorAgentFactory ` ) can be used to create an ` Agent ` for an existing ` Unit ` .
76
80
Creating ` Agents ` by using just a ` UnitType ` is also possible.
77
81
78
- ### Simulator
82
+ # Simulator
79
83
The main class is ` Simulator ` . You can add ` Agents ` for player A or player B here.
80
84
After doing that, you can simulate a number of frames (default: 96). Next, you
81
85
retrieve the result and check if it's to your liking (some of your units survived?).
82
86
83
- ### Evaluator
84
- Another way to estimate outcome of a battle is to use the ` Evaluator ` . It does not simulate
85
- agents as the ` Simulator does ` . Instead it uses some heuristics to determine a
86
- "how well is player A going to be vs B" ranging from [ 0-1] .
87
-
88
- The basic idea is:
89
- * Let all agents of A shoot at B and all agents of B shoot at A
90
- * Divide through the combined health to determine how many agents would have died in that round
91
- * Medic heal, health and shield regen are also factored in
92
-
93
87
## Features
94
88
Simulates:
95
89
* Medics
@@ -104,10 +98,11 @@ Simulates:
104
98
* Splash (Radial, Line and "Bounce" aka Tanks, Lurkers and Mutas)
105
99
* Stim, Armor, Weapon, Range and Speed upgrades
106
100
* ` master ` : Effects like plague, lockdown, stasis, dark swarm
101
+ * ` master ` : Frame skipping to improve simulation performance at cost of precision
107
102
108
103
## Limitations
109
104
* Elevation is deemed "constant" within the simulation
110
- * Visibility is ignored
105
+ * Visibility is ignored ( ` master ` : visibility is "constant" within the simulation)
111
106
* Spellcasters are doing nothing
112
107
* Distance mechanism does not match BW's "boxed" distances
113
108
* Instant acceleration
@@ -135,21 +130,37 @@ Attackers:
135
130
136
131
You can also use the ` RetreatBehavior ` to make some or all units run away instead of attacking.
137
132
138
- ## Additional APIs
133
+ ## Evaluator
134
+ Another way to estimate outcome of a battle is to use the ` Evaluator ` . It does not simulate
135
+ agents as the ` Simulator does ` . Instead it uses some heuristics to determine a
136
+ "how well is player A going to be vs B" ranging from [ 0-1] .
139
137
140
- ### Modified DBScan
138
+ The basic idea is:
139
+ * Let all agents of A shoot at B and all agents of B shoot at A
140
+ * Divide through the combined health to determine how many agents would have died in that round
141
+ * Medic heal, health and shield regen are also factored in
142
+
143
+
144
+ # Additional APIs
145
+
146
+ ## Modified DBScan
141
147
A DBScan based clustering algorithm.
142
148
* Stable clustering: Unless a cluster is split up, units will end up in the same cluster as in previous runs
143
149
* Iterative: Instead of assigning all units to clusters at once, do it iteratively. Once done,
144
150
the clustering restarts and the previous result can be accessed.
145
151
146
- ### PositionQueries
152
+ ## PositionQueries
147
153
A utility class to make 2D-position based queries:
148
154
* radius queries
149
155
* area queries
150
156
* nearest queries
151
157
152
- ### Jump Path Search
158
+ ## Jump Path Search
153
159
An implementation of the algorithm described here: https://zerowidth.com/2013/05/05/jump-point-search-explained.html
154
160
155
- Generally much faster that a normal A* while still being optimal.
161
+ Generally much faster that a normal A* while still being optimal.
162
+
163
+ ## ` Master ` -only
164
+ * GMS class to manage gas, minerals and supply in one value type.
165
+ * Can be used to manage existing resources vs cost of units, tech or upgrades
166
+
0 commit comments