Thursday, April 20, 2017

Going for the Trinity with evolution

Yes, the metaphor is getting strained, but I've run into a snag with the original "Purify, then Evangelize" strategy on my term project so I've added a third: Communion.

The problem was that if you try to do the purification during the splits, you end up doing it too often. It's a pretty computationally heavy operation and I can't wait all night for the next generation to be produced. So, I've decided that Purification will only happen when the progenitor blocks are selected. For each selected progenitor, one attribute will be selected from the weighted list of attributes and purified. By that, I mean I'll include enough values to get at least 75% of the block carried forward and the rest of the rows get moved to a new block.

Adding in the rows from the non-progenitor blocks then continues as before, but splits will be simple: just create a new block with the same criteria and keep on inserting. This Evangelization step propagates criteria combinations that have been found to be good.

If that sounds like a recipe for a whole bunch of partially-filled blocks, you are absolutely right. So, the new step is Communion. Blocks with very few rows will be consolidated, trying to match criteria as best as possible. Such blocks probably won't perform much better than the "Catch-All" block that has no criteria, but at least there won't be very many of them.

No comments:

Post a Comment