For example, There is a list of function names

If we choose "index" and "sort" and "probability" Index(sort(probability(data))) This form an simple algorithm

Is there any python library for knowledge representation and planning for algorithm creation?


So called automatic programming is used to generate sourcecode from abstract descriptions. The input is usually a requirement specification and the aim of the planner is to find the executable code. In the literature this concept is described as Algorithm prototyping. Notable examples are Gocad and MAPP (the Berkeley Model and Algorithm Prototyping Platform). Both are written in Python and support the creation and edits of algorithm on the fly. For reason of education i have to point out, that in reality, algorithm prototyping isn't used very much. What is used in real projects are version control systems, which are tracking sourcecode created by humans.

In rapid prototyping tools for mathematical subjects, there are higher level functions implemented. The Matlab Tensor class is a notable example. The idea is, that the user doesn't need programming skills instead, he is creating a prototype with a scripting language and a GUI interface.


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.


There are C, C++, and Java libraries and APIs for knowledge representation over which Python and JavaScript wrappers have provided those APIs to those programming communities. This is also the case for planning.

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.

Research Directions

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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