[WIP] Apollo - An AI Framework [Questions]

Apollo

Brief Rundown

Apollo is meant to be an open source AI framework. The framework is meant to be modular, and customizable, but only to a certain extent. This is a rehash of a private framework I used to use for AI development, and while I will be adding some support for non-specialized circumstances it will not be the goal of this framework in full. (See a question about this down below). Github is here.

Features

Apollo is meant to have the following major features:

  • Be modular for good customization.
  • Implement a leveling system for difficulty on mobs.
  • Have support for regions, such as spawn regions/limit regions/etc.
  • Utilize Machine Learning for higher difficulty of mobs, so mobs are specialized to a player.
  • Have behaviors that effect what action a mob may take
  • Have a dynamic list of actions with values that can be taken, and done.
  • Support for custom behaviors, and actions.
  • Use calculations on behavior, and a small amount of randomness to generate a list of actions to take.

General Info

Does Apollo have any dependencies?:

  • Apollo relies on Splash for random number generation.
  • Apollo also will work the best with R installed, it does have minor support for heuristics without R being installed though performance (especially Machine Learning) will take a major hit.

What is the end goal of this project?:

The end goal of this project is to provide something I though Bukkit, and Spigot were seriously lacking. A smarter AI framework than the default one built in minecraft. I’ve developed many private plugins for this before, and is a major focus of what I’m doing in college. Now with the launch of Sponge I decided to make a public framework that offers great features with some development experience.

For Developers

What should I know?:

Multiple things about this project are relatively specialized, and are meant more to fit my needs (Though I’m looking for developers to expand this, see below).

This project uses Machine Learning, and utilizes R-Scripting for statistical analysis. If you’ve never used R before I highly recommend you look into it. You can find more info here. Note this only supports scripting for R which isn’t as extensible, but provides everything needed.

This project also uses Maven. This will most likely never switch. If you prefer gradle feel free to switch it to gradle using something like gradle init. I personally prefer Maven, and as such the plugin will stay using the maven build system.

This project utilizes XML for configuration. (Begin mass spamming of OMG use JSON, or HOCON), and while once I get a substantial handling on HOCON I will be using both HOCON, and XML (the option will be configurable). Though until then XML will be the standard.

This project uses Random Number generation. The random number generator is re-tested every 10 boots of the plugin. I choose between 3 PRNGs the Mersenne Twister, java.util.SecureRandom, and Yarrow. I perform a NIST test on the three generators, see which performs the best, and use that. The seed is generated securely through using /dev/urandom, /dev/hwrnd, or a Secure algorithim (for machines that don’t have urandom (I’m looking at you windows)).

Finally this project is Multi-Threaded, it runs off of Two Threads. One for normal plugin action, and secondly one for making sure entities don’t exit out of bounds (if this option is turned on). So that way the constant checking doesn’t take up too much processing power.

Questions

I have several questions I would like to ask everyone:

  • For regions would you want WorldEdit/Other plugin support even though this could mean heavier processing?
  • Would you like more compatibility, but most likely diminished features? Or less compatibility, but way more features?
  • Any other features you would like to see?

If you would like to contribute you can fill out this application here.

Edit: We now have an irc. You can join it here.

2 Likes

I would prefer to have worldedit support in this case, seeing as greif prevention isn’t going to allow players or any one to claim on world guarded land

Alright thanks I’ll be thinking about it. What about the second question?

Lot’s of features please. But make it very modular and abstract. If you want to offer a good library, then you’ll want to make it as simple as possible to accomplish basic tasks (like targeting other entities based on type etc…) but also allow for enough customization so even complex tasks can be handeled.

The idea that apollo is going to target is dependent on really what difficulty people select. The bot is going to have a Queue of actions to perform, I’ll allow access to this as well as a bunch of default tasks, developers will be able to target this queue check actions, and modify accordingly. Same with behaviors. The AI will have a behavior that changes based on interactions with them, and the developer will be able to access this.

The levels for AI are most likely going to be something like:
NPC (stands still, broadcasts an event when right clicked), LOWEST (similar to villagers, moves a bit, neutral until attacked multiple times), LOW (similar again to villagers, moves a bit more long distance, neutral until attacked once), Medium (employs some learning, and adapting to environments nothing extremely tough), High (Employs high amounts of machine learning, will work as a “Hive” querying other AI’s targeting the same person, etc. Working together), Highest (Employs highest amount of machine learning, focus on other entity’s moves, targets, inventory, gear, etc. Again working as a Hive, playing off of each others strength. For example a mini-zombie won’t attack someone who jumps alot).

This looks like a really cool project!

However, the question What is your skill level on a scale of 1 to 10? is incredibly vague.
Is this referring to Java? General programming? AI? R?

Thanks, and just in general/overall.

I don’t have skill. I just cheat and hack all teh things :wink: