Sunday, November 20, 2011

A full day of rest leads to a synastry breakthrough

As I mentioned in previous blog posts, I am walking pile of training injuries.  I am having great difficulty making the jump to Kettlebell and CrossFit training intensities.  About 8 days ago, I suffered a pretty serious shoulder injury which has left my right hand numb most of the time.  That's right, I am currently typing with a partially numb right hand.

Because I have only slowed down, rather than stopped, it just hasn't gotten better.  In truth, this may require a visit to Dr. Bachner's surgery center, and he may need to perform the Sam Bradford procedure on me.  In the interests of healing, and in view of our harsh weather conditions today, I declared a full day of rest.  No exercise, period!  I mean zip, zero, nada, nothing; not even abs.

Naturally, I was at loose ends today.  It might have been impossible if it hadn't been a football Sunday.  Even so, I was at loose ends, not knowing what to do with my spare energy.

I found myself doing extensive searches online for key aspects in the pseudo-science of Synastry.  As you know, I have a project in progress (currently on hold) to build my own Synastry engine.  The objective is to create a collection of webservices that will power both a collection of mobile apps, and a major-league Windows WPF application.

As I did my research, it suddenly dawned on me.  I had the massive ah-ha! experience.  I suddenly snapped on a perfect, simple, elegant, high-performance architecture for this Synastry engine.  I now know how I will do the high-speed computations for millions of people per minute.

In short, this is a classic application of Multi-Dimensional Analytics.  Multi-Dimensional databases are popular and vogue stuff in the business intelligence market.  The notion is fairly simple, mathematically speaking.  Each point of data has three or more dimensional coordinates.  Think of each coordinate in a hyper-cubic space.

In a simple cube, each data-point has an X, Y and Z coordinate.  You can fetch any point of data in the cube by referencing it's three coordinates   However, the cube is only the start.  You can have n dimensions, where n is any finite number.  This means 6, 8, 9 and 12 dimensions are all possible.  One word of warning: As you increase the number dimensions in your hyper-cube, the exponential explosion of data points can easily blow even the most powerful server's capacity.

I am not worried about this.  In my case, Synastry is a relatively manageable 4 dimensional data problem.  Consider the following Dimensions:

  1. The A chart {e.g. Ascendant, Sun, Moon, Mercury, Venus, Mars, etc.}
  2. The B chart {e.g. Ascendant, Sun, Moon, Mercury, Venus, Mars, etc.}
  3. The Angles {e.g. Conjunction, Sextile, Square, Trine, Opposition, etc.}
  4. The Categories {e.g. Romance, Communication, Creativity, Aggression, Mutual Success, etc}
I need one point of data corresponding to the unique combination of each of these four coordinates.  As soon as I populate the four-dimensional cube, it is just a of looking up the scores in the cube.  Of course, we still need to compute and compare two people's charts, but this is the relatively easy part.  Scoring their potential for a relationship accurately... this is the hard part.

Consider a simple hypothetical scenario.  I am a Virgo.  A female I am interested in is a Capricorn born January 14, 1979.  Her moon is in Leo, her Venus is in Sagittarius.  There are a number of excellent aspects here.  We have a near-trine between suns.  Her Sun conjuncts my Vertex.  Her moon trines my moon and conjuncts my Venus.  Her Venus trines my Mars.  What should her score be?

It depends on the category.  Each aspect I just mentioned will have an impact on several different category scores.  Romance, Aggression, Mutual Success will all be impacted to varying degrees by each of these aspects.  Without calculation, we can already know the score will be very, very good, but just how good?

Using a four dimensional hyper-cube, and I can look up each score, for each aspect, for each category.  The sum can be fetched using MDX SQL code query.

Of course, there are other ways you can do it.  You could do it in a purely functional manner, but this could be extremely computationally intensive in a situation where you are attempting to serve a million people in an Internet/Smart Phone world.  A pre-calculated hyper cube should be faster and more scalable.

It's also extremely well organized, testable, verifiable, and maintainable.