# Wolfram

# Open Projects

Construct Programs from Examples

Consider giving specific examples of transformations for strings or lists. Work out how to construct the simplest programs that perform these examples. This is a potentially powerful way to do programming, especially for things like data wrangling. Consider an InferredRule function for replacement rules, or a FindSimplestFunction function for more general cases.

Categories:

Personal Timeline Visualization

Image collecting together someone's calendar, email, pedometer data, photo stream, social media, etc. Figure out how to make a good "personal timeline' with appropriate zoomability, etc. Consider using machine learning techniques to work out what parts of the timeline are important enough to show at higher levels. Also use geolocation information if it exists.

Categories:

Identify "Important' Photographs from a Stream

Given a stream of photos tagged by a lifelogging camera (or appearing in a passively recorded video), find ways to determine what photos are "important' or "characteristic'. Expect to use machine-learning functions like DimensionReduce.

Categories:

Modernize Demonstrations in the Demonstrations Project

Use automated and manual techniques to modernize code in the Wolfram Demonstrations Project that was created with earlier versions of the Wolfram Language. Expect that some complex code from earlier versions can be replaced by simple and clear modern code. Start by searching for particular code patterns that can now be replaced by simpler forms. Consider doing the same for examples in the Documentation Center. Possibly try to build something like a recurrent neural network system that can produce candidate "translations' of code.

Categories:

Visual Block Interface for Wolfram Language Code

Create an interface that provides a fixed set of blocks that can be arranged to create specific classes of Wolfram Language code. Some of these blocks might be like ones available in languages like Scratch, but more of them would implement functional programming constructs.

Categories:

Trace the History of Math Textbooks

Find standard math textbooks over the past several hundred years, and trace how the teaching of concepts has changed over time. Find the evolution of mentions of particular named techniques. Also study how the ordering of topics has changed. Look at specific exercises and trace how their patterns of difficulty have changed.

Categories:

Identify Cellular Automaton Classes with Machine Learning

Use modern machine learning to create a classifier for the 4 classes of cellular automata. Use this to search for new class 4 cellular automata, and to study the frequency of classes in different rule spaces. Also try to find regularity in the pattern of which rules lead to what types of behavior.

Categories:

Can a Neural Net Learn Math?

Experiment with training a deep neural network to do multi-digit addition and other arithmetic operations. See to what extent it makes the same mistakes as humans, or different ones. Start by feeding it some examples of e.g. 3-digit addition, and see if it can correctly extrapolate to other ones. Also consider using recurrent neural nets and feeding in digits sequentially.

Categories:

Implement Historical Cryptosystems

The Wolfram Language supports many modern cryptosystems. Implement historical systems such as Caesar Cipher, Enigma, DES, LFSR, R30, etc. in a way that can connected to the same framework.

Categories:

Computational Humor & Automatic Joke Creation

"Tell me a joke about an octopus and an elephant.' We'd like things like this to generate something interesting, for example in Wolfram|Alpha. Find ways to do this automatically. Possible approaches include: analysing large corpuses of existing jokes; using semantic networks of words; identifying puns from word pronounciations.

Categories:

Compute Ocean Tides Worldwide

Wolfram|Alpha and the Wolfram Language have access to tide tables and data for tens of thousands of tide stations around the world. What about tides in other places? Global approximations to tides were worked out by people like Laplace and Kelvin. Implement approximations based on these theories, or better modern theories that take into account ocean depths etc. (Requires graduate-level knowledge of mathematical physics.) New information: use satellite observations of ocean surfaces.

Categories:

Connect to the D-Wave API

D-Wave has built a computer that effectively acts like a quantum spin glass, presumably finding energy minima. Make a connection to an API to this computer using ServiceConnect in the Wolfram Language.

Categories:

Automated Semantic Text Sorting

Given a sequence of pieces of text (like this website) find a way to sort the pieces of text so that semantically close pieces are typically nearby. Consider doing this using various dimension reduction and topic modeling methods.

Categories:

Wolfram Language Code Corpus Analysis

Create functions to analyze a corpus of code written in the Wolfram Language. At the simplest level, count occurrences of functions and combinations of functions. What is the best analog of n-grams when everything is structured as a tree? Find ways to create interdependence graphs for Wolfram Language functions.

Categories:

Visualize Wolfram Language Code Execution

Find automatic ways to visualize the execute of a Wolfram Language program. This might involve automatically plotting values of variables against time. Or it might involve showing the "flow of the program'. Understand how to show program flow not only for programs written in a procedural style, but also for those written in a functional style. The goal is a practical tool that can help people understand what their programs are doing.

Categories:

Create Automatic Explanations of Wolfram Language Programs

How would you explain in words what a Wolfram Language program does? Find ways to do this automatically, perhaps visually annotating pieces of code. It may be useful to allow different levels of annotation. It may also make sense to show different stages in the execution of the program, annotating intermediate results.

Categories:

Convert Natural Language to Programs

Wolfram|Alpha can take something like "make a table of the first 10 squares' and create a Wolfram Language program from it. Generalize this as much as possible. Many algorithmic processes are difficult to describe in natural language; that's part of why computer languages are useful. Often it's special cases that for one reason or another are most amenable to specify in natural language. It's conceivable that modern machine learning methods could be relevant.

Categories:

Study Randomly Generated Wolfram Language Programs

What do typical randomly generated Wolfram Language programs do? This is a version of the core question of A New Kind of Science. Study the question in the context of realistic Wolfram Language programs. Perhaps concentrate on particular areas, like image processing or list manipulation. What are the simplest programs that produce complex results?

Categories:

Wolfram Language "Random Example' Website

Set up a website that provides random examples of the use of the Wolfram Language. Most likely, multiple levels are needed. Each example should link to documentation or explanation.

Categories:

Automatic Grading of Diagrams

"Create a graphic consisting of a red disk overlapping a blue one.' How can one determine automatically whether someone has done this correctly? If the code is in the Wolfram Language, it may be possible to do code analysis. Alternatively, see whether modern machine learning can help, and at least give probabilities for correctness.

Categories:

Visualization of Byte Arrays

Find good ways to visualize the contents of ByteArray objects. Figure out how to make important features stand out. Make a system that will work both for small ByteArray objects, say representing packet or other headers, and for large ByteArray objects, say representing binary file formats. Figure out for example how to optimally split a ByteArray into rows for 2D visualization. Use correlations to detect for example whether the byte array corresponds to a 2D image.

Categories:

Implement Nuggets from Knuth's Books in Wolfram Language

Don Knuth has spent much of his life writing his Art of Computer Programming book series. His books are full of interesting algorithms. Implement collections of these in the Wolfram Language.

Categories:

Wolfram Language Code for OEIS Integer Sequences

Neil Sloane's Online Encyclopedia of Integer Sequences has Wolfram Language code for some sequences. Add good Wolfram Language code for as many sequences as possible. Note that programs for some sequences can be found automatically using FindSequenceFunction.

Categories:

Mobile Automata in Wolfram Language

The Wolfram Language has a standard function---CellularAutomaton---for simulating cellular automata. It also has a function---TuringMachine---for Turing machines. Make a similar function for mobile automata. It'll need to be very efficient, support compressed evolution, and have a good way of enumerating rules.

Categories:

Symbolic Representations of Programming Languages

Set up a framework for importing source code written in traditional computer languages like C and Java into the Wolfram Language. Build up an abstract syntax tree that allows symbolic analysis of the code. Expect to hook up external parser libraries to the Wolfram Language, then formulate a good framework for representing external languages symbolically in the Wolfram Language. As a precursors, implement CodeCases (analogous to TextCases) that can let one pick out items like "CFunction', "JavaClass', "CLine', etc. For full symbolic representation, introduce constructs like SyntaxElement["C','Keyword'-> "if'].

Categories:

Connect the Wolfram Language to the Bitcoin Blockchain

Figure out how to import both historical and real-time data about Bitcoin blockchain into the Wolfram Language, for visualization and analysis. Wolfram|Alpha already has some Bitcoin capabilities.

Categories:

Implement Additional Forms of Text Segmentation

TextCases supports various forms of segmentation for text, such as words and sentences. Implement other forms of segmentation. Examples might be: verses, theorems, legal document sections, etc. This will be a mixture of precise algorithms, heuristics, and machine learning based on training corpuses.

Categories:

Points as Uniform as Possible on a Sphere

CirclePoints distributes points uniformly around a circle. What is the best one can do in uniformly distributing n points on a sphere? This is a difficult problem, but there are some exact and many approximate solutions known. Make a systematic Wolfram Language implementation of SpherePoints to capture these.

Categories:

Implement Power Towers in the Complex Plane

For integer n and k, PowerTower[k,n] is Nest[k^#&,k,n-1]. Figure out how to continue this function to arbitrary complex k and n, and work out efficient implementation methods. Even for integer k and n, try to find ways to approximate leading digits without computing the full result. (It doesn't seem to be known how to find the leading digit of PowerTower[2,n] for large n, although the trailing digits are fairly easy to work out.)

Categories:

Implement Octonions

Make a Wolfram Language implementation of octonions, supporting as many number-related operations as possible, as well as visualization.

Categories:

Interfaces for Browsing Large Expressions

Invent user interface (or perhaps language-level) ways to browse large expressions. Consider having automatic elision of deeper parts of the expression, openable on demand. Try to create the most cognitively useful outline of the expression. Also consider rendering different parts at different sizes. Make everything work for varied expressions, from arrays to algebraic formulas, to expressions containing elements such as images.

Categories:

Implement Special Cellular Automata

Implement the analog of mathematical special functions for special cellular automata, and special classes of cellular automata. Go through the literature to find names for special rules and classes.

Categories:

Automatic Generation of Representational Infographics

Hand-drawn infographics quite often contain representational elements: pictures of certain number of idealized people to represent population data, etc. Develop automated ways to generate such images for common types of data.

Categories:

Implement International & Historical Numeral Systems

Roman numerals are only the beginning of the varied numeral systems in use now and in the past around the world. Use Unicode glyphs to implement the analog of ToRomanNumeral and FromRomanNumeral for as many numeral systems as possible.

Categories:

Make an Art Book of NKS Images

Create an attractive art book from large numbers of NKS images, whether cellular automata or other types of systems. Expect to show some sequences of rules and result to illustrate the scope of what's found in the computational universe. Also expect to show some "museum quality specimens' found from large-scale searches. Figure out how to publish the book, perhaps with crowdfunding.

Categories:

Extend Links Between Wolfram Language and Python

Build a maximally convenient link between the Wolfram Language and Python, using WSTP. Make it easy to call python functions from WL, and to call WL from Python. Typical difficulties will include data structure conversion, program initiation, capability discovery, etc.

Categories:

Axiomatic Specification for Wolfram Language

Write a formal description of the core Wolfram Language in the style used by pure mathematicians. Consider using methods such as denotational semantics. Figure out axiomatizable mathematical structures that represent core Wolfram Language constructs.

Categories:

Make a Function-a-Day Calendar

Create an attractive calendar (online or printed) that highlights various Wolfram Language functions. Make it something that people can look at each day to learn Wolfram Language capabilities and concepts.

Categories:

Make a Programming Picture Book

Create a book suitable for kids that illustrates programming with the Wolfram Language using pictures. Perhaps use one program per page (or per spread) and have tiny programs with good visual output.

Categories:

"First Ten Wolfram Language Functions'

Investigate different ways to start teaching Wolfram Language to children and people with various backgrounds. Invent sequences of possible functions to show first, and how to show them. Develop interesting exercises that can be done around small numbers of Wolfram Language functions.

Categories:

Parametrization of Leaf Shapes

Use dimension reduction or other techniques to find a parametrization of shapes of leaves for different kinds of plants. Look at the geographic distribution of plants in different parts of parameter space. Use the parametrization to evaluate models for leaf shapes. Possibly use the model for leaf identification.

Categories:

Sky Brightness

Work out a practical approximation to predict the brightness of the sky, particularly after sunset or before sunrise, depending on local weather, etc. There are both terrestrial and extraterrestrial complications in working this out. Try to get an approximation that's useful in practice.

Categories:

Search for Regularities in Digits etc. of \[Pi], etc.

Mount a systematic search for regularities in the digit sequences of "mathematically constructed' numbers, such as \[Pi] and square roots of integers. Look at digits in different bases, and not only use statistical methods but also try applying broad ranges of computations (e.g. cellular automata and machine learning) and looking for untypical output. Perhaps look beyond digit sequences, to continued fractions, iterated roots, and other systematic digit-like representations of numbers. Also consider doing searching across large collections of numbers produced with a variety of mathematical functions. One does not expect that there will be simple regularities, but this is far from being proved, and eventually something like the digits of \[Pi] have the "regularity' that they are generated from formulas for \[Pi].

Categories:

Correlating Concepts with Math Formulas

If a formula contains \[Pi], does that mean it has something to do with circles? Given particular mathematical functions or constants, find what words typically occur in association with them in research articles, say on Arxiv.

Categories:

Classifier for Animal Tracks

Use machine learning to create a classifier that can tell what kind of animal made a particular track in a picture.

Categories:

Plots on Lattices

Develop a generalization of ArrayPlot for non-square lattices. The function should take an array of values (possibly with some raggedness) and plot these values in the "cells' of the lattice. Probably makes sense to start with a hexagonal lattice, which can be thought of as values laid out in a "bricklaying' fashion.

Categories:

Unroll & Analyze Mollusc Shell Patterns

Many molluscs have pigmentation patterns on their shells that look a lot like cellular automaton patterns. Figure out how to geometrically "unroll' the patterns off the shells, then analyze their forms.

Categories:

Fit Cellular Automata to Patterns

Given a pattern, work out how to find the cellular automaton rule that reproduces it, or best approximates it. Work out tradeoffs between quality of fit, and complexity of (probabilistic) cellular automaton rules. This is a system with an almost infinite number of degrees of freedom, some simple statistics criteria are unlikely to apply.

Categories:

Implement a Function for Probabilistic Cellular Automata

Generalize the CellularAutomaton function to handle probabilistic cellular automata, where there are probabilities for different outcomes at each step. Then consider generalizing this to Turing machines, etc.

Categories:

Time-Dependent Graph Layout

Develop an algorithm for laying out a time sequence of graphs, in which nodes that change move around as little as possible. Probably look at the whole time sequence and do a global optimization. Try to avoid the "popping' effect that one sees in clusters of soap bubbles.

Categories:

Visualize Email Conversations

Write code to process MBOX files and infer the graph of the threading of email conversations. Expect that some of the code will be precise, and determined from email headers. Some will require heuristics based on email content. Work out how to create useful visualizations of email conversations.

Categories:

Is a Piece of Text a Question?

Create a classifier to determine if a piece of text is a question. Look at both short pieces of text (e.g. SMS texts), and longer pieces (e.g. emails). Determine for an email whether an answer is sought. Perhaps train the classifier using email corpuses, identifying emails that did and did not get answers.

Categories:

Time-Dependent Word Clouds

Develop an algorithm for laying out a time sequence of word clouds, in which motion is as smooth as possible. Probably look at the whole time sequence and do a global optimization. Try to make words enlarge and contract "in place' as much as possible.

Categories:

Data Array Query Optimization

Figure out a way to do the analog of indexing an array of numerical data, so that most easy-to-state questions about it are easy to answer. For example, it's easy to ask for the "monthly maximum', but much harder to ask for a maximum that occurs from a specific time to another. Use facts like the associativity of Max to find an optimal preprocessing operation that can be done on typical data.

Categories:

Text Segmentation for Specific Document Types

Develop good ways to break up specific types of documents into their components. An example might be to break up poetry into lines, verses, etc. Or to break up legal documents according to their paragraphs, and according to their captioning. Or to separate out formulas, theorems, etc. in technical documents (e.g. as found in arxiv.org). Expect to use machine learning methods with large corpuses to get good performance.

Categories:

Thumbnail Visualization of Documents

Find ways to create thumbnail visualizations of documents, that illustrate the overall structure of the document. Test what you have on many kind of documents. Expect that different layout rules will have to be used for different types and sizes of documents. In some cases elements like overlayed word clouds may be useful.

Categories:

Database of Interesting Integers

Create a public web "Integer Base' that gives integers with "interesting' properties. These could be integers that are generated by simple formulas/programs (e.g. powers of 2, numbers that are sums of cubes), or have notable properties (e.g. primes, palindromic digit sequences), or are mixtures (e.g. Fermat primes). Also potentially include exact integers that arise from other computations or phenomena (e.g. number of n-ominoes, coefficients in Feynman diagrams, etc.). Consider both automatic generation of integers, and web searches for integers. We started a version of IntegerBase some years ago.

Categories:

Classifier for Galaxy Types

Make a classifier (probably using Classify) that can distinguish different types of galaxies (spirals, barred spirals, irregulars, etc.) from photographs. Use DimensionReduce etc. to see if there are other categories that can be identified.

Categories:

Classifier for Cloud Types

Make a classifier (probably using Classify) that can distinguish different types of clouds (cumulus, cirrus, etc.) from photographs. Use DimensionReduce etc. to see if there are other categories that can be identified.

Categories:

Make "Tweet-a-Program' for Other Services

Create practical bots to implement the analog of tweet-a-program for other microblogging, messaging and social media sites. Experiments will probably not require making special arrangements with site owners, but production-grade deployment will.

Categories:

Read Analog Clocks and Gauges from an Image

Use machine learning to create a predictor function that reliably reads clocks and gauges from an image. Consider first the case of circular gauges with a single hand. Try to do OCR to read numbers from the gauge. Also do the case of multiple hands. Also consider linear and other gauges.

Categories:

Classifier for Human Motions

Make a classifier for different human motions (e.g. walking, running, rowing, etc.) based on accelerometer data.

Categories:

Emotion Space Classifier

Extend sentiment analysis to map text (and potentially also facial expressions and voice timbre) into emotion spaces.

Categories:

Color Classifier

Create a classifier for named colors. Develop a hierarchy (similar to SpecificityGoal) for how specifically a color should be named.

Categories:

Machine Learning for WolframTones

Improve the WolframTones algorithm and website by using machine learning to classify potential music compositions. Expect both to be able to tell how people will rate the composition, and what genre it is considered to be in. Perhaps also figure out the optimal speed to play it at.

Categories:

Sentiment Analysis for Images

Classify images in terms of sentiment, or emotional content. Use a corpus of images that have associated words (e.g. images included in posts, or possibly things like movie posters). Look both for coarse signals (like color) and finer signals associated with image details. Consider using this to analyze or create designs with particular emotional content.

Categories:

CellularAutomaton in Arbitrary Regions

Generalize the CellularAutomaton function to allow it to support 2D, 3D etc. cellular automata in arbitrary geometrical regions. Use Region specifications analogous to those used in the Wolfram Language for partial differential equations.

Categories:

Invent a Taxonomy of Software Diseases

In medicine, there's an extensive taxonomy (and classification system) for diseases. What is the analog for software systems? One could investigate this either for server systems, or for bugs in (potentially quite small) programs. Consider what kind of monitoring is useful for "software diagnosis'.

Categories:

Random Mutation of Wolfram Language Programs

Take a (probably small) Wolfram Language program, and modify it in some way. See what happens. Potentially use this as a way to evolve such programs, and explore variations. Also potentially use it as a way to analyze the types of bugs that can occur, and as a way to test the basic behavior of the Wolfram Engine.

Categories:

Implement Genetic Programming in Wolfram Language

Make a consistently designed system for doing genetic programming in the Wolfram Language. Set it up so that it interacts smoothly with other Wolfram Language frameworks. Find some good classes of programs on which to do genetic programming.

Categories:

Analyze Machine Code Programs

Use the Wolfram Language to develop tools for analyzing machine code programs, for example comparing the results from different compiler optimizers. Consider using the results as an analog for genomics. Potentially use machine learning to try to deduce larger-scale structure and function from machine code.

Categories:

Math OCR

Use modern machine learning techniques to build a system to do OCR for printed math. Handle not only math that is written like text on a single line, but also exponents, built-up fractions, etc.

Categories:

Extract Data from Plots

Build a system that can take a plot in vector graphics form (say from a PDF) and extract data from it. Try to return a list of data points, or a fitted curve, etc. Consider also doing this for bitmap images of plots. Expect difficulties from plot lines that cross, etc.

Categories:

Empirical Linguistics of Research-Level Math

Study the empirical linguistics of "natural math', as it appears for example in Arxiv. Look at the use of particular notations, and see how many distinct meanings are assigned to a given notation. See what the most frequent notations are, etc.

Categories:

Cellular Automaton Pattern Designer

Create a website where one can upload geometry (say the shape of a room), and then automatically generate aesthetically pleasing patterns using cellular automaton evolution within the specified geometry.

Categories:

Automatic Color Scheme Generation

What colors go together? Use theories of color harmony, together with empirical and machine-learned data, e.g. from the web (or from data on artworks and logos), to find ways to generate collections of colors that "go together'. Potentially have different schemes for different cultures or parts of the world.

Categories:

Automated Layout

Given a collection of items with specified shapes, and potentially some partially specified ordering, find ways to automatically lay them out aesthetically in e.g. a rectangle of a certain size and shape (e.g. a web or mobile window). In some cases (e.g. images) allow resizing; in others (e.g. text), do not. Expect to allow e.g. automatic determination of whether in an array of objects they should be read top-to-bottom or left-to-right. Consider first the simpler case of optimally laying out rectangles.

Categories:

Collect Word Lists in Uncommon Languages

The Wolfram Knowledgebase already has extensive word lists and translation tables for more than 200 languages. Extend this to cover less common languages, by going through paper and other dictionaries. Expect issues with inflections, barely-written languages, etc.

Categories:

Set up a Crowdcomputing Framework for Cellular Automata

Use services like Charity Engine and BOINC to set up distributed searches for interesting features of cellular automata, e.g. other persistent structures for R110.

Categories:

Where Is Downtown?

Given a street map of a city, figure out heuristics for which part of the city will be considered "downtown'.

Categories:

Code Decoration & Annotation

Find ways to extend syntax coloring and indicate the meaning of Wolfram Language code. Imagine finding better ways to indicate the extent of function arguments, the scoping of variables etc.

Categories:

Cognitive Map from Wikipedia

Use the Wikipedia linking graph to generate a cognitive map of concepts. Understand prerequisites for concepts, etc.

Categories:

Find Changes ("Diffs') Between Expressions

For text it's comparatively straightforward to find and indicate minimal changes. Figure out how to do this for general symbolic expressions. Figure out which changes can automatically be merged in a 3-way merge process.

Categories:

Minimum Change Path from One Expression to Another

Given two Wolfram Language expressions, work out a minimal sequence of transformations that get from one to another. These will be edits on their trees, perhaps insertions, deletions and substitutions. The goal is to have a good way to do "diffs' between expressions.

Categories:

Add @, //, @*, /* Automatically for Code Readability

There are many ways to write f[g[x]]: f@g@x, x//f//g, (f@*g)[x] etc. Figure out an algorithm that for any given piece of Wolfram Language code determines which should be used to make the code as readable as possible. It's claimed that human languages order words to achieve dependency length minimization. Make an algorithm to do this systematically for Wolfram Language code.

Categories:

Convert Images to Vector Graphics

Write a function to find an approximation to images as vector graphics (effectively: "convert GIF to SVG'). Flags may be a helpful example to consider. There will be a tradeoff between "fitting' the image, and having a simple "model' in terms of vector graphics.

Categories:

Generate Art Using Neural Networks

Create artistic images that, for example, combine many pictures from training sets given to neural networks. Consider intercepting intermediate layers in neural networks, driving networks backwards, and doing other transformations to generate images that in effect come from the "mind' of the neural network.

Categories:

Surface Mapping Imagery for Solar System Bodies

The Wolfram Language has built-in imagery for the moon and Mars. Extend this to all solid bodies where there is data. This requires mapping the data onto appropriate coordinate systems, etc.

Categories: