Loading...
  OR  Zero-K Name:    Password:   

ZK Developer Support of AIs

25 posts, 702 views
Post comment
Filter:    Player:  
Page of 2 (24 records)
sort


7 years ago
Dear developers,

The various AIs are far along enough now that they should be considered an important feature and draw of ZK.

It a Spring tradition to render AIs useless the very moment that the AI maker stops frantically patching back into compatibility with the constant engine releases. It would be nice to recognize this is not a good model and that it eventually erodes the motivation of the wonderful people who provide us with robot opponents.

Going forward, would it be possible to work around the existence of these AIs with future engine upgrades or severe balance changes, and check with the AI makers before putting out releases that break all our robots.
+1 / -0
There is currently no working version of spring for zk. All there is to do is choosing from one of the development builds to keep the negative impacts to a minimum. Because of this, zk doesn't use the latest version of spring which means bugs can't be properly debugged either, as some of them have already been fixed in newer versions and the code has changed.

Once we actually arrive at an engine version that could be called stable, we should announce any changes as you say. I'm actually hoping for a new Spring 91 around 104 or 105. But in order to arrive there, we'll have to help the spring devs by letting them know about our issues. The most efficient way to do that is to take a step backwards and use the latest dev builds. This will probably cause even more crashes/lags/desyncs than the current versions, but those bugs won't find themselves.

Our current "player base" would probably hate being experimented on, but DeinSteamDreams require a stable and well tested engine, not some dev build. AIs breaking is a side effect of those experiments.


This is all just what I've picked up from how the engine has been getting updated lately and not representing AUrankAdminGoogleFrog or any actual dev's thoughts.
+0 / -0

7 years ago
Well I figured out what broke KGB. Part of it was changes in startscript, but that depends on lobby more than engine. I made the startscript parser more intelligent so it should no longer depend on any specific lobby though.

The other part was that someone arbitrarily got rid of unit.getMaxSpeed() and made it always return 0. Technically that function should probably never have existed in the first place (unless it counted speed modifiers??) but arbitrarily getting rid of things without actually removing them from the library is extremely stupid because then you don't even get proper exceptions to tell you that it's broken.

And yeah, having stuff randomly break for no good reason when half the ai devs may be on haitus is dumb.
+3 / -0

7 years ago
There are plans of adding CircuitAI to spring's releases, it requires an update to the buildbots which unfortunately hasn't happened yet.
Java AIs are a slightly more complex issue.
+0 / -0
I don't see any point in shipping Java AIs with the current JVM detection. Spring would need to accurately find x86/amd64 jvms of the required version or higher and ask for the path instead of just killing the AI if its missing.

USrankaeonios you're still reading startscripts? We have a lot of nice Game-/Team/UnitRulesParams
+0 / -0


7 years ago
I don't think bitrot can be solved except with maintenance. And maintenance needs maintainers.

Therefore:
1) AIs that want to be ressilient to bitrot should be maintainable in design and implementation.
2) There should be a superpersonal entity that attracts and keeps AI devs. That is, an AI community.
3) The AI community should be in contact and good relationships with both engine and game developers, from both ends. Though, as here here in ZK game developers fully control engine deployments, the latter are likely a higher priority.

The current ZK AI spring is an outcome of these points being satisfied. They are not satisfied for many other Spring games and this is why ZK has about 100% of current Spring AI scene all to itself.

1) All active AIs are reasonably maintainable and even capable of attracting non-coder contribs (Circuit) or even completely swapping the maintainer without losing ideological integrity (KGB).

2) All they were developed in parallel, constantly measuring up to each other, borrowing some solutions while seeking different ones to distinguish themselves.

3) ZK was changed on multiple points to specifically accomodate AIs (SkirkishAIMessages for various functions; exposure of critical data as rulesparams). Spring was likewise changed to accomodate these projects (rulesparams reading params and luamessage support). Many of those were done by AI devs themselves but this still requires, and amounts to, engine-game-ai community dialogue.

I think the best way to strenghten the AI scene is social engineering, especially on the community front. A pipe dream scenario would be an AI tourney being declared a month after Steam release, which in this optimistic scenario happens in early Spring 2017. The tourney actually happens in summer or autumn, giving entrants time to build their bots; generating new ai devs and projects and galvanizing the community.

A pessimistic scenario is that such radical growth does not happen, and then the effort should be to maintain the current beneficial climate, keeping the currently active projects alive. Perhaps delaying engine upgrades for moderate grace periods pending on AI compat is one way to achieve that. Perhaps even that is not needed as long as no radical destructive actions are taken.

If you have been watching github (you should if you want your opinion to have a weight bonus) there is a plan for lobby support for AI distribution. This is something that has been desired by many people for a while and is going to improve the climate even further. But to reiterate, this in itself does not mean that a project without maintainers can eternal lie.
+3 / -0

7 years ago
quote:
USrankaeonios you're still reading startscripts? We have a lot of nice Game-/Team/UnitRulesParams

Game/Unit/Team rules params tell you absolutely nothing about AIs. I know this for a fact because I checked. Technically the AI interface has a SkirmishAI class that should give you that sort of info but at the same time it also doesn't allow you to get info on any skirmishAI besides the one that's performing the inquiry, which is utterly useless. I didn't actually check what sort of info it provides either, so I'm not sure if that even contains anything useful.

Also I copied my merging code from CSI...

quote:
I think the best way to strenghten the AI scene is social engineering, especially on the community front. A pipe dream scenario would be an AI tourney being declared a month after Steam release, which in this optimistic scenario happens in early Spring 2017. The tourney actually happens in summer or autumn, giving entrants time to build their bots; generating new ai devs and projects and galvanizing the community.


I think that's kind of absurd. AI dev is one of the most difficult and involved aspects of game dev in general, and people without prior experience in lua dev are not likely to be able to do it successfully. Particularly due to the issues with callins being issued in random order and unitDestroyed being unreliable for determining that a unit is dead.
+0 / -0


7 years ago
quote:
It a Spring tradition to render AIs useless the very moment that the AI maker stops frantically patching back into compatibility with the constant engine releases. It would be nice to recognize this is not a good model and that it eventually erodes the motivation of the wonderful people who provide us with robot opponents.
It is a Spring tradition to render everything useless with engine releases. Constant maintenance is required. This is something I like about luaAIs, they rely on the lua interface which I am more likely to notice is broken and more able to fix.
+1 / -0
It's as easy for skirmish AI devs to fix their AIs as it is for you to fix the lua ai. But due to CSI not being actively used by anyone I know, I'm not really tempted to fix it asap. There may already be a new engine a few days later.

Right now, I don't mind things breaking as we're currently in a transition/development phase to new infrastructure and newer engines. Once engine versions have settled down, it should be possible to announce updates in advance so AIs, maps, scripts and other things can be tested and either updated or disabled before the update.
+0 / -0


7 years ago
I've found that the important thing is how easy it is for me to fix things. Currently I'm just hoping that the AIs are actively developed. On the engine changes, while we are trying to follow engine development I don't think waiting to fix AIs is useful. If something broke in the engine it is unlikely to suddenly fix itself so you must input some action.
+0 / -0
quote:
But due to CSI not being actively used by anyone I know,


Objection! I use any working AI constantly!

Might also suggest that the reason it is not actively used is because people have trouble setting it up and running it. Circuit is popular because its stable, undemanding on cpu and connection, and has less setup steps - not because its a stronger AI.

quote:
Right now, I don't mind things breaking as we're currently in a transition/development phase to new infrastructure and newer engines.


We have always been in a transition/development phase.
+1 / -0


7 years ago
quote:
I think that's kind of absurd. AI dev is one of the most difficult and involved aspects of game dev in general, and people without prior experience in lua dev are not likely to be able to do it successfully.

I think you are replying to some statement that claims that all players acquired by ZK through any means in some scenarios are expected to become AI devs.

This is indeed an absurd statement - but not one that i ever made.
+0 / -0

7 years ago
I doubt that even experienced programmers would have an easy time at it, particularly when they don't have any real experience in ZK (which "right after steam release" implies).

It's like ZK experience -> spring dev experience -> AI dev which I don't see happening quickly for anyone.
+0 / -0
quote:
It's like ZK experience -> spring dev experience -> AI dev which I don't see happening quickly for anyone.

Do you see Spring Engine and ZK suddenly becoming frozen enough to make AI's stable without any maintenance?

(Perhaps CAI is an example of a stable interface. But i think it also has required some fixing over the years).

If not, you are going to need to maintain them (or have maintainers). You can have those maintainers from two cohorts: AI devs themselves, and Engine/Game devs.

For the efficacy of the latter cohort in maintaining AI projects, you only need to launch Spring with all its bundled AI's and see how many still work.
+0 / -0

7 years ago
Allow me to disagree with you and say that getting into AIs is probably one of the easiest things a person can start with in the Spring ecosystem, outside of writing standalone widgets perhaps.

Creating a new AI that builds units and sends them to the enemy is something most beginner programmers should be able to achieve in a few hours. What makes it easy is that you don't need to familiarize yourself with any existing code(!!), and you only have to learn a few callouts/callins which are either generated or can be looked up easily in any modern Java IDE.

The hardest (and most time consuming/unfun) part is probably to compile Spring with the .jars you need. I'd like to see that requirement taken out of the picture. It's certainly not something you want to present as a barrier to newbie devs.

Source: I've gotten into Spring by writing AIs for BA, as I liked using an open source ecosystem more than Starcraft's BWAPI, despite AIs being much more popular there. It wasn't that hard, and most of the concepts are similar to Starcraft (abstract enough).

quote:
A pipe dream scenario would be an AI tourney being declared a month after Steam release, which in this optimistic scenario happens in early Spring 2017. The tourney actually happens in summer or autumn, giving entrants time to build their bots; generating new ai devs and projects and galvanizing the community.

Probably realistic and a smart move, if the tourney is announced 1 month after Steam (or whenever a post-Steam stable is released), and actually takes place a few(3~6) months after the announcement (e.g. July-August). You'll have my support on this as we talked.
+1 / -0
quote:
; generating new ai devs and projects and galvanizing the community


Realistic, but I wish to add something:

Have a Human tourney running at the same time so those who couldn't build bots, or want to fight humans get a chance.

After the Human and AI victor is chosen, the two will duel each other in maps chosen by PRNG, stable only ofc.

I would like to see this happen. It would be a great goal for many players, go in human tourney and get to top, then fight your AI oppponent, or build an AI strong enough to takedown a human
+0 / -0
quote:
Realistic, but I wish to add something:

Have a Human tourney running at the same time so those who couldn't build bots, or want to fight humans get a chance.

After the Human and AI victor is chosen, the two will duel each other in maps chosen by PRNG, stable only ofc.

I would like to see this happen. It would be a great goal for many players, go in human tourney and get to top, then fight your AI oppponent, or build an AI strong enough to takedown a human


Apparently you've missed all the games where various people beat 2x circuit AIs on CCR (as well as some close attempts at 1v3). Building an AI that's strong enough to beat an advanced human player is extremely difficult, let alone an AI strong enough to beat a tournament winner. Even ZKGBAI can't do that in 1v1, and it's by far the strongest 1v1 AI that's yet been developed.

quote:
Creating a new AI that builds units and sends them to the enemy is something most beginner programmers should be able to achieve in a few hours. What makes it easy is that you don't need to familiarize yourself with any existing code(!!), and you only have to learn a few callouts/callins which are either generated or can be looked up easily in any modern Java IDE.


I think you're seriously underestimating the task. Even coming up with a proper scouting algorithm is quite difficult, not to mention other necessary things like parsing metal spots from GRP, choosing a good start pos and so on. It took me a couple of days just to understand KGB enough to make any real progress on it, and that was back when it was a wee AI that hardly did more than what you've described. Building an AI that's actually competitive with circuit or KGB as they stand now is a pretty epic undertaking.

quote:
The hardest (and most time consuming/unfun) part is probably to compile Spring with the .jars you need. I'd like to see that requirement taken out of the picture. It's certainly not something you want to present as a barrier to newbie devs.


You can copy the necessary libraries from NullOOJavaAI which ships with all precompiled engine versions. :P
+0 / -0
quote:
Building an AI that's actually competitive with circuit or KGB as they stand now is a pretty epic undertaking.

Not to downplay the massive, multi-year amount of work that KGB and Circuit represent, but... cheese exists.

I'm quite suspicious that things like a properly optimized blackdawn rush AI may just wreck both circuit and kgb.

And there are still gaping ability holes in even our strongest AI's that could be exploited, even aside from cheese. Things like combat outcome prediction, terraform logistics, etc.

Parsing the GRP's and other associated boilerplate code is where having a community also helps greatly.
+1 / -0

7 years ago
quote:
I'm quite suspicious that things like a properly optimized blackdawn rush AI may just wreck both circuit and kgb.


That depends heavily on the map. On titan duel I'm pretty sure that'd just get scorchered to death, and at least for kgb it'll now build mobile AA to match the value of air that's been seen. If the cheese isn't totally effective then the game may become an eco battle, in which case circuit or kgb would have a major advantage in terms of refinement.

I think kgb and circuit are both at least resistant even to CSI's defenseless slasher spam mode, and CSI's slasher frontline forming code is pretty unintelligable.

quote:
And there are still gaping ability holes in even our strongest AI's that could be exploited, even aside from cheese. Things like combat outcome prediction, terraform logistics, etc.


I don't think terraform should be allowed. Terraporcing mexes is pretty much impenetrable to AIs, due to the scarcity and questionable cost effectiveness of counters and the near impossibility of detecting that counters are even necessary. Terraporcing mexes is also basically the only thing that an AI can use terraform for effectively, at least without some sort of ridiculously complicated system for terrain comprehension.

Combat outcome prediction isn't all that exploitable either. Both KGB and circuit already use pretty advanced combat prediction systems that are constantly improving, and a really complete system would be equally expensive computationally. A similar condition exists for using pathfinding to predict target reachability, which is also theoretically difficult to solve. Trying to win based on that would be an even more epic undertaking.

quote:
Parsing the GRP's and other associated boilerplate code is where having a community also helps greatly.


Yeah, all that kind of stuff is pretty much copypasta now, as long as you know where to look.
+1 / -0

7 years ago
NZrankhedgehogs has a point: it would be good to have a game of best AI vs Human at the end of the AI tourney, which would allow us to show how good the best AI is, in a way people can understand better. I'd just pick best human players that we think can lose against the AI and have them play a few games.

USrankaeonios: you don't need to do all these things to start with AI development. Scouting is optional (use cheats), metal spots should be easy to get ( this works well enough: metalSpots = spring.getClb().getMap().getResourceMapSpotsPositions(resource); ), and you really don't need to immediately have the best AI, start small :)

Regarding the first public AI tourney, I'm still of the opinion we should have couple of different categories to compete in: unit micro, simplified game (less units) with full vision, and the normal game. I expect this would make the entry barrier lower, and competition more interesting in general.
+0 / -0
Page of 2 (24 records)