Talk:WhiteFang

From Robowiki
Jump to navigation Jump to search

Contents

Thread titleRepliesLast modified
Reproducing the Results1111:01, 11 August 2018
Test Bed212:12, 10 July 2018
Possible errors723:31, 29 December 2017
Micro Ant115:49, 23 December 2017
First page
First page
Next page
Next page
Last page
Last page

Reproducing the Results

WhiteFang 2.2.7.1 is the best version of WhiteFang but it had some issues and I have been trying to reproduce the results for a long time and as you can understand I couldn't match its performance.
Problem 1
I had a problem with my KNNPredictor class. As the number of K increased or sum of attributes' weights increased it would return bigger numbers which would cause my Simple predictor to have three times more effect than the Standard predictor(Normally it should have half of its effect).
Problem 2
The flattener would log real waves twice and this would decrease the number of data points I could find and weight real waves two times more.
Additional Note: When I fixed the flattener problem my score decreased.
I don't know how to solve it since Simple Formula Standard Formula and Flattener Formula has different attributes and Standard formula and Flattener Formula has 1 / (x * k + 1) type of attributes. Any solutions?
Dsekercioglu (talk)15:19, 7 August 2018

Welcome to the land of Performance Enhancing Bug! When facing things like this, there are two ways to go — leave it, or fully understand how it works and reproduce it!

It seems that you have mostly understood how the bug works, then just tweak your formula to fit the bug in!

Btw, have you ever tried putting two exactly same bot with different version, and see the score difference?

Xor (talk)15:33, 7 August 2018
I will just be reverting back to 2.2.7.1 it with the XOR filter which doesn't log real waves twice and I will use my better firepower formula to have a better score.
I don't think putting exactly the same bot will help because no bots has been change since WhiteFang 2.2.7.1 but you may be right; my Bullet Shielding algorithm may cause extreme deviations in score.
Dsekercioglu (talk)17:32, 8 August 2018

The only purpose of putting the same bot twice with the same environment is to see how much noise there is with your testing method. Experience of improving ScalarBot told me that most of the time a small change in score is just noice; big drop is bug and big increase is new critical feature.

Xor (talk)16:42, 10 August 2018
I will put 2.2.7.1N after 2.4.5; maybe it is just a great noise which I had been trying to pass for a long time =)
Dsekercioglu (talk)19:38, 10 August 2018
 
Oh, I am so dumb. It has nothing to do with my movement; 2.2.7.1 contains this line of code:
                counter++;
                if (counter == 0) {
                    possibleFuturePositions[direction + 1] = (Point2D.Double) predictedPosition.clone();
                }
Consequently it is impossible to have the future position predicted but my prediction system doesn't work so it made my scores lower =)
Anyways, thank you so much for your time and I have actually learnt a lot of things.
Dsekercioglu (talk)22:21, 10 August 2018
 

This is so annoying, the bug I have mentioned above is actually more sensible than "Sometimes predicting the future position correct and sometimes calculating the opposite direction" however, seems like this bug was also a Performance Enhancing bug.

Dsekercioglu (talk)11:01, 11 August 2018
 
 
I have just wondered how you normalize dangers in ScalarBot or since it's not OS what is the general way of doing it? In the latest version of WhiteFang I use
weight * MaximumPossibleDistance / (euclidean_distance + 1) / predictionNum

to have a balance between different weighting schemes and K's.

Dsekercioglu (talk)15:23, 9 August 2018

Just have a look at DrussGT and Diamond, ScalarBot uses similar formula. And most (new) bots imitate this style as well.

Xor (talk)17:13, 10 August 2018

Make sure to use bullet damage and time-till-hit for weighting one wave vs another. Depending on the type of enemy this can make a big difference.

Skilgannon (talk)20:12, 10 August 2018
Thank you for your response. The weighting system I wrote above only affects the bins. Later I divide/multiply those values while choosing the best movement option since WhiteFang has a bin-based KNN Algorithm(The code base was originally designed for Neural Networks).
Actually, I have a logical mistake in my movement but I didn't fix it yet since I wanted a controlled testing environment.
Dsekercioglu (talk)23:16, 10 August 2018
 
 
 
 

Btw, in my opinion, Performance Enhancing Bugs are not bugs. They either fix another bug occasionally or fix a bug in your logic. There must be a reason behind score difference, so just respect the result.

Xor (talk)15:38, 7 August 2018
 

I got RoboJogger working about 2 days ago and understood that challenges are not enough to improve WhiteFang. Since I don't have any experience about choosing robots for Test Beds I wanted to ask: How should I choose the test bed that will give me close to rumble scores?

Dsekercioglu (talk)13:38, 9 July 2018

I always got the best improvement from finding specific problem bots (look at the KNNPBI) and trying to design a specific feature that would help against the kind of behaviour they showed. Usually it involves watching a lot of battles. Test beds are only to make sure that nothing is broken against other bots when this is happening.

It is really about the size of the testbed you want. Best would be the whole rumble. Minimum is probably something that shoots HOT, something linear, something simple VCS, something simple WS + VCS, some PM, and a tough top-bot or two.

And from what I've found, fixing bugs almost always gets better results than adding features. So make sure you don't have bugs, and don't have any bad assumptions.

Skilgannon (talk)23:00, 9 July 2018
Thank you for your response about the test bed, I agree with the bugs part. I jumped from 28 to 26 with Bullet Shielding(2 days of coding) and 26 to 23 with a bug fix.(Stop position calculation)
I just realized I had been calculating wave locations wrong since 10 months. I think I will add "First robot to enter the top 30 with wrong wave calculations" =)
Dsekercioglu (talk)12:12, 10 July 2018
 
 

Possible errors

I still see low scores such as %5 against some bots and it seems like it isn't about the crowd part. I tried to fix it two times and it didn't work. I also tried to reproduce the error but it doesn't occur in my robocode 1.9.3.0. I didn't change anything but the normalised crowd thing. I would see if there was any IndexOutOfBounds Exception or Arithmetic Exception.

Dsekercioglu (talk)16:59, 24 December 2017

Don’t worry, ScalarBot is having the same bug, e.g. it scores near 0% against some opponents, which is never reproduced even after thousands of rounds.

Anyway, if that happens too much, you can try to catch every exception and log it to file, then look up the low scored opponents in the log. ScalarBot fixed a really rare bug in kd-tree by doing so.

Anyway, it still scores very low against some bot randomly, without throwing any exceptions,

Xor (talk)03:34, 25 December 2017

I think I should worry. In my tests it does better than my normal gun but in the rumble it has about -3 APS. May it be the bug fixed with 1.9.3.0?

Dsekercioglu (talk)08:12, 25 December 2017
 
java.lang.ArrayIndexOutOfBoundsException: 50
	at dsekercioglu.knn.knnCore.ags.kdtree.KdNode.addLeafPoint(KdNode.java:70)
	at dsekercioglu.knn.knnCore.ags.kdtree.KdNode.addPoint(KdNode.java:63)
	at dsekercioglu.knn.knnCore.ags.kdtree.KdTree.addPoint(KdTree.java:7)
	at dsekercioglu.knn.knnCore.KNNPredictor.addData(KNNPredictor.java:67)
	at dsekercioglu.knn.wfGun.gun.TestGun.wavePassed(TestGun.java:24)
	at dsekercioglu.knn.wfGun.Fang.updateWaves(Fang.java:122)
	at dsekercioglu.knn.wfGun.Fang.onScannedRobot(Fang.java:80)
	at dsekercioglu.knn.WhiteFang.onScannedRobot(WhiteFang.java:44)
	at robocode.ScannedRobotEvent.dispatch(ScannedRobotEvent.java:315)
	at robocode.Event$HiddenEventHelper.dispatch(Event.java:259)
	at net.sf.robocode.security.HiddenAccess.dispatch(HiddenAccess.java:191)
	at net.sf.robocode.host.events.EventManager.dispatch(EventManager.java:422)
	at net.sf.robocode.host.events.EventManager.processEvents(EventManager.java:376)
	at net.sf.robocode.host.proxies.BasicRobotProxy.executeImpl(BasicRobotProxy.java:423)
	at net.sf.robocode.host.proxies.BasicRobotProxy.execute(BasicRobotProxy.java:122)
	at net.sf.robocode.host.proxies.StandardRobotProxy.turnRadar(StandardRobotProxy.java:55)
	at robocode._AdvancedRadiansRobot.turnRadarRightRadians(_AdvancedRadiansRobot.java:150)
	at robocode.AdvancedRobot.turnRadarRightRadians(AdvancedRobot.java:1962)
	at dsekercioglu.knn.wfEyes.Lock.run(Lock.java:17)
	at dsekercioglu.knn.WhiteFang.run(WhiteFang.java:39)
	at net.sf.robocode.host.proxies.HostingRobotProxy.callUserCode(HostingRobotProxy.java:274)
	at net.sf.robocode.host.proxies.HostingRobotProxy.run(HostingRobotProxy.java:221)
	at net.sf.robocode.host.proxies.BasicRobotProxy.run(BasicRobotProxy.java:44)
	at java.lang.Thread.run(Thread.java:745)

I got this exception after some testing.

Dsekercioglu (talk)21:13, 25 December 2017

This is a bug in Rednaxela’s kd-tree. I created a PR to fix it in his bitbucket a few years ago, but no response.

IIRC, This bug happens when points are so concentrated that spliting happens more than once in one call, which is not considered at all. That’s why it happens so rarely, and only with some set of dimensions.

Xor (talk)22:44, 25 December 2017

Feel free to use my Kd-Tree, it has protections against infinite splitting and is similar performance to Rednaxela (perhaps even better in mixed workloads due to cache locality).

Skilgannon (talk)20:56, 26 December 2017

Sorry for answering late; I actually wrote an answer but I suppose there was a problem with Wi-fi. WhiteFang has already started to use it and there is also range search in your tree which is wonderful.

Dsekercioglu (talk)14:41, 29 December 2017
 
 
 
 
 

Hi,

WhiteFang's score against Ant seems a bit abnormal. I would expect it to be reversed.

Fighting battle 15 ... zyx.micro.Ant 1.1,dsekercioglu.knn.WhiteFang 1.5 RESULT = zyx.micro.Ant 1.1 wins 5540 to 726

It has weaknesses against PM but not this much.

Dsekercioglu (talk)14:32, 23 December 2017

Sorry, I understood why it happened. I assigned 0 values to scores and they were updated with waves(A form of crowd targeting). However, when the distance was high it would give an Arithmetic exception(I haven't seen it yet) if the distance was too high.

Dsekercioglu (talk)15:49, 23 December 2017
 
First page
First page
Next page
Next page
Last page
Last page