Wednesday, February 13, 2013

#15 - Cause & Reaction - Introducing JMOO

Cause & Reaction - the essential driving force in life.  Think about it.  The human brain takes in a set of inputs (a configuration of the five senses as read by your bodily sensors), and through some very complex and ill-understood mannerism of the brain, those inputs are mapped to some output, i.e. a bodily action.  Of course, given a higher level capacity over brain function, we can choose to do whatever we want - but the inputs are there in front of us to analyze and evaluate, and we make a decision on what to do either way - often when it is a decision we have thought about, we label it as an action, and otherwise, a reaction.

This simple model occurs everywhere in life, inanimate or living, in massive parallel.  We just so happen to also be studying this model in computer science, but we haven't quite decided on a good name yet.  Some would prefer to use the terminology "Data Mining".


In data mining, some prefer to focus on the input space, and others prefer to focus on the output space.  In my recent work, I've been trying to learn how to optimize the output space by searching through the input space.  But, in my field, these aren't quite the same names of course.  Typically, the inputs are called decisions and the output are objectives.  I don't think we need to clutter the simple core of the idea with different names used by different fields - but it is what it is.


I've developed a convenient way to represent this model, and coded it in Python with the name, JMOO, which is short for Joe's Multi-Objective Optimization.  In the figures above, the input and output boxes aren't necessarily singular values - they're often vectors of many values.  We use the term multi-objective optimization (moo) to represent the problem of optimizing across many objectives, and it is typically a hard problem when there are trade-offs among the objectives (i.e. you can't optimize one without screwing up the other).

JMOO is extremely simple and can be used to represent an input/output model.  It features a very simple way to add new models and there are already a lot of existing baseline type models representing commonly used problems such as Fonseca, Shaffer, etc.  We can handle upper and lower bound ranges for the inputs, as well as constraints for cross-validating all the inputs together.  The inputs can be generated randomly or assigned by an outside module.  And lastly, we can evaluate the model and get the output scores for each objective.


Let's try to build the brain now.  Sounds complicated?  Not really!  We'll see where all the real work belongs though, as there are some big gaps.  And this could easily be implemented in JMOO.  As for optimizing however - there are outside modules needed where implementation of search algorithms reside.


No comments:

Post a Comment