Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Hey everyone! By self-adaptive programs, I mean the programs which are able to adapt to specific situations. For example they are able to repair them selves or are able to change their behavior according to user's needs. Obviously they need some sort of A.I modules like Intelligent Agents or so on.

My question is, what applications for these programs can you think of/exist? An obvious destructive (!) application could be a malicious program/virus which can change its strategy in attacking its victim based on some factors.

The reason for this question is that I want to do some research on this topic as a university project and I want to know about different stuff and uses that could come into mind! Any response is greatly appreciated! :-)

share|improve this question

closed as not constructive by gnat, Martijn Pieters, Walter, MichaelT, Oleksi Mar 24 '13 at 17:37

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

Skynet. It's only a matter of time... – FrustratedWithFormsDesigner Feb 22 '11 at 18:57
Research isn't done by things "coming into" your mind, just by happenstance. This is a good first step for you to gain some ideas but then be sure to follow up by finding, reading, and analyzing research papers in these fields. Also, since this is for a project, try to find similar projects in related areas. – aqua Feb 23 '11 at 0:30
Espionage worms like Stuxnet. – Jim G. Feb 23 '11 at 1:17
@aqua: I know what your mean. That was what I intended to do. I couldn't really find any practical application for what I mentioned. So I thought it would be better to brainstorm the subject. – M2X Feb 23 '11 at 5:20

I had a professor who did his PhD thesis on the opposite of what you suggested. Rather than virus/malware, he wrote software to counter viruses/malware. It could evolve/adapt to changing situations.

I think he envisioned an operating system that behaves like a human body (or other organism). Imagine a program that can distinguish harmful programs from nonharmful ones. The same way your body can detect foreign substances and kill them, but not kill it's own cells, an operating system could detect and kill a virus that hasn't even been identified.

I know he wasn't the first to work on this, but bio-inspired computing like this is kinda neat.

share|improve this answer
This one seems really nice! Never popped into my mind! – M2X Feb 22 '11 at 19:23


It's very important for robots to adapt their behavior if the environment changes to something that they aren't prepared to deal with.

share|improve this answer
+1 - there was a show on the Science Channel (forget which one) that showed an assembly line where they had robotic arms that would weld and then spot check their weld. If the weld wasn't clean, they would go back and fix it. Pretty cool stuff! – Jetti Feb 22 '11 at 19:21

There is a whole sub-field of AI called Machine Learning, which deals with this kind of thing. Its applications are becoming ubiquitous: email spam filters that learn and get better over time, photo management programs like Picasa, which learns to recognize the faces of your family members, Netflix, which learns your movie preferences, Amazon, which learns your shopping preferences, etc., etc., etc.

Being "adaptive" for a program boils down to collecting data over time and looking for patterns.

share|improve this answer
As far as I know, machine learning is one of the applications of neural networks. Am I right? – M2X Feb 22 '11 at 19:25
@M2X: Neural networks just one algorithm for machine learning out of a whole long list. Other types include Bayesian Networks, Naive Bayesian models, and support vector machines. (And there are many more.) – Ken Bloom Feb 22 '11 at 19:26
@M2X: Ken is right, you have it backwards. Neural networks are a family of machine learning algorithms. A neural network is typically used as a classifier, i. e. something that maps an input pattern to a label, like spam vs. non-spam. There are many other kinds of classification algorithms. – Dima Feb 22 '11 at 19:40

I think a good example would be the Windows Start Menu, which keeps track of the most frequently or recently used applications and places them more prominently.

share|improve this answer
That could be as simple as a list of program names and counts how many times a program is accessed and puts them in order of most accesses to least. I think the OP was looking for something a little more complex. This might be a good example for 1st or 2nd year... – FrustratedWithFormsDesigner Feb 22 '11 at 19:15
@FrustratedWithFormsDesigner has a point. Why does it have to be simple? . A program openned twice in the last hour should be on the list before one opened a hundred times but not in the last day. An application frequently used the first of the month could show up around that time until you use it. There are dozens of patterns is could pickup on. – JeffO Mar 11 '11 at 3:54

One interesting application and research topic is applying self-adaptive programs to Economics problems, such as the iterated prisoners dilemma problem.

share|improve this answer

I always thought an adaptive scheduler would be cool. OS task schedulers need to be tuned for general purpose use, but most servers spend their entire lifetime doing exactly one thing. Using adaptive algorithms, a server's OS could tune its scheduler's performance weights to best match the actual usage pattern of the server. Over time, the scheduler would become more efficient at running one set of processes at the expense of the general case.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.