User talk:Voidious

From Robowiki
Jump to navigation Jump to search

Contents

Thread titleRepliesLast modified
Thanks for fixing the wiki ;)004:54, 21 January 2018
Wiki spam021:27, 25 August 2017
Can we permit svg files in upload file? 015:43, 23 August 2017
Robot001423:26, 8 April 2017
FirstMark presentation point of interest007:33, 1 April 2017
blocking the spam wave106:27, 15 February 2016
I can't enter the competition018:16, 7 February 2016
new PlayBerryBots.com008:51, 1 August 2015
BerryBots updates4919:57, 2 February 2014
http://www.dijitari.com/void/robocode/419:13, 1 December 2013
First page
First page
Previous page
Previous page
Last page
Last page

Thanks for fixing the wiki ;)

The wiki has been part of my daily check list ;)

Xor (talk)04:54, 21 January 2018

Thank you for combating the latest spam attack.

Also, it looks like you didn't move back the Main Page's talk page. It's here: http://robowiki.net/wiki/Talk:$$_1-855-665-7666@_HP_Service_Phone_Number_HP_Service_Phone_Number_Support_Number0572 GrubbmGait did this.

MultiplyByZer0 (talk)21:58, 24 August 2017

Can we permit svg files in upload file?

svg files are very useful in showing vectorized graphics. And they are even smaller than png/gif/jpeg. What a pity don't we support svg files?

Xor (talk)15:43, 23 August 2017

What is this abomination you have created? I haven't looked at it at all yet, but I'm going to guess it's an advanced/evolved MoxieBot. Second guess is just a regular bullet shielder that emphasizes shielding against more advanced targeting techniques. It's lost big to some robots, but it beat other top robots including Diamond, which is a next to impossible feat. I guess I'm partially to blame by helping bring bullet shielding into the end game. :-P

Skotty (talk)18:56, 3 April 2017

I see now. I won't share your dirty little trick, but I will be fixing the vulnerability in the next version of XanderCat. :-)

Skotty (talk)19:46, 3 April 2017

On closer inspection, looks like Robot001 probably isn't your robot. Author name is Yifan Zhu. Probably just a modified version of Diamond?

Skotty (talk)06:34, 4 April 2017

I'm sure we will talk more about this robot later. Probably should be renamed at the very least if it's not the work of Voidious. This is an interesting bot regardless, as it exposes certain vulnerabilities in some robots, including XanderCat; vulnerabilities which I've fixed in XanderCat version 12.10.

Skotty (talk)17:37, 4 April 2017
 

Yes, I would also prefer you choose an alternate package for your bot...

Voidious (talk)23:26, 8 April 2017
 
 
 

FirstMark presentation point of interest

I watched the video of your presentation at FirstMark. Pretty good presentation. A couple of points you may find of interest.

First, I thought the question about what you have learned or what skills you have improved from doing Robocode was a good question, and something that is important to have a good answer to. So beyond yourself, you might like to know what some other Robocode users have gotten from it. For me, it has helped refine and reinforce some of my math skills and methods for analyzing data. It encouraged and helped me learn some new algorithms, and has been a good exercise in creative problem solving.

Also, someone asked if Robocode was something people from Raytheon used. Raytheon is a contractor that develops a lot of software and hardware for the Department of Defense in the United States. It was a bit of an unusual question that came up because the person who asked it knew that Raytheon develops certain missile and projectile guidance systems. What makes it interesting is that I spent a number of years working on software for Raytheon. The only real connection between my Robocode work and Raytheon work is that they both involved programming, but nonetheless, at least 1 former Raytheon employee does indeed use Robocode.

Skotty (talk)07:33, 1 April 2017

blocking the spam wave

Hi Voidious,

Thanks for holding the fort against the recent spam wave. Would be wise to block registration for a week or so?

Beaming (talk)20:36, 14 February 2016

Yeah, it's off right now. It would be great if the spam just subsided after a few days, but I'm skeptical... I think we need to improve the captcha or add some custom measures for these particular spammers.

Voidious (talk)06:27, 15 February 2016
 

I can't enter the competition

I've packaged my robot Tomahawk but I don't know how to enter the competition. I found something about it but it was not detailed. Can someone help me?

Dsekercioglu (talk)18:16, 7 February 2016

new PlayBerryBots.com

Finally got the new web UI up - big things are it's in AngularJS (which is awesome) and has a "starter kit" where you can select from a few different movement and targeting snippets and it wires up a working bot for you. Pretty darn pleased with it! http://playberrybots.com

Voidious (talk)08:51, 1 August 2015

BerryBots updates

So I try not to spam you guys too much about BerryBots, but maybe I'll post about some of the bigger stuff.

A couple people have posted bots on the forums recently (both Robocoders):

  • Frohman posted the first public bot, Insolitus, a battle bot that beats supersample.BasicBattler in 1v1 and draws about even with it in Melee (which means it also crushes the other samples). Some type of antigravity movement and linear targeting.
  • Justin (of DemonicRage) has a bot called NightShade. It's the strongest 1v1 bot for now, also supports races and mazes, and has pretty sexy debugging graphics.

Next big thing coming is the Game Runner API, which I'm pretty excited about. I have it working now, probably releasing it in a week or two with some polish and related changes to results handling. Some cool things are that it handles multi-threading for you and makes it really easy to prompt the user for inputs (seasons, threads, ships, stages, etc). You launch a Game Runner script through the app kind of like starting a battle.

Voidious23:31, 7 April 2013

Just released v1.2.0 with the Game Runner API. I think it holds up pretty well in a comparison against the Robocode control API - it handles multi-threading under the covers, lets you configure input parameters and prompt the user for those fields with a graphical dialog, and includes some examples that do basic batch battles or a single-elimination tournament.

I feel like this was the final prerequisite to the kind of real bot development like I'm used to. So I'm pretty stoked on that. :-)

Voidious03:50, 22 April 2013
 

And now that Game Runner is out, I added a leaderboard for the LaserGallery stage. Might work on a gun myself sometime soon: LaserGallery/Scores

Voidious17:12, 22 April 2013
 

This is pretty cool - HTML5 replays: 6-bot melee on battle1

(Sorry, seems broken on Linux/FireFox, still troubleshooting that one.)

Voidious06:14, 6 May 2013

Wow, that is awesome!

Skilgannon09:06, 6 May 2013
 

Very impressive!

ABC13:09, 6 May 2013
 

I finally got around to writing a learning gun for BerryBots. At first I was just out to port Rednaxela's kd-tree to Lua, since I thought that was a prerequisite to the gun I wanted, and a prerequisite to testing correctness of a kd-tree is writing an optimized linear KNN search. But once I had a linear KNN search, I realized it would be plenty fast enough to run the targeting challenge stage, which is only a few thousand ticks per enemy with a decent gun, so I built out the rest of the gun.

So it's mostly just KNN with waves / displacement vectors. A precise MEA and GuessFactors is probably worth pursuing. But I think the next thing to start to handle is the presence of walls, which has a lot of ramifications.

It came out pretty good: testgun.lua. Not much code, runs pretty fast, reasonably effective. And it's a new high score on Laser Gallery.

Voidious (talk)01:26, 14 August 2013

Ahh, neat.

With regards to handling the presence of walls, that's a case where I see the utility of PIF versus displacement vectors and guessfactors as being significant. Guessfactors aren't really well-suited to the presence of walls. Displacement vectors allow you to handle walls occluding where they end up. PIF however allows you to handle not only walls occluding where they end up, but also handle ruling out paths which would be interrupted by walls.

Rednaxela (talk)16:04, 14 August 2013
 

Yeah, agreed that PIF has some key advantages. Checking wall collisions every PIF tick might be slow, I'm not sure. There's no trig, but it would be (# walls) * (# projections) * (# ticks per projection) line intersection checks - not sure how much that adds to the PIF CPU load.

I'm excited to try this in Melee, too, since you can see everyone at once. Though I may need that kd-tree pretty quickly.

Voidious (talk)17:56, 14 August 2013

You don't need to do that many line intersection checks. If you store your walls in a tree (i.e. r-tree or bucket kd-tree), or even a sorted list (sorting by one of the two axis), you can avoid needing to check every single wall by quickly ruling out large groups of walls that are too far away.

If your robot is using a pathfinding algorithm to navigate the walls, you could re-use that structure to find which walls you need to check (if any) to avoid needing new structures to search walls (i.e. track the current pathfinding node, and use that node's information to know which boundaries to check on a tick if any).

To save per-tick iterations, you can also use a trick I've used and seen used in PIF implementations: Based on the minimum number of ticks away waves/walls are, you can skip ahead in your PIF history, ignoring all the ticks inbetween.

In other words... nah... you can more or less reduce both the (# walls) term and the (# ticks per projection) term to much smaller numbers.

Rednaxela (talk)01:07, 15 August 2013

Thanks for the ideas! I love the kd-tree/sorted list one. I might have to go back and optimize it in the main game engine.

Voidious (talk)17:36, 15 August 2013

I'd say for that purpose r-trees are more suited than kd-trees, but yeah. From what I've heard, it's very much standard practice to use r-trees or other structures for collision detection in game engines where you have a very large number of entities/surfaces/etc which you may want to perform collision detection with.

With regards to 'other structures', so long as things are in a bounded size region and the density variation of objects is not too extreme, rather than a tree you'd probably get better results taking a very simple approach: Divide the area into a 2d grid, scaled so that you have a no more than a few entities in each cell, and in each cell store a list of entities which are within that cell. The only reasons to use a tree instead of a coarse array, is when the density of collidable objects/surfaces varies significantly between areas (i.e. you don't want lots of cells that are near-empty with other cells that have thousands of objects)

Rednaxela (talk)18:09, 15 August 2013
 
 

So thinking this through now, the walls in BerryBots have some interesting implications for PIF, too. For instance, if a log you're replaying includes that bot hitting the wall, what do you do? Or if a replay would cause you to hit the wall? In Robocode you might throw those out - it's rare and kind of a flukey situation, since you mostly never want to hit the wall. But there's no real disincentive to hitting walls in BerryBots, so it could be super frequent. Maybe you instead replay until the wall hit, then do a sort of single tick style re-projection for similar situations from that point on. And you probably want to precisely predict the wall bounce physics too.

Voidious (talk)02:12, 18 August 2013

Maybe what would make sense would be "fuzzy" wall collision handling that validates the projection against what happened in the PIF log:

  1. Detect and log when the enemy hits a wall as part of the PIF log.
  2. If the log that is being replayed does not contain a wall collision at a similar time, throw out projection if it collides with the wall by more than a certain margin (give leeway for the projection barely glancing by it)
  3. If the log that is being replayed does contain a wall collision, throw out the projection unless the projection also contains a wall collision at a similar time (or at least a near-collision)

The idea would be to filter projections based on an approximate presence/absence of a collision matching the PIF log, in order to ensure the scenario of that projection is sufficiently similar to what you'll be predicting.

Rednaxela (talk)16:48, 19 August 2013

Very cool ideas. I guess you might need to allow for more fuzziness depending on the wall layout / wall hit frequency. I still like the idea of re-projecting from time of wall hit, but I'd really have to just try both and compare because I just don't have much sense of which would work better.

It also makes me wonder about doing the same in Robocode PIF. You could compare snapshots along the projections to further narrow down which situations match most closely or throw out irrelevant projections. You wouldn't have as many wall hits to compare, but you could still compare wall hits and distances or other stuff.

I guess the problem is you mainly want to examine stuff that causes you to alter your path, which requires knowing the future unless you're talking about walls that don't move. But if a past move log brings the enemy far away from all other bots on the field, and projecting that log now causes them to run into a swarm of bots, that might not be tough to predict and easy to realize you should throw it away.

Voidious (talk)21:59, 21 August 2013
 
 
 
 

Back at this and the replay support's almost ready. Now with ship/stage output consoles, video player controls, and results at the end! [1] [2] [3] [4] [5] Still a few loose ends and optimizing to be done. (And I think Linux/FireFox, the combo specifically, is still screwed up.)

Some things I'm really excited about:

  • The data collection is pretty fast and low overhead, so I can leave it on all the time in the engine. Last I checked it was a ~5% performance hit, which seems worth it.
  • You'll be able to save replays from the Game Runner API. So for anomalous results, you can save the replay (which includes your output console). Like right now I have a 99.7% success rate on Laser Gallery and need to figure out what's up in those 3 of 1000 cases.
  • Long term: I'd like to have a web app that lets you select a stage, some sample bots, input Lua code for your own bot, submit form to run match headless in the cloud, and view replay in the browser.
Voidious (talk)07:45, 16 September 2013

And man, now that I'm testing this with the Game Runner API, I am just salivating. You can run a tourney or a benchmark and literally save every replay to watch later without any problem, besides maybe disk space. (Looks like ~100 bytes per tick in these 1v1 matches I just ran. So 10,000 ticks would be 1 meg.) How cool would it have been to have replays for every match in the Twin Duel every week when it was running?

Sorry to boast, just excited... :-)

Voidious (talk)04:34, 18 September 2013

Sounds cool.

Chase07:23, 18 September 2013
 

I'm not sure I'll make the time, but I don't see any reason we couldn't add this same style of replay support to Robocode. All you really need is fast/native buffers to cache all the pertinent data during the match in a lazy/efficient way. Java has ByteBuffers. I re-tested and with BerryBots, it really is only a 5% performance penalty with trivial bots. And of course some memory, but not even that much. And once you have sophisticated bots, the engine itself is only a small % of overall CPU usage anyway.

There's still a fair amount of work in coalescing/parsing the data, saving it, tying it into the GUI and control API, writing the replay renderer and all that, but no major technical limitations I can see. The biggest obstacle for me would just be getting my build environment setup to build Robocode, which I've never done before. The Javascript rendering could probably be forked from BerryBots, too, instead of starting from scratch.

Voidious (talk)19:59, 4 October 2013
 

Finally! BerryBots v1.3.0 is out with HTML5 replays and a killer new stage preview.

So now, out of the box, you can use the "simpletourney" sample Game Runner to run a single-elimination tournament, multi-threaded, saving replays of every match that you can post with the results. I think that's pretty sweet.

You can also save replays from your benchmarks. So for those 1 in 1,000 cases where you mysteriously lose to Walls or whatever, you can save the replay and watch the match afterwards. And replays contain your output console. I think it beats the heck out of trying to log all the right stuff to disk.

Voidious (talk)03:58, 14 October 2013

Those replays are really cool. I wonder if there's any way to get your stuff onto hackaday or the RasPi blog?

Skilgannon (talk)14:01, 14 October 2013

Thanks man!

Yeah, PR isn't exactly my forte. And BerryBots isn't the only programming game out there lacking players, so it's kinda tough not to come off as desperate. I'm a little more comfortable with it now that BerryBots is more polished with some neato features that I'm really proud of... But still, I'm more inclined to just focus on making it good and make a small PR push every once in a while.

I also try to keep in mind that I didn't even get into Robocode until 4-5 years after it came out, and that was years after the original author had stopped working on it. Programming games can have a pretty long and slow life cycle. Even here at the RoboWiki, we have some pretty long periods of low activity. And it even seems like Robocode is still growing in popularity! Which is kinda crazy.

Voidious (talk)19:54, 14 October 2013
 
 

A couple cool things:

  • v1.3.1 is out with .deb and .rpm packages for Linux. [1]
  • Frohman released a new bot the other day, Sanic, which beats every other existing bot in 1v1, most notably Jlm0924's bot NightShade. It and another new bot, Cortez, both move at high speed and bounce off walls fearlessly, which so far seems effective. A duel between them looks kind of pinball-esque.
Voidious (talk)00:10, 11 November 2013
 

Now available in a browser near you. :-) http://playberrybots.com

Voidious (talk)02:09, 20 November 2013

Wow. I am impressed.

One suggestion: when mouse is on the battlefield window one one see humongous pause symbol right in the center blocking the view. May be putting it somewhere at the conner would be a better idea.

Beaming (talk)03:29, 20 November 2013

Thanks, that's good feedback. If you didn't notice, the controls disappear if the mouse is still for a certain time - I'm basically trying to emulate typical video player behavior. So I think I should probably do two things:

  • Shorten the delay before the controls disappear on desktop (responding to mouse movement).
  • Make the controls graphics smaller on desktop.

As a side note, the timer is actually much longer on tablets because I thought that felt more natural there. Probably because you typically make a lot more ambient mouse movements than touch events to extend the timer.

Voidious (talk)03:41, 20 November 2013

Well, as Skotty mentioned below it is FAST. Sometime player control has no time to disappear and game is already done. May be it is enough to respond on click event in the battle field area for "pause"? We are all sort of used to this behavior in players.

And I second Skotty, it definitely need slow down button. I think it exists in the desktop version.

Beaming (talk)05:05, 20 November 2013

Alright, I think these have been addressed, though I've kept the video player style overlay.

  • Defaults to 30 fps (half speed) with options for faster.
  • On desktop, pause/play controls are smaller and disappear more quickly (by ~30%).
  • All the controls are shifted down a bit.

Thanks to both you guys for the feedback! I'm pretty happy with these changes.

Voidious (talk)03:47, 23 November 2013
 
 
 

Awesome. Very well done. Not that I'm an expert on the variety of these types of games, but I've never seen one where you could do all the coding and battles online before.

Is there a way to adjust the game play speed? I don't recall seeing that. It would be nice if play could be slowed down. The default speed seems so ADD.

Skotty (talk)04:54, 20 November 2013

Thanks. It's certainly not the first to run in a browser. Most of the ones I've seen use Javascript for the bots and actually execute the game engine in the browser too. This is offloading the game processing to an Amazon EC2 instance and then viewing the replay. Also, some web based games are like a whole platform where you upload your bots, compete in ladders... This is more of a stand-alone try it / demo thing, at least for now.

In the desktop app, you can adjust the playback speed, but I didn't get that into the replays yet. And I've been considering switching the default from 60 to 30 fps... I guess that's one vote in favor. :-)

Voidious (talk)05:08, 20 November 2013
 

Alright, the web UI now defaults to 30 fps with options for fast (old speed) or crazy fast. I think I just have an affinity for smooth 60 fps graphics, but it really just feels so much more sane this way. You calling it "ADD" gave me a chuckle. ;)

Voidious (talk)09:29, 21 November 2013
 
 

BerryBots v1.3.2 brings Game Runner API and replay/web rendering updates, plus a bunch of bug fixes. [1]

But what I'm really excited about is it adds functions to the Game Runner API that let runners write to the ships and stages directories. Since Lua is interpreted, there's no compile step necessary and this is all that's needed to make genetic algorithms (and similar) possible. I included a simple example program that evolves a ship to solve a maze: MazerEvolver.

Voidious (talk)18:56, 4 December 2013
 

By the way, I ripped off the "Chronicle" idea for BerryBots: BerryBots Chronicle of 2013. (Not that the RoboWiki invented the end-of-year recap...) It was a big year!

Voidious (talk)18:15, 9 January 2014
 

Kicking off the first real BerryBots competition: BerryBots Little League. :-) A month to write a duelist and win a t-shirt or $25 Amazon gift card. I didn't want to force things, which is why it's taken this long to do this... But finally a couple people brought it up in the forums, so here we are!

Most exciting part for me is you can develop and submit your bot right from the web UI at PlayBerryBots.com/battle.

Voidious (talk)22:36, 26 January 2014

How robust are your servers? Do you think you could handle a RaspberryPi.org blog entry?

Skilgannon (talk)21:04, 28 January 2014

Haha, I really doubt it. :-) But I dunno. It would be a good problem to have. :-P It's on Amazon EC2 and on a single instance of their smallest tier. But theoretically, it shouldn't be too hard to scale it up with EC2, since that's basically their core strength as a platform. It's a pretty simple app.

Voidious (talk)21:17, 28 January 2014
 

Er, I think berrybots.com could handle it. That site's pretty lightweight and on its own VPS. But playberrybots.com is on EC2 and obviously running matches server-side could slow down pretty quickly. Most matches only take 1-2s to run, so it should be able to handle at least a few people at a time.

Voidious (talk)21:29, 28 January 2014
 

Got my t-shirt yesterday! http://imgur.com/a/TlZMS :-)

Voidious (talk)19:57, 2 February 2014
 
 

http://www.dijitari.com/void/robocode/

on http://www.dijitari.com/void/robocode/ there are unreleased versions of diamond and dookious and other robots why didn't you release them voidious WHY

Tmservo (talk)17:26, 1 December 2013
First page
First page
Previous page
Previous page
Last page
Last page