Hacker News new | past | comments | ask | show | jobs | submit login
I've got 10 btc for the best CoffeeScript/JavaScript Nodewar bot (nodewar.com)
171 points by malgorithms on April 11, 2013 | hide | past | favorite | 94 comments



I am really excited about this. Here's some feedback from my first impressions:

1. Offline support: I'd love to work on this offline, write unit tests, use vim, all those nice things. You mentioned elsewhere that you're running the server-side simulation in Node—would be great if that was open sourced. :)

2. Better auto-saving: If offline support isn't available, editing online needs to be improved. I was messing around with my AI while on a shuttle with flaky WiFi. I saved my progress and navigated away. Later I came back, and turned out my progress was not saved. (a) Let me know if saving failed? (b) Maybe use LocalStorage as a fallback?

3. Better built-in library for common operations: o.lib.physics is a great start, but I'd love to not have to implement things like: "orbit around TARGET at distance X", "maintain distance X from TARGET", "orient towards (or away from) TARGET", etc. Sounds like these kinds of libraries could sprout organically from the community, but it's not obvious where to find them.


To implement point #3 would go against the spirit of the competition, I think. Part of the challenge is to implement a good core of navigation code.

Unit testing a physics simulation could be quite tricky too.


Unit testing a deterministic one is not too bad. Unit testing a stochastic physical system is a nightmare.


@3 I hope that they don't implement that. Good navigation code is half of the game.

If you want to see examples of competitions like this, many teams for Battlecode hosted by MIT have open sourced their code.


> In the unlikely case something very bad happens to bitcoins between now and then (or ours are stolen or become unavailable for reasons outside our control), we reserve the right to pay $2,000USD instead.

Does this go both ways? What if Bitcoins are worth $500 USD at come award time? Will you still be paying in BTC, or will you just pay $2,000 USD instead?


Nope, I will pay in bitcoins. I fully intend to pay in bitcoins (which I have set aside), regardless of the value, but reserve the right to pay in cash in case something happens to mine AND they become ridiculously expensive. I would pay $500/coin to buy them back in the case you describe. I would not pay $10,000/coin, however, if my 10 were stolen. Just protecting myself and my family from a crazy event.


Might I suggest transferring the 10 btc to a custom wallet with a single address in it, encrypting the wallet and simply putting it online for everyone to see/download. The winner gets the password to the wallet.


Fair enough, just thought I'd ask. :) I can't even view the site properly because of my work proxy, but I'm interested in taking a look later and perhaps participating.


Presumably they have the 10btc set aside. It would be a bit stingy to hold it back if btc goes up, but I guess they might.


Great game! However, I would suggest changing the behaviour of the moons.

Right now the moons are such a big threat that the best way to win is to simply devote all resources to avoiding them, and hope the enemy collides with them before you do (as all the top bots in the ladder clearly demonstrate). This not a very fun strategy and makes for quite boring matches.

One way to avoid this problem is to make the moons harmless. They still pull you in and push you around, but when you collide with them nothing happens. Thus they would no longer be the biggest threat on the field, but rather a nonfatal annoyance. The biggest threat on the field would instead be your enemy, and to increase your chances of winning you have no choice but to actively try to kill him.

The moons will still have to be dealt with accordingly by the ships if they want to be effective, but a majority of the resources will now go towards battling enemy ships. Much more fun to code and to watch.


Not really true. A quick hack that does two things (evade moons and kill queen) provides already some interesting chaos. Look at my Ripoffs (only 1 match in ladder right now, but wins with the #6 pretty consistently). As people develop some better bots, evading moons will be less and less noticeable part of their behavior. Especially if some of those will be open sourced too.


I think the moons are okay. The very early algorithms we're seeing are primitive -- they try to avoid moons by thrusting directly away from them, which is a bad idea. When people introduce proper route planning, moons will look less overpowered.


Or change the 3 moons to an expanding black hole that pulls you in. Perhaps that could be another level ;)


The Nature of Code [1] has some nice examples on how to calculate steering/acceleration behavior for targeting.

http://natureofcode.com/book/chapter-6-autonomous-agents/


What's up with the sign up form? What the hell does @name mean?

A twitter username? Does it have to be twitter? Is it just a regular username? Then why does it have an @ sign? Do I need to enter an @ sign or are you going to prepend it after I submit the form?

Edit: okay, so it prepends the @ as you type. Now I'm even more confused about whether or not it's supposed to be my twitter username or not.

Edit 2: Signed up, seems to be just a username. The website refers to usernames in the same way as twitter? The top bar says '@<username>' and links to the account settings. On the home page it links two @usernames to twitter, not a website profile. On the ladder, it shows more @usernames but don't link to twitter and look like they will link to user profiles.

Please don't mix twitter usernames with your site's usernames, it's confusing, especially when some are internal links and some are twitter links.

Anyways, awesome site, reminds me of the google ai challenges. I hope you keep this open perpetually though, or keep running different challenges. Sucks that the google ai challenges only run once a year.


Seriously? You guys will nitpick about anything.

I typed in a username in the field and pressed enter. It worked fine. Mystery solved.


Yeah, I signed up too, I never said the sign up form was difficult. Doesn't solve the mystery of whether this has anything to do with your twitter account, since there's no reason why that @ sign should be there.

My edits make the comment a bit dramatic, but that wasn't my intention.


I'm posting again as a reply, since it's kind of separate from my parent comment.

What kind of environment does the code execute in? What standard javascript functions/libraries do we have access to?


The browser version runs in a WebWorker (each team gets one). I didn't even know what WebWorkers were before I programmed this. The server side runs in a NodeJS process (each team gets its own), and your code runs in a fresh VM context. These both provide commonly expected JS such as Math and Date, but not other stuff such as console (which I provide in the webworker case and send messages back to the browser).


Any plans to release the nodejs code? Coding in the browser is ok, but it'd be much nicer to be able to code in my usual editor and test locally using the nodejs version.


You should submit this to the Mozilla dev derby (https://developer.mozilla.org/en-US/demos/devderby). This month's theme is Web workers.


Been playing with this for a few hours. Very interesting stuff!

I'll second what shazow said about auto-saving and resiliancy to internet/browser issues. The page has crashed multiple (7-10) times in Chrome. Fortunately I didn't lose too much, but even losing a couple obscure changes is rather annoying.

The UI for reloading your own species was rather confusing at first. I thought when I reloaded the page I would have my species there already and freaked out when it wasn't! Eventually I figured out I had to Add Team with my existing team.

I'd love to have a bit more robust vector libraries, such as doing vector dot product (vector projection) and vector rejection, in additional to just speedTowards.

It would be particularly helpful during testing & debugging to have a mode with no moons, or perhaps just a single static moon in the center. Continue having the three moons for ladder and competition, but it'd be super to have the more basic map to make it easier while training my geometries how to move and maneuver. Maybe limit the option to when only one team is loaded.

Thanks!


Is this supposed to happen? http://youtu.be/vndQFnesPT8

edit: specifically, the part at the end when the moons fly off the screen, the world shrinks to nothing, and the counter on the right expands wildly.


yes, you haven't loaded any species so there are only moons.


that's meant to end the game in case of stalemates


I created a typescript declaration file for the environment of nodewar, if someone wants to try writing it in TS. https://github.com/JacekLach/NodeWarTyped


Cool. I've played with a few of these over the past several years but the problem was typically few participants and no incentive to win. This one shouldn't have either problem, plus it's not C++! (I hope they get ClojureScript working in the next few days, but JS is so much better for this sort of thing than C++...) How often do ladder matches get scheduled and played?


Thanks! If you want to use ClojureScript, maybe just work in an editor of your choice and paste into the site for now. I do that anyway when I play with it, as I prefer Sublime to Ace.

Right now it starts a game 1 minute after the previous one ends. I will likely speed that up as the number of submissions increases.


No undo in the editor makes things a bit painful. It just eats CTRL+Z, so If you accidentally delete a line, you pretty much have to exit (remembering not to save), remove your team, re-add it, and click edit again.

Other than that, I forsee thousands of dollars in otherwise billable hours evaporating before my eyes. Nice work!


Looks amazing. It bothered me that I had to sign up to watch the replays though, it's a pretty big threshold and I almost didn't. You might want to have a demo because watching a replay really is quite convincing. I don't know any JavaScript, but this seems like an amazing way to learn.


I wish the ladder and replays were available publicly, I have a few friends that are interested but are put off from the signup form. I think if I could send them a link to a replay without signing in, they would get a kick out of it and potentially join in on the fun.


crud, I've been nerd-sniped... guess I know what I'll be doing at nights now.


It looks like the API doesn't give access to the whole shape of a ship - only its centroid position and the direction of the sharpest vertex. Do the other vertices not matter? In any case, we should probably be able to compute which edge we would be splitting and stuff like that.


They matter in that they might ram you :-). You also have another ship's moment of inertia, which tells you something about it. But no, you're not provided other ships' geometries. I could change this, but likely not during the contest.


I have ported a programming game http://terrariumjs.wiselabs.net a while ago (javascript).

You can write the AI of a herbivor or carnivor, and try to invade other people's terrariums :) The documentation is a bit lacking though.


i would love to be able to use machine learning with this. for example, if you released the "universe simulator" in a binary/open source would be more than enough to start.

any thoughts on this from the creators of the project?


Seconded! Being able to run tons of reliable automated testing is essential to get beyond the "alchemy" phase of AI development.


It'd also be nice to be able to use the same gravity engine to project orbits and collisions within the AI code.


Is there no way to get the direction vector of the ship? You have rotation in radians, but no way to convert that.. not even cos/sin to roll it yourself. Am I missing something?


It's just Javascript, so you should have all the usual array of built-in functions.

https://developer.mozilla.org/en-US/docs/JavaScript/Referenc...


Hmm, I thought I tried using a Math function without success, but I must have done something wrong. Thanks for steering me off the wrong path.


> vectors are 2-item arrays (for example, a velocity might be [2.3, -1.2])

Would be nice if they mentioned what each item was. Is it magnitude + direction or deltaX, deltaY?


I like the idea, never participated in this kind of competition. However I had to write an AI for a same kind of game in college. It was a 2d football simulater and we had to write the AI in haskell. The tactics however had nothing to do with real life football (rushing was the best strategy). Does anybody here know if this is an evolution of an existing game, or did the creators invented this game by their self's?


Can I remove my node from the ladder? I am so ashamed.


Haven't received a verification email, can't create species, can't edit profile to check my email was correct ... want to play ...


It seems that the ladder updates are slow. Is it intentional that each bot gets one match per hour? Is it processing power determined? If the latter, can we somehow contribute cycles to it?

I've got a piece of iron sitting mostly idly, so I could spare a VPS. I guess many people here could pledge something similar for a fun project like this.


Put this together (quickly) so I can dev locally and upload new code with a single command: https://github.com/mikeycgto/nodewar-tools

My "species" code then uses grunt for all sorts of awesomeness (basic tests, concatenation of files and autoupload on save).


Can I just see some matches without signing up? Juts a video if you must.


Awesome. I would love to participate, but I think my exams will get in the way. :(

Downloading a replay is taking a very long time. Also, is there an easy way to plot things like projection vectors?


I am unable to load even the shortest replays.

Edit: This appears to be a chrome specific issue.


Same here.

Firefox Nightly v23.0a1


The replays range from 1-8MB from what I have seen. The speed from Amazon ranges from 150KB/s to 250KB/s.


A thing I would love is deploy via git push.

Simply activate a post-push hook that runs a specifically named js/coffee file!

This would both accomodate for offline editing and any compile-to-js language.


Sweet.

Now, is there any way to code in ones editor of choice and deploy from the command line? Chrome tab crashed on me while I was editing my species and I lost all of my changes.


This looks ace. I haven't looked into it much, but is not knowing either of the languages going to be an issue? Or should I be able to pick up what I need easily?


I would say the programming skills requirement for the game is just beginner level. At least that was my hope making it. If those languages are new to you it will take a little overhead but not much.


Do any beginners want to team up? Going to give this a try to learn more JS and learn how to build an autonomous agent, I don't have any intention on winning.


I want to! See my comment regarding infrec's offer to help.


Hey, I couldn't find any contact info in your HN profile. Have you and infrec started already? If not, I'll go ahead and create a repo on GitHub.


Sorry about that, I should have given you some point of contact here.

I've sent you an email (found on your GH).


It would be great for debugging purposes if all ships could return an array of color coded vectors (or even just a single vector) to display every step.


This looks pretty awesome! I'm going to try my hand at a species today. FYI, the confirmation email went to my junk mail box on Gmail.


IBM offered games like this through their academic initiative when I was in school.

Cool idea moving it into modern JS environment.


The amount of effort I put into this is directly proportional to how much Mt. Gox is being hacked or DDOS'd. Lol.


What's even more remarkable, is these posters on here and other forums, (and even the media outlets), are saying that - an influx of buyers, and a de-flux of markets, is causing Bitcoins to drop from $250 down to $60! Lol. That's pretty much the opposite of what logic and reason say should happen.

MtGox has to be where market manipulators live - and they run the coin prices up every day. Now that it's not trading at the moment over there, the real demand is meeting the real supply.

If they stay shut down for a while longer, it will give all the horders and speculators a chance to rightfully panic and sell. $60 is not the bottom.


Mt. Gox was not being hacked or DDOS'd, it had a legit influx of users opening accounts.


Um, there was definitely DDOS'ing going on. I witnessed it myself with a bunch of other sites (bitcointalk, bitstamp, bitcoincharts etc). Mt Gox was trying to do damage control and spin it positively. That failed and now they are reporting DDOS again.[1][2]

"@MtGox Maintenance Over however we are now under a DDoS attack." [1]

Mt Gox has taken a credibility knock, which has a ripple effect on the BTC pricing right now.

Overall it probably a temporary setback, but does bring to light irrational exuberance voices ignoring others that were calling for a more decentralized ingress/egress between USD and BTC. IOW bitcoin needs more exchanges to drive competition, and perhaps even meta-exchanges too.

[1] https://twitter.com/MtGox/status/322281690309468160

[2] https://www.facebook.com/MtGox/posts/456123227805423


What evidence do you have that each of these sites weren't going down just because of real high traffic?

I don't think it's at all unreasonable to think that each of those sites would have naturally seen their greatest traffic surge with the events of yesterday. For example, over 20% of all subscribers were present on /r/bitcoin (for comparison, (eg) /r/android is currently at about 0.5%, /r/bitcoin is around 10% now).


There have been large sequences of micro-transactions of 0.01 BTC, all on the heels of one another. That points to market manipulation/DDOS.

I'll see if I can dig up sources.


This is awesome fun! Just spent my whole evening toying around with it. GOGOGO Prima Polys and Totally Turtle!


Is it possible to send positions/result to an outside server to use some kind of genetic algorithm ?


You are free to analyze existing recordings, if you like. So you could make entries and study their recordings. I don't intend to document them during the contest, though. As for sending info out during the battle, probably not. Although - you are free to do that with the sandbox, of course. It all runs in your browser.


Great way to short sell BTC!


This has potential to be really fun! But how to select others to compete?


When you click "Add team" you can add other species, but I think only the open-source ones and you get no ladder points (but it's very useful to test your design). To compete against everyone you'd have to "submit to ladder", I think.


Oh, I just meant to compete against specific species.

Seeing that they use a Glicko rating system makes more sense; not having the option to compete against a specific species means that top ranked players won’t have to worry about tradeoffs between game activity and game rankings. Well maybe they’ll still worry, but they won’t be able to do anything about it except build stronger AI.


"Create a species" doesn't seem to work, even with all fields filled out.


Did you verify your email address?


for luddites, 10 Btc = $300-2000 depending on the exchange rates of the past two months, or even possibly $5000 by the time you win. Possibly a quite uncertain prize!


The certain prize for me is having fun and learning CoffeeScript and physics. That's really more than I'd expect from any game :) The 10 BTC would be nice, but meh.


I want to play, my JS is good, my geometry/math is not :(


I'd be willing to give it a shot if you would like to partner up. I have reasonable (for some value) math chops. Email me at infrec.obs@gmail.com if you are interested.

Time-wise I can commit only a couple of hours a week so I don't expect much but it seems like it could be fun.


Any chance I could join in? ;)

I know a bit of JavaScript, but my math intuition is somewhat poor as well, so it'd be more so I can learn than anything else.


Sure, feel free to send me an email! It's all about learning and having fun.


Would be handy to expose the AI step delta in the API.


This is uncertain. The game steps at a specific rate (the physics is deterministic) but does not wait for callbacks from your AI to proceed with the game. If a specific ship hasn't replied to the last request for instructions, the game won't call it the next round. I was thinking that rather than providing the game step in the API, the simplest thing is for an AI to study the gametime and draw its own conclusions.


After playing around with it for a while, it hasn't actually made that much difference to me. I perhaps shouldn't have made the suggestion so hastily ;)

Really great fun to play. I love it.


Where can I find what 'speed_to_nearest_moon' does?


That's a function in one of the sample codes I wrote, so it should be in the same file you encountered it. It likely uses some of the lib functions defined on the documentation page.


how do i compete against others in the ladder?

i have a team that seems to beat anyone i test against, but i can't figure out how to rank up.


There is a "Submit to Ladder" link under the title of your species. From what I can tell, after clicking that link, the ladder takes over and sets up matches automatically.


I'm having way too much fun with this.


I kinda wish there was a dedicated forum/community of some sort for this.


not worth quite as much as 14 hours ago hah




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: