When you step back and look at ...
Have you ever been able to solve a problem by deriving an approach from nature?
I've heard of Ant Colony Algorithms being able to optimize supply chain amongst other things. Also Fractal's being the "geometry of nature" have been applied to a wide range of problems.
Now that spring is here again and the world is coming back to life I'm wondering if anybody has some experiences they can share.
Thanks
PS I would recommend watching the "Hunting the Hidden Dimension" Nova episode on fractals.
Open-ended questions are those that provide respondents with a question prompt and provide them a space in which to construct their own response. Closed-ended questions, alternatively, provide a question prompt and ask respondents to choose from a list of possible responses.
Close-ended questions also help you make a decision quickly saving you a lot of time. The reason is that the information you've collected is quantitative in nature and as such, can be quickly analyzed. When there is a large amount of information to collect, close ended questions work better.
I remember reading a book by a mathematician about the field of mathematics, and he mentioned an example from nature. His example from nature helped me improve a design I was working on.
His example was this: he was driving and he saw some birds on a telephone wire. The birds were spaced evenly apart. This happened not because there was some all-ruling bird that was telling each one where to sit. Rather, each bird had within itself a certain "algorithm" for deciding what to do when another bird came by. Birds prefer to maximize their free space, I guess.
This helped me at a point when I was fairly new to OO. I kept tending to make things procedural and have centralized intelligence in "god-objects". I read this and realized that individual objects could focus only on the things they needed to know and care about, and yet that the result at the big picture level could still be what you want. That the right result can "emerge" without being "controlled".
I personally have never solved a problem by applying ideas from nature. However, I have solved problems by applying other people's solutions inspired by nature.
Many graph layout algorithms, and layout algorithms in general, are based on mechanics (springs, rubber bands, gravity) or simple insect-like behavior (follow your leader, maximize/minimize distance).
And, of course, I like object-oriented programming, which was developed by Nygaard and Dahl for simulations of physical real-world objects, and was perfected by Alan Kay, a microbiologist who modeled OO explicitly after the way simple cells can form complex organisms capable of complex behavior. So, in a sense, everybody who does OO, is indirectly deriving his program from nature.
I work in image processing, dealing with blobby objects which are too close to distinguish by simple thresholding. I implemented a watershed algorithm - the idea being that if you visualise the objects as hills on a map, and calculate the watershed line between the two hills, you can work out where one object ends and the other begins.
I wanted to improve this algorithm and as a bit of a hiker have found myself high up in the Lake District looking out over the panorama slicing up the hills and valleys with my fingers (much to the embarrassment of my other half). I have also been known to accost fellow walkers with questions like, "where does this hill end and the next one begin? Why? And why didn't you count that hillock?"
I haven't gone so far as to take my laptop out with me yet though. :)
Whatever concept in the nature, where we can make a mathematical model (Differential Equation) we can apply them on programming since the last are based on logic and mathematical foundation, one more than others.
I think we can think it backwards too, for example the observer pattern, there are a lot of species that implement that pattern too, chain of responsability, etc.
Its an interesting way to think...
Good one pal!
We created a "bug" programmatically ...once...
One of the most famous are neural networks.
My music software (see my profile) uses the evolutionary process to create music, in a manner somewhat analogous to Richard Dawkins' The Blind Watchmaker (which created images instead of music).
Very often.
I have sometimes gone for a walk in the forrest while pondering a problem. And more often than not the solutions I happen upon have something to do with trees.
I have also worked on UI ideas inspired by physics. Using concepts such as gravity, magnetism or electric repulsion to organize items on the display.
I also once heard an interesting talk on SOA, believe it or not. The central idea of the talk was that different subsystems in a SOA architecture should cooperate in the manner of cells in a biological system. The subject was highly illuminating as to how a complex system can actually work, even if it is constructed out of loosely coupled components.
The CS department at my old university has had a historic interest for algorithms inspired by nature since the seventies (I think the correct academic term is Natural computation. That's how I came into contact with some of those algorithms, especially Evolution strategies, the widely-known neural networks, and the exotic art of Membrane computing. I also did a class on data mining, where we studied some algorithms that allowed a computer system to learn from a set of data.
I would say that every kind of algorithm that makes the computer "learn" something falls into the category that is derived from nature. Therefore, even the rather basic algos like naive Bayes fall into this category, and we probably all use them in some way or another e.g. to filter out spam e-mail.
Personally, I have only implemented this kind of algorithms in university classes or my personal programming experiments. I think it is generally taught that they are powerful albeit in many cases less efficient than "classic" deterministic algorithms. Therefore a deterministic algorithm should always be preferred -- if there is one that solves the problem! It is only when the problem is too complex to be solved using deterministic algorithms that natural computation can offer a better solution. From my personal experience this is actually true. One small example: the evolution strategy I implemented to solve Sudoku puzzles took me half a day to implement and ran for several hours to find the same solution that the classic backtracking algo found in under a second (which took me less than thirty minutes to write ;-))
I just remember that a fellow student used evolution strategies to solve the problem of how to optimally distribute a set of files onto several DVDs for archival, which is I think an application of the knapsack problem or bin-packing problem, and it worked quite well. Apparently, ant colony algorithms can be used for this as well. Anyway, thanks for this interesting question.
I haven't solved the problem yet, but I think the ultimate solution to reputation, "karma" or any variation on finding a consensus among a group of people lies in Maynard Smith's work described in Evolution and the Theory of Games. Specifically, he develops the concept of an Evolutionarily Stable Strategy (ESS), which is behavior pattern that is robust against outside bad actors.
If we assume that everyone is altruistic, then things are simple. What Maynard Smith calls the "Dove" strategy of always deferring to others is an efficient strategy in the sense that no one wastes time fighting. But it isn't an ESS, because it can be invaded from outside by selfish actors. This would be analogous to a site that only has upvotes. It would fail because anyone could vote anything to the top.
More sophisticated systems like Stack Overflow and Slashdot encourage primarily upvotes, but allow for downvotes. They are more robust against people who are not "cooperating", but they are still vulnerable to "gaming". In both cases, it's easy to run up reputation quickly by being the first one to post, by posting something funny rather than useful, and similar actions.
I used Genetic Algorithms which is based on evolutionary biology to detect faults in Very Large Scale Integrated Circuits
Following links will give you basic explanation of genetic algorithm and a C++ library of Genetic Algorithm.
Introduction to Genetic Algorithms
C++ Library of Genetic Algorithm Components
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With