The use of knowledge representation and planning to create and improve an algorithm is an area of intense interest.
Parallel and Distributed Processing
In a technology culture where parallelism is of even greater interest, we see an effort to automate the creation of processes at higher levels in multiple approaches to improve speed and reduce the cost of heavy duty computing.
- Hardware acceleration for artificial networks
- Multiple CPUs and GPUs on motherboards or in racks
- Distributed cluster computing
- Distributed database or uService architectures and load balancing
- Parallel programming language constructs
In some ways, paradigms that support multiple channels of processing are a movement away from algorithms and the von Neumann architecture. Algorithms are closely tied to the serial data processing paradigm. However, algorithms are likely to remain important in at least five ways.
- Where computing demands are low so serial processing is not a bottleneck
- The low level use of digital hardware to support the parallel operations
- The balancing of serial and parallel principles to optimize processes
- The handling of sampling for the creation of time series
- The reliable transfer, storage, and retrieval of information in packets
Consider the following excerpt from the question:
"index" and "sort" and "probability" ⇒ index(sort(probability(data)))
This form[s] a simple algorithm.
The indexing of the sorted probability distribution of the data is not represented as an algorithm. The substitutions are functional if using a functional programming language, however they could be declarations of dependencies if using a declarative language such as SQL, Modelica, Wolfram, ECL, or Prolog.
General algorithm growth and development technology is not in use in any of these languages as of this writing. This could be for any number of reasons.
- It is nonexistent
- It exists in immature forms
- Usable libraries exist but not marketed well
- They exist but are company confidential
- They exist but are classified
If and when such libraries become available in open source form and fall into common use, it will be easy to discover their names and URLs. Such would be a realization of a thus far difficult but certainly game changing objective.
Genetic algorithm concepts have been discussed since the 1990s for exactly this question's purpose. Much of the fifth generation language hope was along these lines, and many companies that develop the declarative languages mentioned above work on this objective every day.
To understand why the idea, as wide spread and obviously useful it is, has not been developed to usable form, these areas of study will aid in compression of the challenges and may possibly lead to new ideas.
- Goal specification
- Operating system, compiler, and processing core design, specifically the mapping of processes to hardware that can process
- Genetic algorithms and what we can learn from observing biological genetic mechanisms
- Outcomes analysis and the use of evaluation in searching
- Use of directed graphs to represent dependencies in processes
- Declarative language design and development environments
- Recursion, iteration, and their interrelationship
- Time series
- Stochastic processes and determinism
- Semantic networks (not in the sense of artificial networks but in the realm of ontology)
- Theory of operators and groups out of abstract algebra