Difference between revisions of "User talk:Voidious"

From Robowiki
Jump to navigation Jump to search
(→‎Segmenting Help: simple example)
m (→‎Segmenting Help: my thing)
Line 53: Line 53:
  
 
--[[User:Voidious|Voidious]] 01:05, 7 May 2009 (UTC)
 
--[[User:Voidious|Voidious]] 01:05, 7 May 2009 (UTC)
 +
 +
There is another way doing this. I'm not using that way because it more complex. I use the magic of reference to do the thing similar to the one in [[GuessFactor Targeting Tutorial]]:
 +
 +
* In your instance variable declarations:
 +
** <code>public static double _surfStats[] = new double[BINS];</code>
 +
** becomes <code>public static double _surfStats[][] = new double[2][BINS];</code>
 +
* You need to reference the new segment in your enemy wave now.
 +
** In the EnemyWave class definition, add <code>double[] stats;</code>
 +
** In <code>onScannedRobot</code>, where you detect the bullet and initialize the EnemyWave class, add <code>ew.stats = _surfStats[e.getDistance() < 300 ? 0 : 1];</code> (That's an inline if/else statement, you don't have to do it like that if you don't want. Just need to use 0 or 1 for the first array index, depending on the distance.)
 +
* In <code>logHit</code>:
 +
** <code>_surfStats[x] += 1.0 / (Math.pow(index - x, 2) + 1);</code>
 +
** becomes <code>ew.stats[x] += 1.0 / (Math.pow(index - x, 2) + 1);</code>.
 +
* Similarly, in <code>checkDanger</code>:
 +
** <code>return _surfStats[index];</code>
 +
** becomes <code>return surfWave.stats[index];</code>
 +
 +
(copy from yours, [[User:Voidious|Voidious]]) This way if you are adding more segment, you just need to change only one place (vs. 2 places). Actually I done the <code>ew.stats = _surfStats[ew.distance < 300 ? 0 : 1];</code> thing in constructor of EnemyWave class (by assigning the data to the global variable first of corse). &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 15:13, 7 May 2009 (UTC)

Revision as of 16:13, 7 May 2009

Redirects

Hey, thanks for fixing all those redirects. I never knew that you had to do that to remove them from the category listings. --AaronR 03:17, 12 November 2007 (UTC)

Misc Chatter

Why not you run more TwinDuel now? I'd like to participated it. --Nat 07:50, 4 January 2009 (UTC)

Hey, have you read my message? Look here » Nat | Talk » 09:24, 25 March 2009 (UTC)

So I see Nat said he'd be interested in the TwinDuel - is anyone else still interested? If I recall correctly, I needed to update my automation for newer versions of Robocode, but that shouldn't be a problem when I get some time. I've definitely been getting the itch recently to do some real Robocoding again, but I'm afraid that if I start, none of the rest of the wiki migration stuff will ever get done. =)

And whether just for TwinDuel or for some active Robocoding, I really need to either explore this "Soy Latte" version of Java 6, or find another machine to work on, as I've come to accept that I will never see Java 6 on my Mac. =(

--Voidious 14:58, 23 April 2009 (UTC)

Thanks for reply. I think I add that comment very first day on this wiki ;D I don't really think the migration stuff will never finish even you start robocoding again. I'm currently take a pause from developing robot for migration work (and few other reasons) But, do you think I should finished Challenge 2K9 before start my own migration work? Does robocode require Java 6? » Nat | Talk » 15:23, 23 April 2009 (UTC)

I don't know, I think that's up to you about Challenge 2K9. I haven't really read all the Challenge 2K9 info yet, but I'll try to soon. No, Robocode doesn't require Java 6, but some people use Java 6 in their TwinDuel bots, and it feels silly at this point to require people not to use Java 6 just because I don't have it on my Mac! --Voidious 15:54, 23 April 2009 (UTC)
If you have time, please help me doing the thing on Komarious. I want it to controlled distance at 450 (using Dookious AgressiveDistanceController), surf non-firing wave (rolled at 1, weight 1/6), surf hit (rolled at 0.8, weight 2), surf visit (rolled 1, weight 1) from Komarious 1.78 please? Thanks. » Nat | Talk » 16:08, 23 April 2009 (UTC)

I used SoyLatte successfully until I upgraded to Leopard (which has an optional 1.6 install). Let me know if you ever want to integrate TwinDuel into the rumble. --Darkcanuck 15:35, 23 April 2009 (UTC)

Wow, cool, thanks for the info! I definitely heard of a developer beta at some point, but I think it was only for 64-bit processors, and I'm still on a 1st gen MacBook. Looking to upgrade soon, though, so maybe Java 6 is one more thing I can look forward to there. =) --Voidious 15:54, 23 April 2009 (UTC)
You're probably right about 64-bits -- mine's one of the first 64bit models. Buy SoyLatte worked great under X11 last time I tried. --Darkcanuck 16:41, 23 April 2009 (UTC)
And a TwinDuel rumble sounds very appetizing! The scoring is the only kind of weird thing, since it's survivalist, ignores total score, and is 75 rounds. If we could make the ELO + Glicko + PL stuff look at % rounds won instead of % total score, that would seem more "right" to me. But even just a 2v2 team battle on an 800x800 battlefield with all the normal scoring could be cool, too, if all of the "weird scoring" is a problem. --Voidious 15:54, 23 April 2009 (UTC)
(Edit conflict) I'm curious, can roborumble client handler the 2000-bytes thing? And will 75 rounds take too long on the client? I don't know really that will anyone run battle for it. MeleeRumble and TeamRumble get only little battles before Deewiant come along with melee rumble, then GrubbmGait start to run team rumble. » Nat | Talk » 16:01, 23 April 2009 (UTC)
We would have to modify the client to add the new game type and maybe work out a modified version of scoring. The new server does have a % survival scoring option though. With a low number of participants, it wouldn't require much client processing time (less than melee rumble for sure). --Darkcanuck 16:41, 23 April 2009 (UTC)

Segmenting Help

I WILL NOT GIVE UP! I'm going to keep trying! I need a bit of help. I understand wave surfing much better now because of the tutorial you made. Thanks! In the GuessFactor Targeting Tutorial, it teaches you what to change to segment it. Very useful. I've segmented my GF gun with distance, velocity, etc. already. However, I only see part of what I have to change in the wave surfing code. Could you give a simple example in the tutorial to help me? Thanks. -- User:Awesomeness

Sure, here's a real simple example. Let's say you want to segment your surf stats on distance. Let's go real simple and just segment into "distance < 300" and "distance >= 300".

  • In your instance variable declarations:
    • public static double _surfStats[] = new double[BINS];
    • becomes public static double _surfStats[][] = new double[2][BINS];
  • You need to track distance at fire time in your EnemyWave class now.
    • In the EnemyWave class definition, add double distance;
    • In onScannedRobot, where you detect the bullet and initialize the EnemyWave class, add ew.distance = e.getDistance();
  • In logHit:
    • _surfStats[x] += 1.0 / (Math.pow(index - x, 2) + 1);
    • becomes _surfStats[ew.distance < 300 ? 0 : 1][x] += 1.0 / (Math.pow(index - x, 2) + 1);. (That's an inline if/else statement, you don't have to do it like that if you don't want. Just need to use 0 or 1 for the first array index, depending on the distance.)
  • Similarly, in checkDanger:
    • return _surfStats[index];
    • becomes return _surfStats[surfWave.distance < 300 ? 0 : 1][index];

Basically, any information you want to segment on, you would store that information in your wave class. Then whenever you access your _surfStats, you use that data to come up with the array indexes. Effectively, you end up with a bunch of surfStats[] arrays, one for each situation (segment). Make sense?

--Voidious 01:05, 7 May 2009 (UTC)

There is another way doing this. I'm not using that way because it more complex. I use the magic of reference to do the thing similar to the one in GuessFactor Targeting Tutorial:

  • In your instance variable declarations:
    • public static double _surfStats[] = new double[BINS];
    • becomes public static double _surfStats[][] = new double[2][BINS];
  • You need to reference the new segment in your enemy wave now.
    • In the EnemyWave class definition, add double[] stats;
    • In onScannedRobot, where you detect the bullet and initialize the EnemyWave class, add ew.stats = _surfStats[e.getDistance() < 300 ? 0 : 1]; (That's an inline if/else statement, you don't have to do it like that if you don't want. Just need to use 0 or 1 for the first array index, depending on the distance.)
  • In logHit:
    • _surfStats[x] += 1.0 / (Math.pow(index - x, 2) + 1);
    • becomes ew.stats[x] += 1.0 / (Math.pow(index - x, 2) + 1);.
  • Similarly, in checkDanger:
    • return _surfStats[index];
    • becomes return surfWave.stats[index];

(copy from yours, Voidious) This way if you are adding more segment, you just need to change only one place (vs. 2 places). Actually I done the ew.stats = _surfStats[ew.distance < 300 ? 0 : 1]; thing in constructor of EnemyWave class (by assigning the data to the global variable first of corse). » Nat | Talk » 15:13, 7 May 2009 (UTC)