Difference between revisions of "Talk:Oscillator Movement/Period"

From Robowiki
Jump to navigation Jump to search
(Added Talk about periodtime of oscillators)
 
(Robobot 0.1 : correcting user page links)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
 
{{CreditForOldWikiArticle
 
{{CreditForOldWikiArticle
 
| oldpage=Oscillators/Period
 
| oldpage=Oscillators/Period
| author=[[Albert]]
+
| author=[[User:Albert|Albert]]
 
}}
 
}}
  
Line 7: Line 7:
 
A = {2,4,8,16,32} and B = {3,9,27,54,81} would work fine as neither has factors of each other - it also allows the powers of 2 to use shifts to save code space ( >> 4 is smaller than / 16.)  Multiplying the trig functions aren't necessary either, addition or subtraction also works - just get out your graphing calculator and come up with a good random looking sine wave that doesn't have a mean value over small areas of the function around 0, 1 or -1 so that no aim, or full lead bots don't get free pot shots.  If I drop color and get the 4 bytes promised by PEZ, I'll do a real good function for Moebius 1.4.  Also, don't forget about the virtues of a * random() thrown in ;)
 
A = {2,4,8,16,32} and B = {3,9,27,54,81} would work fine as neither has factors of each other - it also allows the powers of 2 to use shifts to save code space ( >> 4 is smaller than / 16.)  Multiplying the trig functions aren't necessary either, addition or subtraction also works - just get out your graphing calculator and come up with a good random looking sine wave that doesn't have a mean value over small areas of the function around 0, 1 or -1 so that no aim, or full lead bots don't get free pot shots.  If I drop color and get the 4 bytes promised by PEZ, I'll do a real good function for Moebius 1.4.  Also, don't forget about the virtues of a * random() thrown in ;)
  
-- [[Miked0801]]
+
-- [[User:Miked0801|Miked0801]]
  
Yes, that's what "relatively prime" means. :) Oh, and 54 doesn't belong in the B set, since it obviously has 2 as a factor.-- [[nano]]
+
Yes, that's what "relatively prime" means. :) Oh, and 54 doesn't belong in the B set, since it obviously has 2 as a factor.-- [[User:Nano|nano]]
  
You never got those 4 bytes? No, the e-mail bounced. I used the address you have listed on your profile at the repository. Please send me an e-mail and I'll reply back with dieted Moebius 1.3. -- [[PEZ]]
+
You never got those 4 bytes? No, the e-mail bounced. I used the address you have listed on your profile at the repository. Please send me an e-mail and I'll reply back with dieted Moebius 1.3. -- [[User:PEZ|PEZ]]
  
Well, I placed it in [[Moebius/Code]] instead. -- [[PEZ]]
+
Well, I placed it in [[Moebius/Code]] instead. -- [[User:PEZ|PEZ]]
  
SillyBot uses 13 and 17, and then only multiplies it by 40, so he has some slow movements, too.  -- [[Kawigi]]
+
SillyBot uses 13 and 17, and then only multiplies it by 40, so he has some slow movements, too.  -- [[User:Kawigi|Kawigi]]
  
Comment. You say the period of repetition is 527.7 for NanoLauLectrik. This is true mathematically, but in robocode it's a little bit different. The values we're using are discrete (decimals aren't used). This means that you can't really identify the repetition at frame 528, because the values are slightly different. Is my reasoning wrong? I don't think the rounding of the shifted values will always go the same way, which would confused pattern matchers and give them only somewhat better aim, they wouldn't have a dead lock until the period of repetition had an integral value. Is this line of reasoning reasonable? -- [[Kuuran]]
+
Comment. You say the period of repetition is 527.7 for NanoLauLectrik. This is true mathematically, but in robocode it's a little bit different. The values we're using are discrete (decimals aren't used). This means that you can't really identify the repetition at frame 528, because the values are slightly different. Is my reasoning wrong? I don't think the rounding of the shifted values will always go the same way, which would confused pattern matchers and give them only somewhat better aim, they wouldn't have a dead lock until the period of repetition had an integral value. Is this line of reasoning reasonable? -- [[User:Kuuran|Kuuran]]
  
The effect you describe is probably true, but I don't think it has a great effect. If you plot the values you will see that the period is clearly identifiable by inspection, regardless of the rounding. Pattern matchers are not looking for exact matches, but close matches, so I think they will have no problem to identify the period. Also, usually pattern matcher don't use match lenghts of 500+, thus this problem should have no effect on them. I think the advantage of having long full-periods is just that they provide for more complex movement, with a bigger number of patterns. -- [[Albert]]
+
The effect you describe is probably true, but I don't think it has a great effect. If you plot the values you will see that the period is clearly identifiable by inspection, regardless of the rounding. Pattern matchers are not looking for exact matches, but close matches, so I think they will have no problem to identify the period. Also, usually pattern matcher don't use match lenghts of 500+, thus this problem should have no effect on them. I think the advantage of having long full-periods is just that they provide for more complex movement, with a bigger number of patterns. -- [[User:Albert|Albert]]
  
 
Could you explain the basics please? As I understand it n is an integer that is being incremented and you are using the product of a sin with a cos of a term using n to generate a move. Why would you do this rather than simply use the random function? What is the benefit of using a periodic term to generate movement? Sorry this question is so basic. --[[Tad]]
 
Could you explain the basics please? As I understand it n is an integer that is being incremented and you are using the product of a sin with a cos of a term using n to generate a move. Why would you do this rather than simply use the random function? What is the benefit of using a periodic term to generate movement? Sorry this question is so basic. --[[Tad]]
Line 25: Line 25:
 
Well that was sort of the point, Albert. The individual patterns also repeat when the whole period repeats, and I think they might be shifted on the graph just enough that they're unrecognizable for several more occurances of the period. At least, that's the only reason I see to explain why pattern matchers are still improving their aim against NanoLauLectrik and Moebius in something like round 50 of a battle. By then they should've had the pattern memorized.
 
Well that was sort of the point, Albert. The individual patterns also repeat when the whole period repeats, and I think they might be shifted on the graph just enough that they're unrecognizable for several more occurances of the period. At least, that's the only reason I see to explain why pattern matchers are still improving their aim against NanoLauLectrik and Moebius in something like round 50 of a battle. By then they should've had the pattern memorized.
  
As for your question, Tad. The basic idea behind perpendicular oscillators is they screw the hell out of simple targeting (linear/circular), which random movement may not do. There is a type of random movement somewhere on the wiki which chooses intelligently and probably does a better job, but this sin/cos oscillator is meant for nanos, which could never fit that. The use of sin/cos with a high period is to foil pattern matchers from seeing the simple oscillation. There are also advantages to staying around the same spot, particularly with wall collisions. But the answer is, really, there is no answer. The reason there are multiple movement strategies is because all of them have flaws. -- [[Kuuran]]
+
As for your question, Tad. The basic idea behind perpendicular oscillators is they screw the hell out of simple targeting (linear/circular), which random movement may not do. There is a type of random movement somewhere on the wiki which chooses intelligently and probably does a better job, but this sin/cos oscillator is meant for nanos, which could never fit that. The use of sin/cos with a high period is to foil pattern matchers from seeing the simple oscillation. There are also advantages to staying around the same spot, particularly with wall collisions. But the answer is, really, there is no answer. The reason there are multiple movement strategies is because all of them have flaws. -- [[User:Kuuran|Kuuran]]
  
About learning about 50+ rounds - I can think of many additional reasons for it to happen: Heading change has an strong influence on the patterns (because it affects the perpendicular velocity), also walls (that create an stop and go movement), also collisions with the enemy bot, and the energy level (disabled bots). All this elements affect the basic patterns to create new ones, so bots need a longer time to learn. -- [[Albert]]
+
About learning about 50+ rounds - I can think of many additional reasons for it to happen: Heading change has an strong influence on the patterns (because it affects the perpendicular velocity), also walls (that create an stop and go movement), also collisions with the enemy bot, and the energy level (disabled bots). All this elements affect the basic patterns to create new ones, so bots need a longer time to learn. -- [[User:Albert|Albert]]
  
Wow. I've never really written a pattern matcher before, and it's quite amazing to me that a pattern patcher can match a period of 75 ticks, nevermind 528. How do pattern matchers compensate for when the nanos hit walls? Wouldn't the oscillator pattern break down? -- [[Vuen]]
+
Wow. I've never really written a pattern matcher before, and it's quite amazing to me that a pattern patcher can match a period of 75 ticks, nevermind 528. How do pattern matchers compensate for when the nanos hit walls? Wouldn't the oscillator pattern break down? -- [[User:Vuen|Vuen]]
  
It would just create a new pattern :-)  And in reality, a pattern-matcher wouldn't need to figure out a pattern that's 528 long against an opponent that has a period of 528 ticks, it would just need to find the right pattern in the past (regardless of length of the period).  The point is finding the right part of the period (a longer match length makes you more likely to find the right match, though).  About how we compensate when the enemy hits a wall, it's interesting.  Many of my bots have figured out if it was projecting its opponent into a wall, and would figure out when they would hit a wall, and would fire a faster bullet that would hit them exactly at this time (it looks alot like [[ChaseBullets]] against [[Walls]]).  A more sophisticated robot (TheArtOfWar might do this) would keep track of how its enemy reacts to walls - if it curves parallel to the walls (hardest version to predict probably), or if it bounces off the walls (and if it does, whether or not it hits walls, or how close it gets before bouncing), or if it gets stuck against the wall, and how many ticks it usually sticks there... There are lots of potential ways to intelligently deal with this, and it goes beyond pattern-matching a little and into movement analysis (which is, I suppose, what pattern-matching is).  Another approach (which is what I think [[Lacrimas]] does) is to put the distance from the wall into the parameters are pattern-matched - but it isn't quite as sophisticated, maybe, as I don't think [[Iiley]] is actually using this to project movement (what he matches and how he chooses a bearing are basically unrelated). -- [[Kawigi]]
+
It would just create a new pattern :-)  And in reality, a pattern-matcher wouldn't need to figure out a pattern that's 528 long against an opponent that has a period of 528 ticks, it would just need to find the right pattern in the past (regardless of length of the period).  The point is finding the right part of the period (a longer match length makes you more likely to find the right match, though).  About how we compensate when the enemy hits a wall, it's interesting.  Many of my bots have figured out if it was projecting its opponent into a wall, and would figure out when they would hit a wall, and would fire a faster bullet that would hit them exactly at this time (it looks alot like [[ChaseBullets]] against [[Walls]]).  A more sophisticated robot (TheArtOfWar might do this) would keep track of how its enemy reacts to walls - if it curves parallel to the walls (hardest version to predict probably), or if it bounces off the walls (and if it does, whether or not it hits walls, or how close it gets before bouncing), or if it gets stuck against the wall, and how many ticks it usually sticks there... There are lots of potential ways to intelligently deal with this, and it goes beyond pattern-matching a little and into movement analysis (which is, I suppose, what pattern-matching is).  Another approach (which is what I think [[Lacrimas]] does) is to put the distance from the wall into the parameters are pattern-matched - but it isn't quite as sophisticated, maybe, as I don't think [[User:Iiley|Iiley]] is actually using this to project movement (what he matches and how he chooses a bearing are basically unrelated). -- [[User:Kawigi|Kawigi]]

Latest revision as of 08:44, 22 May 2009

Credits - Oscillator Movement/Period
Old wiki page: Oscillators/Period
Original author(s): Albert

Yep, prime's are best for periods - though not completely needed. As long as A and B have no common factors you get the same results: A = {2,4,8,16,32} and B = {3,9,27,54,81} would work fine as neither has factors of each other - it also allows the powers of 2 to use shifts to save code space ( >> 4 is smaller than / 16.) Multiplying the trig functions aren't necessary either, addition or subtraction also works - just get out your graphing calculator and come up with a good random looking sine wave that doesn't have a mean value over small areas of the function around 0, 1 or -1 so that no aim, or full lead bots don't get free pot shots. If I drop color and get the 4 bytes promised by PEZ, I'll do a real good function for Moebius 1.4. Also, don't forget about the virtues of a * random() thrown in ;)

-- Miked0801

Yes, that's what "relatively prime" means. :) Oh, and 54 doesn't belong in the B set, since it obviously has 2 as a factor.-- nano

You never got those 4 bytes? No, the e-mail bounced. I used the address you have listed on your profile at the repository. Please send me an e-mail and I'll reply back with dieted Moebius 1.3. -- PEZ

Well, I placed it in Moebius/Code instead. -- PEZ

SillyBot uses 13 and 17, and then only multiplies it by 40, so he has some slow movements, too. -- Kawigi

Comment. You say the period of repetition is 527.7 for NanoLauLectrik. This is true mathematically, but in robocode it's a little bit different. The values we're using are discrete (decimals aren't used). This means that you can't really identify the repetition at frame 528, because the values are slightly different. Is my reasoning wrong? I don't think the rounding of the shifted values will always go the same way, which would confused pattern matchers and give them only somewhat better aim, they wouldn't have a dead lock until the period of repetition had an integral value. Is this line of reasoning reasonable? -- Kuuran

The effect you describe is probably true, but I don't think it has a great effect. If you plot the values you will see that the period is clearly identifiable by inspection, regardless of the rounding. Pattern matchers are not looking for exact matches, but close matches, so I think they will have no problem to identify the period. Also, usually pattern matcher don't use match lenghts of 500+, thus this problem should have no effect on them. I think the advantage of having long full-periods is just that they provide for more complex movement, with a bigger number of patterns. -- Albert

Could you explain the basics please? As I understand it n is an integer that is being incremented and you are using the product of a sin with a cos of a term using n to generate a move. Why would you do this rather than simply use the random function? What is the benefit of using a periodic term to generate movement? Sorry this question is so basic. --Tad

Well that was sort of the point, Albert. The individual patterns also repeat when the whole period repeats, and I think they might be shifted on the graph just enough that they're unrecognizable for several more occurances of the period. At least, that's the only reason I see to explain why pattern matchers are still improving their aim against NanoLauLectrik and Moebius in something like round 50 of a battle. By then they should've had the pattern memorized.

As for your question, Tad. The basic idea behind perpendicular oscillators is they screw the hell out of simple targeting (linear/circular), which random movement may not do. There is a type of random movement somewhere on the wiki which chooses intelligently and probably does a better job, but this sin/cos oscillator is meant for nanos, which could never fit that. The use of sin/cos with a high period is to foil pattern matchers from seeing the simple oscillation. There are also advantages to staying around the same spot, particularly with wall collisions. But the answer is, really, there is no answer. The reason there are multiple movement strategies is because all of them have flaws. -- Kuuran

About learning about 50+ rounds - I can think of many additional reasons for it to happen: Heading change has an strong influence on the patterns (because it affects the perpendicular velocity), also walls (that create an stop and go movement), also collisions with the enemy bot, and the energy level (disabled bots). All this elements affect the basic patterns to create new ones, so bots need a longer time to learn. -- Albert

Wow. I've never really written a pattern matcher before, and it's quite amazing to me that a pattern patcher can match a period of 75 ticks, nevermind 528. How do pattern matchers compensate for when the nanos hit walls? Wouldn't the oscillator pattern break down? -- Vuen

It would just create a new pattern :-) And in reality, a pattern-matcher wouldn't need to figure out a pattern that's 528 long against an opponent that has a period of 528 ticks, it would just need to find the right pattern in the past (regardless of length of the period). The point is finding the right part of the period (a longer match length makes you more likely to find the right match, though). About how we compensate when the enemy hits a wall, it's interesting. Many of my bots have figured out if it was projecting its opponent into a wall, and would figure out when they would hit a wall, and would fire a faster bullet that would hit them exactly at this time (it looks alot like ChaseBullets against Walls). A more sophisticated robot (TheArtOfWar might do this) would keep track of how its enemy reacts to walls - if it curves parallel to the walls (hardest version to predict probably), or if it bounces off the walls (and if it does, whether or not it hits walls, or how close it gets before bouncing), or if it gets stuck against the wall, and how many ticks it usually sticks there... There are lots of potential ways to intelligently deal with this, and it goes beyond pattern-matching a little and into movement analysis (which is, I suppose, what pattern-matching is). Another approach (which is what I think Lacrimas does) is to put the distance from the wall into the parameters are pattern-matched - but it isn't quite as sophisticated, maybe, as I don't think Iiley is actually using this to project movement (what he matches and how he chooses a bearing are basically unrelated). -- Kawigi