Difference between revisions of "Automatic base building"

From Screeps Wiki
Jump to navigation Jump to search
(25 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[Category:Automatic Base Building]]
 
 
 
Automatic base building is the process of finding, claiming and, building up a claimed room without using the UI and direct user input. For many fully a fully automatic bot is the end-goal and automatic base building is a large step.
 
Automatic base building is the process of finding, claiming and, building up a claimed room without using the UI and direct user input. For many fully a fully automatic bot is the end-goal and automatic base building is a large step.
   
Line 9: Line 7:
   
 
=== Bunker ===
 
=== Bunker ===
  +
The easiest by far is to have a pre-defined 'bunker' containing all structures you are intent on using and simply finding an open area to place it. The 'center' of the bunker acts as an anchor and from there you can generate the structures of your pre-determined bunker based on their relative position to the anchor. As long as the space is there, there should be no conflicts in the generation.
   
  +
[[File:BunkerExample.png | left | 200px|An example of a bunker-style base]]<br><br><br><br><br><br><br>
[[File:BunkerExample.png | left | 250px|An example of a bunker-style base]]The easiest by far is to have a pre-defined 'bunker' containing all structures you are intent on using and simply finding an open area to place it. The 'center' of the bunker ancor and from there you can generate the structures of your pre-determined bunker based on their relative position to the ancor. As long as the space is there, there should be no conflicts in the generation.
 
   
<br><br><br><br><br>
 
=== Stamp/Tilesets ===
 
   
  +
<br>
Normally using a core tile/stamp, you can then determine locations for other pre-defined tilesets/stamps to be placed around your ancor dependent on the terrain in the room.
 
  +
<br>
  +
=== Stamp/Tile-sets ===
   
  +
Normally using a core tile/stamp, you can then determine locations for other pre-defined tile-sets/stamps to be placed around your anchor dependent on the terrain in the room. This allows for a bit more flexibility in rooms that do not have large-open spaces that bunkers can not fit in, while still allowing for already designed and known-to-work types of tiles insuring for example, that labs are in-range of other labs for reactions, extensions are in reachable and manageable locations, spawns have open area for creeps to exit, and so on.
=== Dynamic/Pattern Generation ===
 
   
Using a given open area, you can generate a structure or set of structures grouped together based on some basic rules.
 
   
  +
<div class="toccolours mw-collapsible mw-collapsed" style="color:black;background:#606060; overflow:auto;">
  +
<div style="font-weight:bold;line-height:1.6;">Expand for examples of Extension tile sets, or don't, If you want to make your own.</div>
  +
<div class="mw-collapsible-content">
  +
==== Extensions ====
  +
Extension 'field' or groups come in many different shapes and sizes, and can be one-set, or many smaller tiles.[[File:Plus.png|left|thumb|100x100px|A plus, tile able extension field.]][[File:LargePlus.png|left|thumb|100x100px|A large plus.]]
   
   
== Useful Algorithms ==
 
   
There are several useful algorithms to take into consideration when automatically building your base.
 
   
   
=== Distance-Transform ===
 
   
  +
  +
  +
  +
[[File:Hallway.png|left|thumb|100x100px|A hallway tile type]]
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +
  +
[[File:DissiFlower.png|left|thumb|100x100px|A Dissi Flower extension field]]
  +
  +
  +
  +
  +
  +
[[File:RapidFillCluster.png|left|thumb|100x100px|A rapid-fill cluster.]]
  +
  +
  +
  +
  +
  +
[[File:EyeofEzic.png|left|thumb|100x100px|An extension field some-what resembling the Ezic's symbol from 'Papers Please']]
  +
  +
  +
</div></div>
  +
<div class="toccolours mw-collapsible mw-collapsed" style="color:black;background:#606060; overflow:auto;">
  +
<div style="font-weight:bold;line-height:1.6;">Expand for example of lab tile sets.</div>
  +
<div class="mw-collapsible-content">
  +
==== Labs ====
  +
Generally, to be all used from 2 source labs, all labs must be placed within 2 tiles of the main center lab. Alternatively, reactions can be chained further distance, with smaller throughput. [[File:Infinilabs.png|left|thumb|100x100px|Labs in a figure 8 or 'infinity' symbol shape, hallway allows pass-though and 2 position filling of all labs]]
  +
  +
  +
  +
[[File:LabStack.png|left|thumb|100x100px|A stack of labs, where all 8 production labs can reach 2 source labs.]]
  +
  +
  +
  +
  +
</div>
  +
</div>
  +
<div class="toccolours mw-collapsible mw-collapsed" style="color:black;background:#606060; overflow:auto;">
  +
<div style="font-weight:bold;line-height:1.6;">Expand for examples of Tower tile sets.</div>
  +
<div class="mw-collapsible-content">
  +
  +
==== Towers ====
  +
Towers do not 'have to' be clustered in one spot, while it does make them easier to fill, it means they are also averaged damage from location.
  +
  +
[[File:TowerA.png|left|thumb|118x118px|A single-tile-to-fill cluster of towers]]
  +
  +
[[File:TowerB.png|left|thumb|112x112px|A Hallway style tile single-fill tower cluster.]]
  +
  +
</div>
  +
</div>
  +
  +
<div class="toccolours mw-collapsible mw-collapsed" style="color:black;background:#606060; overflow:auto;">
  +
<div style="font-weight:bold;line-height:1.6;">Expand for examples of Ancor tile sets.</div>
  +
<div class="mw-collapsible-content">
  +
==== Anchor & central fill clusters ====
  +
An 'anchor' or center fill location is a location for buildings that can take 1+ creeps to manage and can be relatively small / have the rest of the base planned around.
  +
  +
[[File:AnchorExample.png|left|thumb|100x100px|An example of a single-fill-creep position for multiple structures.]]
  +
  +
</div></div>
  +
  +
=== Dynamic/Pattern Generation ===
  +
  +
Using a given open area, you can generate a structure or set of structures grouped together based on some basic rules. Some examples would include generating extension fields for one or more fillers to fill, calculating the best position for towers to sit for maximum damage on walls (instead of in a tight fill-group pattern), and so on.
  +
  +
== Useful Algorithms ==
  +
  +
There are several useful algorithms to take into consideration when automatically building your base.
  +
=== Distance-Transform ===
 
Using the Screep's terrain, you can use [https://en.wikipedia.org/wiki/Distance_transform Distance Transformation] to have natural walls be barrier pixels and swamps/plains to be allowed. Using this, you can then create a matrix/object/array of all positions with a score of how much open space is available around a given roomPosition. This is direly useful to know how much you can fit in an area, without having user input.
 
Using the Screep's terrain, you can use [https://en.wikipedia.org/wiki/Distance_transform Distance Transformation] to have natural walls be barrier pixels and swamps/plains to be allowed. Using this, you can then create a matrix/object/array of all positions with a score of how much open space is available around a given roomPosition. This is direly useful to know how much you can fit in an area, without having user input.
   
  +
[[File:Redcirclegen.png|left|200px|An Example of Distance-Transformation on a room with roomVisuals]]<br><br><br><br><br><br>
  +
  +
  +
<br>
  +
<br>
 
=== Flood Fill ===
 
=== Flood Fill ===
  +
[https://en.wikipedia.org/wiki/Flood_fill Flood Fill] is useful for defining or testing areas to make sure they are secure (like walls around a base) or defining areas into groups. Filling an area and gathering room positions allows you to use these positions later, for whatever purpose you see fit.[[file:PrototypeFloodFill.png|left|200px|An example of a flood-fill, filling the 'outside' of a predefined base area.]]<br><br><br><br><br>
   
[https://en.wikipedia.org/wiki/Flood_fill Flood Fill] is useful for defining or testing areas to make sure they are secure (like walls around a base) or defining areas into groups. Filling an area and gathering room positions allows you to use these positions later, for whatever purpose you see fit.
 
   
  +
<br>
   
  +
<br>
 
=== Minimum Cut ===
 
=== Minimum Cut ===
  +
[[wikipedia:Minimum_cut|Minimum Cut]] is useful for well sized rampart & wall placment.[[file:MincutResult.png|left|200px|Result of the previous base map after cut]][[file:Mincutbase.png|left|200px|A base map for minCut, yellow is walkable, purple is exit, green is protected (can't cut)]]
 
  +
[[Category:Strategy]]
[https://en.wikipedia.org/wiki/Minimum_cut Minimum Cut] is useful for rampart / wall placement.
 

Revision as of 16:26, 21 April 2021

Automatic base building is the process of finding, claiming and, building up a claimed room without using the UI and direct user input. For many fully a fully automatic bot is the end-goal and automatic base building is a large step.


Types

There's a few types of automatic bases, depending on method used.

Bunker

The easiest by far is to have a pre-defined 'bunker' containing all structures you are intent on using and simply finding an open area to place it. The 'center' of the bunker acts as an anchor and from there you can generate the structures of your pre-determined bunker based on their relative position to the anchor. As long as the space is there, there should be no conflicts in the generation.

An example of a bunker-style base











Stamp/Tile-sets

Normally using a core tile/stamp, you can then determine locations for other pre-defined tile-sets/stamps to be placed around your anchor dependent on the terrain in the room. This allows for a bit more flexibility in rooms that do not have large-open spaces that bunkers can not fit in, while still allowing for already designed and known-to-work types of tiles insuring for example, that labs are in-range of other labs for reactions, extensions are in reachable and manageable locations, spawns have open area for creeps to exit, and so on.


Expand for examples of Extension tile sets, or don't, If you want to make your own.

Extensions

Extension 'field' or groups come in many different shapes and sizes, and can be one-set, or many smaller tiles.
A plus, tile able extension field.
A large plus.





A hallway tile type






A Dissi Flower extension field



A rapid-fill cluster.



An extension field some-what resembling the Ezic's symbol from 'Papers Please'


Expand for example of lab tile sets.

Labs

Generally, to be all used from 2 source labs, all labs must be placed within 2 tiles of the main center lab. Alternatively, reactions can be chained further distance, with smaller throughput.
Labs in a figure 8 or 'infinity' symbol shape, hallway allows pass-though and 2 position filling of all labs


A stack of labs, where all 8 production labs can reach 2 source labs.



Expand for examples of Tower tile sets.

Towers

Towers do not 'have to' be clustered in one spot, while it does make them easier to fill, it means they are also averaged damage from location.

A single-tile-to-fill cluster of towers
A Hallway style tile single-fill tower cluster.
Expand for examples of Ancor tile sets.

Anchor & central fill clusters

An 'anchor' or center fill location is a location for buildings that can take 1+ creeps to manage and can be relatively small / have the rest of the base planned around.

An example of a single-fill-creep position for multiple structures.

Dynamic/Pattern Generation

Using a given open area, you can generate a structure or set of structures grouped together based on some basic rules. Some examples would include generating extension fields for one or more fillers to fill, calculating the best position for towers to sit for maximum damage on walls (instead of in a tight fill-group pattern), and so on.

Useful Algorithms

There are several useful algorithms to take into consideration when automatically building your base.

Distance-Transform

Using the Screep's terrain, you can use Distance Transformation to have natural walls be barrier pixels and swamps/plains to be allowed. Using this, you can then create a matrix/object/array of all positions with a score of how much open space is available around a given roomPosition. This is direly useful to know how much you can fit in an area, without having user input.

An Example of Distance-Transformation on a room with roomVisuals










Flood Fill

Flood Fill is useful for defining or testing areas to make sure they are secure (like walls around a base) or defining areas into groups. Filling an area and gathering room positions allows you to use these positions later, for whatever purpose you see fit.

An example of a flood-fill, filling the 'outside' of a predefined base area.









Minimum Cut

Minimum Cut is useful for well sized rampart & wall placment.

Result of the previous base map after cut
A base map for minCut, yellow is walkable, purple is exit, green is protected (can't cut)