All Downloads are FREE. Search and download functionalities are using the official Maven repository.

APT.all-test.MOUTBot.execute-mission.defend.determine-defensive-room-position.soar Maven / Gradle / Ivy

## Overview of heuristics for picking a defensive position in a room
## 0. Propose all nodes in a room
## 0.5 compute range from threat doors to that position
## 1. Reject threat doors of distance 1
## 2. Prefer doors and to other positions
## 3. Prefer connectors to other positions except doors.
## 4. Prefer positions that are farther away, up to defensive-position-far
##     Don't want to be close, but don't want to be too far.
## 5. Avoid windows
##  What is missing is if are near a door, probably don't want to be at door,
##    but maybe at a corner near the door?
##  Doesn't calculate dominate positions at all.

sp {defend*propose*determine-defensive-room-position
   (state  ^name defend
              ^top-state.map.current-area.node 
              ^objective.defensive-position )
   ( -^position 
          ^area-achieved true
          ^type room)
   ( ^type door)
-->
   ( ^operator  +, = 40)
   ( ^name determine-defensive-room-position
        ^node 
        ^type )
}

sp {defend*propose*determine-defensive-room-position*possible-nodes
   (state  ^name defend
              ^possible-offset-door-node 
              ^objective.defensive-position )
   ( -^position 
          ^area-achieved true
          ^type room)
-->
   ( ^operator  +, = 50)
   ( ^name determine-defensive-room-position
        ^node 
        ^type offset-door-node)
}
sp {defend*compare*determine-defensive-room*reject*threat-door
   (state  ^name defend
              ^top-state.map.current-area.threat-door 
              ^operator  +)
   ( ^node 
         ^distance 1)
   ( ^name determine-defensive-room-position
         ^node )
-->
   ( ^operator  -)
}

sp {defend*elaborate*determine-defensive-room-position*range
   (state  ^operator  +
              ^top-state.map.current-area.threat-door.node.position )
   ( ^node.position )
   ( ^x 
         ^y )
   ( ^x 
         ^y )
-->
   ( ^range (compute-range    ))}

sp {defend*elaborate*determine-defensive-room-position*closest-range
   (state  ^operator  +)
   ( ^name determine-defensive-room-position
         ^range 
        -^range { <  })
-->
   ( ^closest-range )}

sp {defend*compare*determine-defensive-room-reject-too-close
   (state  ^name defend
              ^top-state.parameters.offset-test 
              ^operator  +)
   ( ^name determine-defensive-room-position
         ^closest-range < 
         ^type )
-->
   ( ^operator  -)
}

sp {defend*elaborate*determine-defensive-room-team*range
   (state  ^operator  +
              ^top-state.io.input-link )
   ( ^agent.team 
         ^objects.entity )
   ( ^position 
             ^team )
   ( ^name determine-defensive-room-position
         ^node.position )
   ( ^x 
         ^y )
   ( ^x 
         ^y )
-->
   ( ^teammate-range (compute-range    ))}

sp {defend*compare*determine-defensive-room-reject-too-close*team
   (state  ^name defend
              ^operator  +)
   ( ^name determine-defensive-room-position
         ^node 
         ^teammate-range < 20)
-->
   (write (crlf) |Reject node because too close to team member.| )
   ( ^operator  -)
}

sp {defend*compare*determine-defensive-room-help-close*team
   (state  ^name defend
              ^operator  +)
   ( ^name determine-defensive-room-position
         ^node  
         ^teammate-range { > 20 < 200 })
-->
   (write (crlf) |Prefer node because close to team member.| )
   ( ^operator  = 100)
}


sp {apply*determine-defensive-room-position
   (state  ^operator 
              ^objective.defensive-position )
   ( ^name determine-defensive-room-position
         ^node )
   ( ^position )
-->
   ( ^position 
         ^node )
}
#