1. On the Genetic Algorithm
- Posted by DB James <larch at adelphia.net> Sep 14, 2005
- 538 views
- Last edited Sep 15, 2005
Hello all, I thought some of you might be interested in my recent investigations on the genetic algorithm. First, some introduction: Some time back, I recalled in a post about a program I wrote maybe ten years ago that calculates formulas based on inputs and solutions. I have since reconstructed it in Euphoria. Calculates formulas? More properly said, it "evolves" an algorithm for the solution to the formula. The steps of the algorithm are in the gene code. Currently, one must manually convert from evolved algorithm to formula. Perhaps a future version will simplify this. In a nutshell the program, which I call GA Math, works like this: a population of "beings" is created in which each being has a copy of the "register" (sequence of six atoms) and a set of genes that is a sequence of four integers: {opcode, from1, from2, store}. The opcode may refer to an add, subtract, multiply or other simple mathematical operation. The "from" and "store" items refer to any one of the register locations. So, for example, the gene {4,1,3,2} says to do math-operation number 4 on the contents of register[1] and register[3] and store it in register[2]. The beings each have a private number (p) also. From an entered formula, such as v=l*w*h, the main register is filled with a random number for each variable: {l,w,h,0,0,0}. Each being gets a copy of the main register, but with the private number added: {l,w,h,p,0,0}. All of the being's calculations are done into its copy of the register. Currently the number of genes per being ranges from 6 to 12 which is decided randomly. The program user enters a formula. By means of the functionality of David Cuny's eval.e, it is evaluated to generate random numbers for each variable and to create the answer to the formula based on these generated numbers. Each being produces some answer on each try. The whole population attempts (currently) 8 times to calculate answers before the evolutionary selection process. The percentage differences of each answer from the true answer are summed and averaged for each being. The population is sorted according to closeness of fit. The less accurate half of the population "dies" and is refilled with variations of the top (more successful) half. Randomness controls these variations, but selection is the controller of randomness, so to speak. That is, as with life itself, there is the reward of continuity for responding positively to the environment. So much for the way it works. I was never much interested in reproducing theories of how real life uses information in complex ways to effect both continuity and change. It is the most basic quality of evolution that I found fascinating: exploiting variation to adapt to a dynamic environment. But one point here before I go on: there is a problem that I think is built-in to all evolution. It tends to get stuck. If a partially successful or temporarily successful evolution occurs, it tends to propagate throughout the whole population and that tends to close off other, possibly more relevant, directions of change. This is not a trivial thing, as it can, and no doubt has, killed off many lifeforms. Now to a lighter side of evolution. Here is a typical report from the program with a few comments added. (The program clips out irrelevant genes and "froms".) -------------------------------------------------- GA Math Beings Report -------------------------------------------------- Math Beings working on formula : l*w*h--volume formula v=l*w*h Number of try-sets per run : 500 Number of runs this session : 2 Number of tries per try-set : 8 This is try-set number : 6 Target value : 0.0010 Current closeness (percent) : 0.000000 Most successful being's original register values: {[1.83] , [43.67] , [21.44] , [6.82] , [0] , [0]} -- [l] [w] [h] [p] <<<< please read these comments Most successful being's relevant genes: abs, 1, 6 {[1.83] , [43.67] , [21.44] , [6.82] , [0] , [1.83]} --result in register six ^ mul, 2, 6, 2 {[1.83] , [79.92] , [21.44] , [6.82] , [0] , [1.83]} --in two ^ mul, 2, 3, 6 {[1.83] , [79.92] , [21.44] , [6.82] , [0] , [1713.40]} --final answer in six ^ Last actual answer from formula: 1713.401 ------------------------------------- Notice it "wasted" a move in "abs 1,6". This is typical and common. There is no penalty for inefficiency of algorithm because getting the right answer takes all the focus. One reason for this post is to show the oddity of the genetic algorithm as compared with our own mental processes. Though at times the results are satisfyingly logical, here is an example of its different kind of "thinking" responding to a user entry of c=3.14159*r*2 (remember that the population never sees the PI number, only the radius): -------------------------------------------------- GA Math Beings Report -------------------------------------------------- Math Beings working on formula : 3.14159*r*2 Number of try-sets per run : 500 Number of runs this session : 3 Number of tries per try-set : 8 This is try-set number : 55 Target value : 0.0010 Current closeness (percent) : 0.000983 Most successful being's original register values: {[51.48] , [4.28] , [0] , [0] , [0] , [0]} -- [r] ^ note the private number of this being Most successful being's genes: add, 1, 1, 6 {[51.48] , [4.28] , [0] , [0] , [0] , [102.96]} --nice start, it doubles the radius (r) and stores it in register six mul, 2, 1, 2 {[51.48] , [220.18] , [0] , [0] , [0] , [102.96]} --this is 4.28*r stored in register two (note: 4.28=2PI-2) add, 6, 2, 6 {[51.48] , [220.18] , [0] , [0] , [0] , [323.14]} --here is the correction for the error of the private number --so instead of PI*r*2 it is r(2PI-2)+2r --> (2PIr-2r)+2r --> 2PIr Last actual answer from formula: 323.458 ------------------------------------- I have seen far stranger things than this. In the inevitable comparison of the genetic algorithm to a thinking mind, it is the strangeness that stands out, the otherness. However, down below the evolutionarily-derived conscious mind, I have no doubt there is plenty of GA hairiness As to uploading the code, I may, if I can clean up the code enough, or I may just offer it to anyone intested. It certainly could use some improvement. The conversion from algorithmic steps to a coherent formula would be nice, as would more math operations, and protection from overflow that more elaborate functions would need. If this sort of thing were optimized and tweaked, it could potentially generate new previously unknown formulas from correct inputs and results, but that is far off now... --Quark
2. Re: On the Genetic Algorithm
- Posted by cklester <cklester at yahoo.com> Sep 14, 2005
- 499 views
- Last edited Sep 15, 2005
DB James wrote: > Some time back, I recalled in a post about a program I wrote maybe ten years > ago that > calculates formulas based on inputs and solutions. I have since reconstructed > it in > Euphoria. Calculates formulas? More properly said, it "evolves" an algorithm > for > the solution to the formula. Isn't this less "evolution" and more "automated algorithm tweaking." From what I understand, evolution doesn't work toward a target, does it? This is why I have a problem with programmers calling their programs "evolution." 1) It requires an intelligent creator to write the evolution program. 2) We start out with working entities because an intelligent designer creates them. There's no real environmental pressure (entities 'die' arbitrarily) and tests for fitness are simply algorithmic targets. 3) While one group 'dies' because they don't figure out an equation, another group lives, despite not having figured out an equation. Also, the group that dies no doubt solves some formula... just not the arbitrarily and narrowly defined one. Thus, GAs simulate design or targeted tweaking more than evolution. > So much for the way it works. I was never much interested in reproducing > theories > of how real life uses information in complex ways to effect both continuity > and change. Oh. Well, nevermind then. :D > If this sort of thing were optimized and tweaked, it could potentially > generate new > previously unknown formulas from correct inputs and results, but that is far > off now... How do you determine "correct inputs and results" from "unknown formulas?" -=ck "Programming in a state of EUPHORIA." http://www.cklester.com/euphoria/
3. Re: On the Genetic Algorithm
- Posted by Matt Lewis <matthewwalkerlewis at gmail.com> Sep 14, 2005
- 495 views
- Last edited Sep 15, 2005
cklester wrote: > > DB James wrote: > > > Some time back, I recalled in a post about a program I wrote maybe ten years > > ago that > > calculates formulas based on inputs and solutions. I have since > > reconstructed it in > > Euphoria. Calculates formulas? More properly said, it "evolves" an > > algorithm for > > the solution to the formula. > > Isn't this less "evolution" and more "automated algorithm tweaking." > > From what I understand, evolution doesn't work toward a target, does it? > Evolution is based on 'fitness.' In this case, fitness is the predetermined function. In real life, 'fitness' is generally assumed to be actual survival and reproduction. > > > If this sort of thing were optimized and tweaked, it could potentially > > generate new > > previously unknown formulas from correct inputs and results, but that is far > > off now... > > How do you determine "correct inputs and results" from "unknown formulas?" > You could be dealing with a set of data where you have inputs and outputs, but don't know what sort of function maps between the two. Matt Lewis
4. Re: On the Genetic Algorithm
- Posted by Michael Nelson <mikestar13 at sbcglobal.net> Sep 14, 2005
- 492 views
- Last edited Sep 15, 2005
--0-1942697918-1126739617=:63477 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit DB James <guest at RapidEuphoria.com> wrote: <snip> I thought some of you might be interested in my recent investigations on the genetic algorithm. </snip> I find this fascinating. Some ideas for improvements spring to mind immediately: 1. Number of steps should be quantified as part of fitness--in the "real world", a 95% correct answer in 5 steps is extremely often more successful than a 100% correct answer in 100 steps. 2. Even the fittest individual will eventually die and even the least fit individual may live for a while. 3. Not every very fit individual reproduces, some very unfit individuals do. 4. Probability of survival and reproduction are however reasonably proportionate to fitness. A rough suggestion for using these ideas: 1. Calcalate fitness as (100% minus the fitness you are currently calculating) divided by the number of steps. 2. Normalize these results so that the fittest individual has a fitness of 99% and the least fit individual has a fitness of 1%, with other individuals with proportionate values in between. (A simple linear proportion could be used, but a standard deviation based measure is probably better though harder to code.) Pehaps 99% to 1% isn't quite right, perhaps 95% to 5% or somewhere in between would produce better "evolution". 3. Now for each indivdual, calculate whether that individual dies or reproduces based on fitness. For example, an individual has 90% fitness. It has a 90% of survival and a 90% chance of reproduction. So we generate a random number 1 to 100 for survival and if the result is 1 to 90 it lives, if 91-100, it dies. If it lives, then generate another random number 1 to 100 for reproduction.... I would be quite interested in collaborating on this project. --0-1942697918-1126739617=:63477 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: 8bit <DIV> <DIV> <DIV><BR><BR><B><I>DB James <guest at RapidEuphoria.com></I></B> wrote: </DIV> <DIV> </DIV> <DIV><snip><BR>I thought some of you might be interested in my recent investigations on the genetic algorithm. </snip><BR></DIV> <DIV> </DIV> <DIV>I find this fascinating. Some ideas for improvements spring to mind immediately:</DIV> <DIV> </DIV> <DIV>1. Number of steps should be quantified as part of fitness--in the "real world", a 95% correct answer in 5 steps is extremely often more successful than a 100% correct answer in 100 steps. </DIV> <DIV> </DIV> <DIV>2. Even the fittest individual will eventually die and even the least fit individual may live for a while. </DIV> <DIV> </DIV> <DIV>3. Not every very fit individual reproduces, some very unfit individuals do.</DIV> <DIV> </DIV> <DIV>4. Probability of survival and reproduction are however reasonably proportionate to fitness.</DIV> <DIV> </DIV> <DIV> </DIV> <DIV>A rough suggestion for using these ideas:</DIV> <DIV> </DIV> <DIV>1. Calcalate fitness as (100% minus the fitness you are currently calculating) divided by the number of steps.</DIV> <DIV> </DIV> <DIV>2. Normalize these results so that the fittest individual has a fitness of 99% and the least fit individual has a fitness of 1%, with other individuals with proportionate values in between. (A simple linear proportion could be used, but a standard deviation based measure is probably better though harder to code.) Pehaps 99% to 1% isn't quite right, perhaps 95% to 5% or somewhere in between would produce better "evolution".</DIV> <DIV> </DIV> <DIV>3. Now for each indivdual, calculate whether that individual dies or reproduces based on fitness. For example, an individual has 90% fitness. It has a 90% of survival and a 90% chance of reproduction. So we generate a random number 1 to 100 for survival and if the result is 1 to 90 it lives, if 91-100, it dies. If it lives, then generate another random number 1 to 100 for reproduction....</DIV> <DIV> </DIV> <DIV>I would be quite interested in collaborating on this project.</DIV></DIV></DIV> --0-1942697918-1126739617=:63477--
5. Re: On the Genetic Algorithm
- Posted by cklester <cklester at yahoo.com> Sep 15, 2005
- 523 views
Matt Lewis wrote: > cklester wrote: > > DB James wrote: > > > Some time back, I recalled in a post about a program I wrote maybe ten > > > years ago that > > > calculates formulas based on inputs and solutions. I have since > > > reconstructed it in > > > Euphoria. Calculates formulas? More properly said, it "evolves" an > > > algorithm for > > > the solution to the formula. > > Isn't this less "evolution" and more "automated algorithm tweaking." > > From what I understand, evolution doesn't work toward a target, does it? > Evolution is based on 'fitness.' In this case, fitness is the predetermined > function. In real life, 'fitness' is generally assumed to be actual > survival and reproduction. "Fitness" within an environment. Changes in the environment is generally the mechanism that drives evolution. So, I guess for the example given, a "change" in the environment would be a different "fitness formula." I want to see that demo. :) > > > If this sort of thing were optimized and tweaked, it could potentially > > > generate new > > > previously unknown formulas from correct inputs and results, but that is > > > far off now... > > How do you determine "correct inputs and results" from "unknown formulas?" > You could be dealing with a set of data where you have inputs and outputs, > but don't know what sort of function maps between the two. Where would you ever obtain such a dataset (input values and their related output values)? -=ck "Programming in a state of EUPHORIA." http://www.cklester.com/euphoria/
6. Re: On the Genetic Algorithm
- Posted by Matt Lewis <matthewwalkerlewis at gmail.com> Sep 15, 2005
- 486 views
cklester wrote: > > Matt Lewis wrote: > > cklester wrote: > > > DB James wrote: > > > > > If this sort of thing were optimized and tweaked, it could potentially > > > > generate new > > > > previously unknown formulas from correct inputs and results, but that is > > > > far off now... > > > > > > How do you determine "correct inputs and results" from "unknown formulas?" > > > > You could be dealing with a set of data where you have inputs and outputs, > > but don't know what sort of function maps between the two. > > Where would you ever obtain such a dataset (input values and their related > output values)? Could be some physical/natural phenomena. Or economics. Maybe you wanted to come up with a new algorithm/formula for predicting hurricanes. Or wanted to find some relationship between the price of gold and the average length of skirts (yes, this has actually been studied, and correlations have been actually been found). Matt Lewis
7. Re: On the Genetic Algorithm
- Posted by cklester <cklester at yahoo.com> Sep 15, 2005
- 472 views
Matt Lewis wrote: > cklester wrote: > > Matt Lewis wrote: > > > cklester wrote: > > > > DB James wrote: > > > > > If this sort of thing were optimized and tweaked, it could potentially > > > > > generate new > > > > > previously unknown formulas from correct inputs and results, but that > > > > > is far off now... > > > > How do you determine "correct inputs and results" from "unknown > > > > formulas?" > > > You could be dealing with a set of data where you have inputs and outputs, > > > but don't know what sort of function maps between the two. > > Where would you ever obtain such a dataset (input values and their related > > output values)? > > Could be some physical/natural phenomena. Or economics. Maybe you > wanted to come up with a new algorithm/formula for predicting hurricanes. Then how do you determine how many variables are required? Or do you just guess? Or does the algorithm tweaking program guess? I mean, there have to be a lot of variables for predicting hurricanes, the stock market, etc... > Or wanted to find some relationship between the price of gold and the > average length of skirts (yes, this has actually been studied, and > correlations have been actually been found). Were they implying cause and effect? -=ck "Programming in a state of EUPHORIA." http://www.cklester.com/euphoria/
8. Re: On the Genetic Algorithm
- Posted by cklester <cklester at yahoo.com> Sep 15, 2005
- 480 views
BTW, in case y'all don't know, Wes Hermanson has written a very complicated and advanced looking AI application... check it out: http://advancedmachinelearning.com/ -=ck "Programming in a state of EUPHORIA." http://www.cklester.com/euphoria/
9. Re: On the Genetic Algorithm
- Posted by Matt Lewis <matthewwalkerlewis at gmail.com> Sep 15, 2005
- 512 views
cklester wrote: > > Matt Lewis wrote: > > > > Could be some physical/natural phenomena. Or economics. Maybe you > > wanted to come up with a new algorithm/formula for predicting hurricanes. > > Then how do you determine how many variables are required? Or do you just > guess? > Or does the algorithm tweaking program guess? I mean, there have to be a lot > of variables for predicting hurricanes, the stock market, etc... That's always the question, isn't it? :) If you have a clever algorithm, the number of variables in the model would probably be one of the things that changed. You would have to pick a population of candidate variables. For a weather model, it might be things like atmospheric pressure, humidity, ocean temps, prevailing winds, position of the sun, point on the earth, etc. > > Or wanted to find some relationship between the price of gold and the > > average length of skirts (yes, this has actually been studied, and > > correlations have been actually been found). > > Were they implying cause and effect? I don't think so. It's something that tends to be mentioned by profs in econometrics classes. Matt Lewis
10. Re: On the Genetic Algorithm
- Posted by DB James <larch at adelphia.net> Sep 16, 2005
- 499 views
cklester wrote: > > DB James wrote: > > > Some time back, I recalled in a post about a program I wrote maybe ten years > > ago that > > calculates formulas based on inputs and solutions. I have since > > reconstructed it in > > Euphoria. Calculates formulas? More properly said, it "evolves" an > > algorithm for > > the solution to the formula. > > Isn't this less "evolution" and more "automated algorithm tweaking." > > From what I understand, evolution doesn't work toward a target, does it? > > This is why I have a problem with programmers calling their programs > "evolution." > > 1) It requires an intelligent creator to write the evolution program. > 2) We start out with working entities because an intelligent designer > creates them. There's no real environmental pressure (entities 'die' > arbitrarily) and tests for fitness are simply algorithmic targets. > 3) While one group 'dies' because they don't figure out an equation, another > group lives, despite not having figured out an equation. Also, the > group that dies no doubt solves some formula... just not the arbitrarily > and narrowly defined one. > > Thus, GAs simulate design or targeted tweaking more than evolution. > Hi ck, It is certainly a big question: what is evolution? I think it is hard to get one's mind around because A) it has become obscured as a "political" topic and more importantly because B) we have difficulty seeing a third possibility beyond randomness and design. Matt used the term "fitness" which works to suggest something other than the two creative forces just mentioned. My sense of it is that if one accepts the following ideas, then evolution seems inevitable: all things have characteristics which react with the characteristics of other things; some of these things become coherent and have some level of integrity and persistence; all such things react to the world around them by internal and external modification; the longer such things persist, the more integrity they tend to develop. All this seems to me perfecly natural, not metaphysical. So, the changeable environment of any such system (or integrity or whatever one wants to call it) tends to challenge its tendency to persist. A forest fire can grow to the point it creates its own inward wind that feeds the flames. Yet it modifies its environment so severely that it must move fast to maintain its "food supply". Also, it may increase the chance of rain. So it is "born", it grows, it matures, it spreads by propagation, it shrinks, and eventually dies (though it can take a long time to go). I've heard of fires "living" underground for years slowly eating away at coal seams. Okay, so if evolution is a natural outcome of the characteristics of the components of the universe interacting in time, then it is to the point to say that life did not create evolution, more the other way around. There is no evidence as far as I know that a "purpose" is implied in the way evolution proceeds. However, even if we lack the intellectual terms for it, it does seem that the tendency of integrities to persist is real. It is as if evolution tends to filter out the dimmer persistences, and favors those that have more integrity, more coherence, more (possibly) memory, encoding of lessons learned, as it were. In a sense this would be the opposite of intelligent design, that is, not the imposition of being from above -- it would be the emergence of persisting integrities from below. It is like an assertion by the universe to the second law of thermodynamics: "get knotted!" Ha, you probably didn't want all that, so I'll just say I am satisfied that the imposition of purpose by the programmer has nothing to do with the potency of evolution. The math "beings" have no knowledge of the terms used to filter them according to their behavior. But they respond anyway by continuing to change according to their genetic code. The code records in a direction that the environment dictates, and eventually it comes up with an answer to a question that was never directly asked. Seems a little cruel and unfair, but them's the breaks... > > So much for the way it works. I was never much interested in reproducing > > theories > > of how real life uses information in complex ways to effect both continuity > > and change. > > Oh. Well, nevermind then. :D > As I said, I wanted straight high-octane evolution without the sophisticated tweaks of natural chromosomes. > > If this sort of thing were optimized and tweaked, it could potentially > > generate new > > previously unknown formulas from correct inputs and results, but that is far > > off now... > > How do you determine "correct inputs and results" from "unknown formulas?" > > -=ck As Matt said, wherever there are known outputs and a range of inputs, some sort of GA treatment should be able to find correllations between inputs and outputs. In fact, I can easily imagine such a program first working out the likelihood of which inputs are the important ones, then finding the correllations. Neural nets are a similar kind of program in that learning does happen. They are good at cutting through noise and finding patterns. I would not be surprised to see GAs being valued just because they respond without the preconceptions that hamper us. --Quark
11. Re: On the Genetic Algorithm
- Posted by DB James <larch at adelphia.net> Sep 16, 2005
- 490 views
Michael Nelson wrote: > > --0-1942697918-1126739617=:63477 > Content-Type: text/plain; charset=iso-8859-1 > Content-Transfer-Encoding: 8bit > > > DB James <guest at RapidEuphoria.com> wrote: > > <snip> > I thought some of you might be interested in my recent investigations on the > genetic algorithm. > </snip> > > > I find this fascinating. Some ideas for improvements spring to mind > immediately: > > 1. Number of steps should be quantified as part of fitness--in the "real > world", a > 95% correct answer in 5 steps is extremely often more successful than a 100% > correct > answer in 100 steps. > > 2. Even the fittest individual will eventually die and even the least fit > individual > may live for a while. > > 3. Not every very fit individual reproduces, some very unfit individuals do. > > 4. Probability of survival and reproduction are however reasonably > proportionate to > fitness. > > > A rough suggestion for using these ideas: > > 1. Calcalate fitness as (100% minus the fitness you are currently > calculating) divided > by the number of steps. > > 2. Normalize these results so that the fittest individual has a fitness of 99% > and > the least fit individual has a fitness of 1%, with other individuals with > proportionate > values in between. (A simple linear proportion could be used, but a standard > deviation > based measure is probably better though harder to code.) Pehaps 99% to 1% > isn't quite > right, perhaps 95% to 5% or somewhere in between would produce better > "evolution". > > 3. Now for each indivdual, calculate whether that individual dies or > reproduces based > on fitness. For example, an individual has 90% fitness. It has a 90% of > survival and > a 90% chance of reproduction. So we generate a random number 1 to 100 for > survival > and if the result is 1 to 90 it lives, if 91-100, it dies. If it lives, then > generate > another random number 1 to 100 for reproduction.... > > I would be quite interested in collaborating on this project. > <Snip html stuff> Hi Michael, Over time, I have looked at, and made a few, techniques to have a smoother, faster, surer evolution toward a goal. It is an interesting and worthwhile thing to do because it feels like a kind of investigation of life itself. However, I personally was not oriented that way when I wrote the GA Math program. There I wanted to cut to the chase and get the job done while making it clear that it is indeed evolution that is driving the creativity of the program. Your direction, now at least, seems more toward setting up a population where the latent possibilities that may be in the long run more effective than the temporarily successful would be allowed to persist in the population until their potential can be realized. I suspect a lot of life's genetic tricks are to do just that. As to collaboration, I think I would just slow you down if you have a good clear idea where you want to go. If you wish, when I get the GA Math program cleaned up, I can send it you you and you can do anything you like with it (or I might upload it to RDS). In fact, all you may want are the structures and constants and maybe a few of the routines I used. Those can be easily modified to do other things. A last thought, doesn't it seem as if a good GA program would be able to er, evolve an optimized set of controls? --Quark
12. Re: On the Genetic Algorithm
- Posted by Michael Nelson <mikestar13 at sbcglobal.net> Sep 16, 2005
- 492 views
- Last edited Sep 17, 2005
--0-394944822-1126906689=:78211 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit I'd like to have a look at the code. Interested programmers tweaking the framework in various ways each according to their own ideas and sharing results would be fun and might be quite productive. --0-394944822-1126906689=:78211 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: 8bit <DIV>I'd like to have a look at the code. Interested programmers tweaking the framework in various ways each according to their own ideas and sharing results would be fun and might be quite productive.</DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> --0-394944822-1126906689=:78211--
13. Re: On the Genetic Algorithm
- Posted by DB James <larch at adelphia.net> Sep 17, 2005
- 532 views
Michael Nelson wrote: > > > I'd like to have a look at the code. Interested programmers tweaking the > framework > in various ways each according to their own ideas and sharing results would be > fun > and might be quite productive. > Hi Michael, I have uploaded it to RDS and it should be available soon. I appreciate your interest. Let me know how it goes with your investigations. If you decide to publish your changes/improvements, you will have at least one interested viewer! --Quark