Difference between revisions of "GITS/Targeting"

From Robowiki
Jump to navigation Jump to search
(New Section)
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
'''GITS Targeting''' - ([[GITS_Targeting_Source|Source]])
+
'''GITS Targeting''' - ([[GITS/Targeting/Source|Source]])
 
----
 
----
(The original Targeting formula is from the [[WaveSurfing_Challenge/Bot_B|WaveSurfing Challenge Bot B]] from this [[Linear_Targeting|Code Snippet]].)
 
  
Improvements:
+
=The 'GhostGun' Targeting system=
 +
The Title says it all. I'm going to try and invent (if it's already been invented, then I'll improve upon it :P ) a new gun called the GhostGun. Theoretically (in my mind anyway) it should be able to adapt to other styles and improve upon itself. But programming such a Gun is going to be ''extremely'' time consuming, since it's going to take a lot of testing and blueprints and bugfixing to develop this Gun.
  
'''RadarSweep''' (extremely buggy): RadarSweep is a little glitch that I educe to expand the Radar Coverage. It's improved the detection of robots, but it also improved the chance of the Robot to switch between shooting at two different robots if they are close together.
+
==The Idea of the GhostGun==
 +
The GhostGun, in theory, will record stats on the Enemy and store them, like Average Velocity and the sort. This will be saved on the HDD so each time GITS kills the Enemy, or the Enemy kills GITS, GITS will be able to improve upon itself slightly. Now, this will be different since robots are different, from movement to what type of gun it uses.
  
'''PowerConserve''': PowerConserve is a start on trying to stop firing at a target just before it's destroyed to conserve power for damage buffering (if needed). Further testing and tweaking is needed to figure out the minimum energy at different distances needed to shut off the gun.
+
==Theoretical Example==
 +
GITS battles against Robot_A, which has a WaveSurfing-type movement and a Dynamic Clustering-type Gun. GITS has never been against this robot before, so it creates a new file on the HDD called Robot_A.txt. As they fight, GITS collects data about how Robot_A moves and shoots, and guesses on how it handles scans. More likely than not, GITS will lose. As the first round ends, GITS writes to Robot_A.txt everything it learned. As round 2 starts, GITS recalls this information and starts to dodge bullets and react to movements more effectively. GITS now gathers data on how Robot_A's movement and shooting changes and uses them to create averages. As the rounds continue, GITS becomes smarter and better, creating a strategy that works well against Robot_A.
 +
 
 +
A couple of Months later, GITS and an Improved Robot_A fight. GITS recalls the Robot_A.txt file on the HDD and uses it in the first round. Since Robot_A has been improved, the file GITS uses is somewhat ineffective. As GITS collects data, it recalculates the parts that have changed and updates the averages, effectively adapting to Robot_A's new style.
 +
 
 +
==Development==
 +
The GhostGun is an [[RWPCL]] project, which means that you can help develop and test it (and use it too). You can get the Source (in a Sandbox-type Development Area) at the top of the page (the link that says 'Source' :P)
 +
===Authors===
 +
The People who helped develop this gun
 +
* Jacob "HACKhalo2" Litewski
 +
 
 +
==Theories and Ideas==
 +
These are some late night thinkings and ideas that pop into my head from time to time. There are more to come, hopefully.
 +
===Better Tick Management===
 +
As I was reading the Wiki, a possible problem poped up that I didn't take account for while working out GITS, Turn Skipping. Since GITS needs to take in a lot of data in a short amount of time, there is a high chance of GITS skipping a turn. So I started thinking on ways to maximize the amount of data taken in while reducing the amount of skipped turns.
 +
====Theory One====
 +
This theory is basically spliting up <code>onScannedRobot()</code> into two Parts, High and Low. The High Part of <code>onScannedRobot()</code> deals with the massive amount of data collecting, while the Low Part deals with firing the gun. Movement will be part of both Parts. Since the gun cannot be fired every tick, that's how GITS will figure out which Part to Execute. So, basically, it would be coded like this:
 +
<pre>public void onScannedRobot(ScannedRobotEvent e) {
 +
    ...multi-Part variables...
 +
    if(getGunHeat() >= getGunCoolingRate()) { //High Part
 +
          ...High-Part variables...
 +
          ...Update multi-Part variables...
 +
          ...Data Collection...
 +
          ...Movement...
 +
    } else { //Low Part
 +
          ...Low-Part variables...
 +
          ...Update multi-Part variables...
 +
          ...Aim and Fire the Gun...
 +
          ...Movement...
 +
    }
 +
}</pre>
 +
I have yet to test this.

Latest revision as of 18:52, 28 May 2009

GITS Targeting - (Source)


The 'GhostGun' Targeting system

The Title says it all. I'm going to try and invent (if it's already been invented, then I'll improve upon it :P ) a new gun called the GhostGun. Theoretically (in my mind anyway) it should be able to adapt to other styles and improve upon itself. But programming such a Gun is going to be extremely time consuming, since it's going to take a lot of testing and blueprints and bugfixing to develop this Gun.

The Idea of the GhostGun

The GhostGun, in theory, will record stats on the Enemy and store them, like Average Velocity and the sort. This will be saved on the HDD so each time GITS kills the Enemy, or the Enemy kills GITS, GITS will be able to improve upon itself slightly. Now, this will be different since robots are different, from movement to what type of gun it uses.

Theoretical Example

GITS battles against Robot_A, which has a WaveSurfing-type movement and a Dynamic Clustering-type Gun. GITS has never been against this robot before, so it creates a new file on the HDD called Robot_A.txt. As they fight, GITS collects data about how Robot_A moves and shoots, and guesses on how it handles scans. More likely than not, GITS will lose. As the first round ends, GITS writes to Robot_A.txt everything it learned. As round 2 starts, GITS recalls this information and starts to dodge bullets and react to movements more effectively. GITS now gathers data on how Robot_A's movement and shooting changes and uses them to create averages. As the rounds continue, GITS becomes smarter and better, creating a strategy that works well against Robot_A.

A couple of Months later, GITS and an Improved Robot_A fight. GITS recalls the Robot_A.txt file on the HDD and uses it in the first round. Since Robot_A has been improved, the file GITS uses is somewhat ineffective. As GITS collects data, it recalculates the parts that have changed and updates the averages, effectively adapting to Robot_A's new style.

Development

The GhostGun is an RWPCL project, which means that you can help develop and test it (and use it too). You can get the Source (in a Sandbox-type Development Area) at the top of the page (the link that says 'Source' :P)

Authors

The People who helped develop this gun

  • Jacob "HACKhalo2" Litewski

Theories and Ideas

These are some late night thinkings and ideas that pop into my head from time to time. There are more to come, hopefully.

Better Tick Management

As I was reading the Wiki, a possible problem poped up that I didn't take account for while working out GITS, Turn Skipping. Since GITS needs to take in a lot of data in a short amount of time, there is a high chance of GITS skipping a turn. So I started thinking on ways to maximize the amount of data taken in while reducing the amount of skipped turns.

Theory One

This theory is basically spliting up onScannedRobot() into two Parts, High and Low. The High Part of onScannedRobot() deals with the massive amount of data collecting, while the Low Part deals with firing the gun. Movement will be part of both Parts. Since the gun cannot be fired every tick, that's how GITS will figure out which Part to Execute. So, basically, it would be coded like this:

public void onScannedRobot(ScannedRobotEvent e) {
     ...multi-Part variables...
     if(getGunHeat() >= getGunCoolingRate()) { //High Part
          ...High-Part variables...
          ...Update multi-Part variables...
          ...Data Collection...
          ...Movement...
     } else { //Low Part
          ...Low-Part variables...
          ...Update multi-Part variables...
          ...Aim and Fire the Gun...
          ...Movement...
     }
}

I have yet to test this.