Slashdot Mirror


Tuning The Kernel With A Genetic Algorithm

fsck! writes "Jake Moilanen provided a series of four patches against the 2.6.9 Linux kernel that introduce a simple genetic algorithm used for automatic tuning. The patches update the anticipatory IO scheduler and the zaphod CPU scheduler to both use the new in-kernel library, theoretically allowing them to automatically tune themselves for the best possible performance for any given workload. Jake says, 'using these patches, there are small gains (1-3%) in Unixbench & SpecJBB. I am hoping a scheduler guru will able to rework them to give higher gains.'"

44 of 251 comments (clear)

  1. Innovation and open source by Anonymous Coward · · Score: 4, Insightful

    A common criticism of Open Source is the accusation that it lacks innovation.

    I mean, common. Just look at this. Amazing.

    And even if it turns out to be not that good, it was still a good read :-)

    1. Re:Innovation and open source by ColaMan · · Score: 3, Insightful

      Sooo...... can I copy and paste an image from gPhoto into The Gimp yet? No? Call me when you guys manage to do what windows 3.0 could.

      --

      You are in a twisty maze of processor lines, all alike.
      There is a lot of hype here.
    2. Re:Innovation and open source by AstroDrabb · · Score: 2, Informative
      gPhoto is an image _viewer_ not an editor. In WinXP the default image viewer is "Windows Picture and Fax Viewer" and it doesn't allow you to copy an image from it and paste it into paint or photoShop, so it is no different than gPhoto. Have you ever tried to drag an image into Gimp? It works quit well.

      Oh, and X supports many formats on the clipboard

      One of the really cool, yet rarely used, features of the selection mechanism is that it can negotiate what data formats to use. It's not just about text. When one application asks another for the selection, part of their communication involves the requester asking the owner for the list of types in which they are capable of delivering the selection data; then the requester picks the format they like best, and asks for it that way.

      As a simple example, suppose there is a program displaying text in multiple fonts. When pasting that into a text-only program, you'd want to paste only the text. But when pasting that into a word processor, you'd want to keep the font information: if both applications spoke HTML, they could use that as the intermediate format by which they transferred the data.

      More complex things are possible, too: for example, when an image is selected on a web page, the web page displayer could offer to serve that up as raw image bits; or as JPEG data; or as the original URL of the image. When trying to copy and paste an image into a text editor that can't do images, the text editor might decide that the next best thing would be to paste the filename of the image, or the URL.

      --
      If Tyranny and Oppression come to this land,
      it will be in the guise of fighting a foreign enemy. -James Madison
  2. Re:Futurology by Moonbird · · Score: 2, Interesting

    You know, in the german translation of Terminator 2 Arnold talks about how his brain is made of "Neutrale Netze" or "neutral nets" re-translated.

    It's pretty funny considering he is talking in his grave and totally serious robo-voice...

    --

    --
    All extremists should be taken out and shot.
  3. Complexity? by BurntNickel · · Score: 5, Insightful

    So how much additional complexity is added for a 1-3% perfomance improvement? I'm all for more speed, but keeping thinks simple can often be more improtant when it comes to maintainablity and adding additional features.

    --
    And the knowledge that they fear is a weapon to be used against them...
    1. Re:Complexity? by bersl2 · · Score: 2, Insightful

      It's only one guy (I think; didn't RTFA), and it's nowhere near being included in the mainline kernel. Your observation may be correct in general, but what's the problem here? If an experiment pans out, the internals will be changed down the line to incorporate the new idea; if this idea were to have yielded a 5-10% increase in performance, would you have made that comment?

    2. Re:Complexity? by devillion · · Score: 2, Insightful
      Understanding (basic of) GAs is easy and so is implementation. They also work quite well. That's why they are so popular.

      IMHO, if GA implementation can be made really reliable it could maybe replace other code which may be (I don't know) even more complicated.

    3. Re:Complexity? by m50d · · Score: 2, Insightful

      Like I've said before, kernel 2.6 is simply not stable yet. Wait until they fork off 2.7, then with luck it will settle down.

      --
      I am trolling
    4. Re:Complexity? by Morosoph · · Score: 2, Interesting

      Genetic algorithms are pretty simple, compared to what the bulk of what the kernel is doing. Furthermore, the technology is a known quantity, and probably won't be running at run time. Given the existing size of the kernel (6 million lines), I don't think that it'll add a lot to complexity.

    5. Re:Complexity? by gnuLNX · · Score: 2, Insightful

      GA's a pretty trivial to code. So very little complexity is added.

      --
      what?
    6. Re:Complexity? by grammar+fascist · · Score: 4, Informative

      Understanding (basic of) GAs is easy and so is implementation.

      I'm a machine learning researcher, and I'll second this. Also, the code for it will be quite self-contained (if done right), and shouldn't affect any parts of the kernel except where it's called to run an iteration.

      They also work quite well. That's why they are so popular.

      Sure they do. For a lot of problems, though, they're not so hot compared to other optimization methods like hill climbing and empirical gradient descent - they tend to run slowly - and I would like to ask Mr. Moilanen why he didn't use one. GAs are especially good with nominal parameters (discrete, unordered). But I would expect tuning parameters to be either discrete or continuous.

      GAs are theoretically capable of finding global optima, except that's kind of a red herring. The only reason you can prove that is that, theoretically, no matter how small the probability, you'll eventually get exactly the right sequence of mutations to produce a global optimum. In practice, they tend to produce local optima like most other optimization algorithms - especially as Moilanen describes it:

      All of the tunings are then ordered from best performance to worst, and the worst half of the performers are replaced with new possible tunings derived from the best half of the performers.

      You generally have to be a little less selective (more random) than this.

      --
      I got my Linux laptop at System76.
    7. Re:Complexity? by xenocide2 · · Score: 2, Interesting

      Genetic programming is a known quanitity, but if it "wont be running at run time" then its borderline useless. The whole idea is that the genetic algorithm adapts to a workload. Currently, scheduling is about fine tuning at the expense of flexibility. You tune the scheduler for a desktop setup, or for a database server, or whatever you have. Most tweaks yield a few percentage point gains in theory and maybe a single percent in practice for the given problem set, at the expense of about a ten percent penalty in the worst case scenario. Essentially, the genetic algorithm attempts to fine tune the kernel for you in ways.

      Its not really that complex, but reasoning about how well it could perform is VERY difficult comparitively speaking. Furthermore, it introduces a much fuzzier notion of fine tuning. Rather than playing with variables like "swappiness" and cpu affinity, you're messing with a fitness function, where minute changes can move you from a percentage gained over a stock kernel to a percentage (or worse) loss. Certainly, I'm impressed that he's managed to make an improvement over stock with it, which puts interested kernel developers on a good first step. Nobody wants to chase technology that doesn't even show a hint of unlocking performance potential.

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

  4. good luck with that by Illserve · · Score: 4, Insightful

    If a parameter space is complex enough that you can use a genetic algorithm to tune it, the solutions it finds may have all sorts of unexpected potholes, bugs, etc.

    In other words, non-competitive genetic algorithms are only as smart as the fitness function you give them. If your fitness criteria aren't smart enough to cover all the bases, your solutions will have unpredictable deficiencies.

  5. not a panacea by DrSkwid · · Score: 2, Interesting


    They might converge on a point of attraction that is not the highest possible.

    Sure the only way is to exhaustively search the "chromosome" space for every possibile combination, and computers are good at brute force!

    --
    There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
    1. Re:not a panacea by John+Little+John · · Score: 2, Insightful

      They might converge on a point of attraction that is not the highest possible.

      Mutation helps with convergence issues.

      Sure the only way is to exhaustively search the "chromosome" space for every possibile combination, and computers are good at brute force!

      Um, I don't even know how many parameters are involved to be adjusted, but it does not take that many to make exhaustive search useless, even for a computer.

      --
      The sharp edge of a razor is difficult to cross. Thus the wise say the path to salvation is hard...
  6. Other kernel parameters? by Feint · · Score: 5, Interesting

    Could this be extended to include other kernel parameters as well? Depending on your app, things like TCP timeouts and other muck can have a large impact. Tuning this stuff is currently somewhat of a black art. Then as the user community of the app becomes familiar after rollout, a lot of the usage patterns change. In a few cases, this means we end up having to re-tune the kernel.

    If this package could be extended to the other parameters, it would save my customers a *lot* of time and money.

    If nothing else, this could be a deciding factor for some of our clients to use linux instead of windows.

    1. Re:Other kernel parameters? by Corpus_Callosum · · Score: 2, Interesting

      Now your talking. Adaptive tuning is definitely the future. While I disagree that a general purpose GA is useful here (you should not let a GA hit an operational system, you need to let it hit a simulation first to build up a certain amount of fitness in it's solution space), many adaptive techniques would be useful and could eliminate the need to hand tune in many environments.

      --
      The reason that it can be true that 1+1 > 2 is that very peculiar nonzero value of the + operator
    2. Re:Other kernel parameters? by burns210 · · Score: 2, Interesting

      That is a great idea. Now here is a dumb one:

      What about adding hooks for applications to to send/recieve performance changes after tweaks? Services, daemons, etc, need to communicate how the GA's latest tweak adjusted performance, right?

  7. So.... by mstefanus · · Score: 2, Funny

    So will this means that if I install this kernel on my computer I will have baby Pentiums or baby Athlons soon?

    1. Re:So.... by LiquidCoooled · · Score: 2, Funny

      If you nurture your computer, and occasionally sit it next to another computer then maybe, just maybe, when you wake up one morning, you will have little PDAs running around the place :)

      --
      liqbase :: faster than paper
  8. Not worth it... by mikelang · · Score: 2, Insightful

    1-2% gain is in the borders of statistical error. Definitely not worth the increased complexity of the solution.

    1. Re:Not worth it... by Corfe · · Score: 5, Insightful

      It's a unique idea - what's wrong with running it for a while with your typical load (say, for a fileserver), finding some better-than-average parameters for the kernel, then running an unpatched kernel with those parameters manually entered?

      What is "on the borders of statistical error" depends on how many times the test was run, and how much variation there had been in his results before. I think it's pretty safe to assume that if he knows how to implement a genetic algorithm into the linux kernel, he knows how to handle statistics properly.

    2. Re:Not worth it... by xenocide2 · · Score: 2, Insightful

      Toms hardware consistantly favors computer hardware that only pushes above the competition by 1 percent or less. People spend an extra 40 dollars for this performance, and you're not willing to consider that people might like a FREE performance boost of a percent?

      --
      I Browse at +4 Flamebait

      Open Source Sysadmin

    3. Re:Not worth it... by jelle · · Score: 2, Interesting

      How do you know the margin of error? I've seen systems/measurements where 50% difference is a statistical error, and systems where it needs to be less than 0.2% to be a statistical error.

      Pragmatism and statistics are _not_ a good mix.

      Note that, for example, many hosting providers host hundreds of web sites per system. Adding a couple of percent in performance then adds a couple of percent to the bottom line of the cost picture for those companies. The same is true for supercomputer clusters used by many companies and universities with hundreds of nodes.

      Even though 1-2% sounds like 'next to nothing', but that's not how you should look at it. If you ignore 2% only five times, you've really already ignored 10.5%...

      There is a dutch saying that, when translated in english is like this: "If you don't honour the small things, you're not worth the big ones".

      --
      --- Hindsight is 20/20, but walking backwards is not the answer.
  9. This has been done before by drsmack1 · · Score: 2, Funny

    http://tinyurl.com/6pkzc
    "Daystrom felt that such an act was an offense against the laws of God and man, and the computer that carried his engrams also believed it."
    --Kirk

  10. Re:Dear Kernel Coders by gclef · · Score: 2, Insightful

    Nice troll, but your sarcasm presents a common fallacy: that work on one issue (adding features like this) means that less work is being done on some other issue (cleaning up security problems). The fact is, throwing more people at a problem does not always make it better, especially if the people you throw at it don't know the subject (which the author of this algorithm may not, can't speak for him).

    In other words: if you have someone who's good at writing Genetic Algorithms, but not so good at searching for kernel vulns, why devote that person to security? Why not let them write their contribution, and have the guys who are good at security do their part separately? Why should we only do one thing at once?

  11. Re:Dear Kernel Coders by kneeless · · Score: 3, Informative

    As mentioned previously on Slashdot, uselib() comes from Linux 0.13. It was kept for the a.out to ELF transition. Someone recently noticed it and said, "What is _that_ doing in my system?" This is new code that's being looked at by hundreds of developers. It's pretty hard to get root kernel exploits when it's like that. Plus, this code doesn't introduce any calls with user level priviliges. (Read: no exploit)

  12. Simulated Annealing by Mark_MF-WN · · Score: 2, Interesting

    That's where 'Simulated Annealing' comes in. It can often avoid local maxima that aren't optimal.

  13. One question remains: by Qbertino · · Score: 2, Funny

    Did SCO allow him to modify their kernel?

    --
    We suffer more in our imagination than in reality. - Seneca
  14. GA + Hill Climbing... by Corpus_Callosum · · Score: 3, Interesting

    First thing: A GA is only truly effective if you let it exhaustively search the search space - which is why GAs are run against simulations rather than in operational systems. Imagine trying to tune a kernel at runtime by occassionally switching to random tuning parameters. I think this is extremely non-optimal. Of course, if most of the heavy lifting is done before-hand and the GA is simply examining pre-defined parameter sets on your machine, it could work. But it's not really much of a GA anymore.

    As an alternative, perhaps using some form of pseduo-GA that tries to find pre-tuned parameters that most closely match your operating environment and then letting a Hill-Climbing algorithm hit it would be a better solution.

    Hill climbing can also be used in a GA type manner by letting the GA determine witch parameters to climb and in what order. The climbing itself is pretty straightforward, allow vectors to interact with individual parameters. If the result is worse, reverse the vectors or switch to new parameters. Rinse, repeat.

    Yes, GA can produce odd bugs and potholes. Yes, it is the fitness test that determines if that will be true. But a good GA will generally find solutions that are as good or better than hand tuning for search spaces that are very complex. Overall, this is a good idea but is probably more complex than advertised.

    --
    The reason that it can be true that 1+1 > 2 is that very peculiar nonzero value of the + operator
    1. Re:GA + Hill Climbing... by TapeCutter · · Score: 2, Interesting

      Moment preezz, I think the both of you are missing something. I have had some experience writing commercial software that collects performance stats for things like capacity planning, tuning, etc. As you can imagine it would be bad press for an application like that to be a performance hog, but (in my experience) when used to "collect all" the machine will take ~7% performance hit (many competitors were worse for less data).

      Granted it was a user level app and stored it's data in an sql db, but roughly half that data is from running processes.

      The collection of timely data will overwhelm anything else. I have no idea of the details of what has been done except from the article. I think the only way it could be usefull would be as a tuning tool for servers (most heavy duty servers have regular patterns of usage).

      You run the tool on your server to collect data. You then use the data and a seperate machine to "evolve" a solution. The solution may involve many changes at various times, whatever, but these could be sheduled into the server. In most places you would want to collect data for at least a month,preferably for 13 months.

      Note that the 3% was against particular benchmarks. If you based your benchmarks on data collected from your servers the "evolution" stage could be a snap. A lot of large companies won't even spend money to collect and analyse basic data because they run on a "fix on fail" basis and just throw hardware at it because memory/disk space is relatively cheap and they think it might help.

      Very interesting stuff and a great thread but I can't see the GA-kernel as a significant improvement.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    2. Re:GA + Hill Climbing... by Illserve · · Score: 4, Insightful

      First thing: A GA is only truly effective if you let it exhaustively search the search space

      If you have the resources to exhastively search the space... you don't need a GA.

      A GA is generally used when the search space is hopelessly huge and you need to chart a course from A to(wards) B but you don't know the way.

      And in finding this solution, which is "grown", not engineered, it's much easier for unintended wierdnesses to creep in. A GA might solve problem X by ruining performance on problem Y, something that you, as a software engineer, would never even consider viable, and hence you forgot to force the fitness function to check problem Y along with problem X.

    3. Re:GA + Hill Climbing... by Corpus_Callosum · · Score: 2, Insightful
      "If the GA starts with 20 predetermined tuning parameter sets and mates and mutates those, then all we have is a fancy hill-climber."

      This isn't true. The mutation alone differentiates it from a hill-climber.
      Mutation in Genetic Algorithms are supposed to act as hill-climbers *most of the time*. Mutations are not supposed to make drastic changes - that is the job of random individulas inserted into populations and recombination (mating). Mutation (of the bit flipping variety) is mostly there to provide the opportunity make good solutions better.
      The problem of hill-climbers is that they get stuck at local peaks. Genetic algorithms don't.
      Genetic Algorithms get stuck at local maxima all the time, especially in populations with low population count and low genetic diversity.
      "In order to find novel Maxima in the search-space, the GA should not be constrained - it must have the ability to exhaustively search, even though it does not (of course) do such a thing."

      I don't understand what you consider to be the constraint in this situation. The genetic algorithm does have the ability to find any part of the search space as far as I can tell.
      I need to take a look at the code, but my understanding from reading the article was that the GA starts with predefined tuning solutions and uses recombination and mutation to change them. In order to *effectively* search the search-space, more randomness needs to be present (e.g. generate a couple of random solutions each generation). Otherwise, the GA will pretty quickly draw to a local maxima and stick there (even with mutation, altough mutation *can* kick it out of a local maxima eventually - assuming there is higher peak to be found within the range of the mutation function).
      I don't see how a fitness function could determine whether or not it had found "the hill".
      Why does it have to? The point is, don't use the GA *all the time*. Use it until the system stabilizes and then hill climb for a while. The results will be better for a couple of reasons: (1) You are not running all the bad solutions at the bottom of your population all the time while hill climbing (only the best solution) and (2) Your best solution will be getting deterministically better through hill-climbing. A GA is a bad hill-climber but good at finding hills. Augmenting a GA with a hill climber will improve solutions (often dramatically).

      Writing a GA is simple. Writing a GA that delivers results, now that is a different beast alltogether. My experience has shown me that there are some rather more complicated things that need to be taken into account such as:
      • Remembering previous good solutions instead of breeding them out of the genepool. In this scenario, it is likely that there are multiple eigenloads that a machine finds itself in. Having to re-generate the correct tuning parameters each time the load switches between these *magic* states is cumbersome. But if the genes that worked in the other eigenstate are still in the genepool, it becomes trivial. Often, this is achievable by augmenting the fitness function to take into account the previous aggregate fitness of a solution or somesuch.
      • Keep the right amount of randomness flowing. If the GA does not have a good source of randomness to draw on, it will operate much like a hill-climber and will oscillate between a few solutions. It will get stuck.
      • Keep the population correctly sized
      • Have multiple populations that occassionally interact
      • Statistical mating is important
      • In a case like this, the best current solution should get the most timeslices. Period. And this should be like 10x the total number of timeslices for the entire population (e.g. population=20, each generation is 220 timeslices - top solution gets 200, each other gets 1)
      • Tuning mutation and crossover is extremely important
      • Fitness test. Fitness test. Fitness test.
      • many many other things to consider
      --
      The reason that it can be true that 1+1 > 2 is that very peculiar nonzero value of the + operator
  15. Re:Dear Kernel Coders by Xpilot · · Score: 5, Informative

    Go grab the patches. They're commited into the BK repositories already. Sheesh.

    Patches for 2.4 can be found in this changeset.

    Patches for 2.6 can be found in this changeset.

    Click on the little "diff -Nur style" link for a an actual usable patch.

    In the course of a few hours, you have the fixes already. Yay for open source.

    Btw, nice troll :p

    --
    "Backups are for wimps. Real men upload their data to an FTP site and have everyone else mirror it." -- Linus Torvalds
  16. Genetic packet scheduler by City+Jim+3000 · · Score: 3, Interesting

    Would it be possible to apply a genetic algorithm on a packet scheduler? IMO the packet schedulers available today needs too much manual tweaking.

  17. Re:Futurology by wertarbyte · · Score: 3, Funny

    It's pretty funny considering he is talking in his grave and totally serious robo-voice...

    You mean there is another voice?

    --
    Life is just nature's way of keeping meat fresh.
  18. The problem: Determining Performance by Corpus_Callosum · · Score: 3, Insightful

    The main problem with this or any other adaptive tuning mechanism is actually acquiring performance metrics.

    What is the system using to decide if a new parameter set is better than a previous? What is the fitness test?

    Some applications are disk-bound, others are CPU-bound, others are network bound. The performance dance is often non-obvious (e.g. some applications will achieve generally higher performance by allowing I/O higher priority than context switching, while others that appear to perform in a similar manner will achive higher performance by reversing that order).

    The kernel does not have any mechanism to determine if a particular application is performing better or worse, it can only really get a guage of throughput and load. While this MAY be enough to get small systemwide performance gains, in order to really acheive significant application-specific performance gains, I think that applications would need to explicitly add support for adaptive tuning by logging relevant performance metrics for the kernel to tune around.

    Thoughts?

    --
    The reason that it can be true that 1+1 > 2 is that very peculiar nonzero value of the + operator
  19. Oh no! by brainnolo · · Score: 2, Funny

    Does this means Linux will be effected by genetical diseases sooner or later?

  20. GAs aren't rocket science by Earlybird · · Score: 5, Insightful
    Because most people aren't intimately familiar with genetic algorithms, and because GAs are associated with machine learning/artificial intelligence, GAs are seen as somewhat mysterious and magical, and are therefore either accepted with "whoa, cool!" or rejected with "whoa, complex!" While GAs are indeed novel compared to many long-established algorithms, both mentalities are overreactions.

    In reality, the basic GA framework is "just" another efficient search algorithm, no cooler or more complex than, say, a hash table or a binary search tree; at its simplest, a GA is a way to find an optimal configuration of components without looking at all possible (potentially explosively exponential) combinations; instead, you look at just some permutations, and as you iterate through generations, applying breeding and mutation, you arrive at a generation which is statistically close to optimal.

    GAs are also in no way new or unproven technology; a nice example of mainstream use is PostgreSQL's query planner, which uses GAs to optimize query plans.

  21. practical applications by memoryband · · Score: 2, Interesting

    while performance gains of 1-3% in a well defined set of tasks (in this case the benchmarks) is a marginal improvement well inside statistical error...

    this is a really interesting idea.

    Moving the genetic algorithm processing to another machine may be warranted. If you had a good idea of what you were going to be doing (heavy database work for instance), a dedicated machine could be used to find an optimal scheduling solution and then that could be implemented on the production machine.

    or maintain a list of optimal solutions on the production machine and change based on context.

    This implementation might not be all that useful but I hope it spurs interest and a lot more development in the area.

    The author did an awesome job coming up with the idea.

  22. Intelegent people consider a GA by tallbill · · Score: 2

    Obviously any tuning must involve data collection on what is going on in a process. This means that some kind of logging must go on in the software.

    Anyone who has ever created a logging interface understands that a log will slow down a system.
    And so, even if one were to run the GA and have it show things, it will still mean that later that GA should be removed or swithced off. Otherwise the workings of the GA and its requisite log will slow down the system.

    So, use a GA,and then intellegently remove it after you decide what it has shown how it will actually increase performance.

    It is very common to do one build with logging enabled, and another that does not have logging at all. And then you link in both. At the whim of the engineers (because this is usually done in real-time systems that are designed by degreed engineers) the one can be turned on.

    or you can design a system with lists of modules that each have two versions, a logging one and a non-logging one. Then you use a function pointer based calling method and switch the modules between logging and non-logging at your whim.

    When you say things like Wont work you shut yourself off from possibly useful tools. Naturally you will need an intellegent person to oversee the use of this tool of Genetic Algorithms. You could be that person.

  23. Does anyone use this one? by oops.sgw · · Score: 2, Interesting

    Just compiled this stuff on an old testbox, now running it for about 100 generations. At first it was feeling very slow, ok, it's a Pentium2 ;-) but it was much slower than running vanilla 2.6.9 or 2.6.10, for example.

    But it is getting much better now, I don't know how much generations there will be needed to get things right. It feels pretty much the same as with the vanilla kernels, let's see where this leads ...

    Anyone else with experiences? AFAIK this thingy can only be tweaked by editing the code and recompiling, there are a few hardcoded parameters ...

  24. Re:Moderators on drugs? by JFitzsimmons · · Score: 2, Informative

    Have you??

    Proof

    --
    Beware he who would deny you access to information, for in his heart he dreams himself your master. -Anonymous
  25. Or any startup routine. by tallbill · · Score: 2, Interesting

    I was not thinking about just desktop computers.
    In general any software has initialization routines. My work has been in robotics, automation, and telecom switching equipment written in C and C++. We spent a lot of time worrying about efficiency, but not for startup routines unless the start lag became annoying. But for the most part people expect things to take a little time to start up. There are a lot of things to do, especially if you have no way of knowing how the thing shut down. I am digressing.

    I think that a genetic algorithm to tune sounds like a great idea. I would just want a way to say check this code and not this other code.

    I hope that there is much success with this GA.