Skip to content

Commit 07b3f63

Browse files
authored
Add herb proposal to fork + add it to project list (#2250)
1 parent 8cd01f2 commit 07b3f63

File tree

2 files changed

+104
-0
lines changed

2 files changed

+104
-0
lines changed

jsoc/gsoc/herb.md

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# Herb.jl Projects
2+
3+
![Herb Logo](https://raw.githubusercontent.com/Herb-AI/Herb.jl/refs/heads/documentation/docs/src/assets/herb.png)
4+
5+
Wouldn’t it be great if Julia would program itself?
6+
Tell it what you want, Julia magic happens, and you get your program directly.
7+
We introduce Herb.jl, a library written in Julia that gets us a step
8+
closer to our big goal.
9+
[Herb.jl](https://herb-ai.github.io/) is a library for program synthesis: The task of automatically generating programs from a given specification.
10+
Here, “a program” could be anything, from an actual Python program over moves in chess to the synthesis of biochemical molecules.
11+
There are numerous works on program synthesis, all speaking a different language in code and terminology.
12+
We want to make developing, comparing, and applying ideas in program synthesis easier.
13+
14+
Herb’s main goal is, therefore, two-fold.
15+
First, we aim to provide a toolbox for 1. developing new program synthesizers or 2. easily re-implementing existing ones.
16+
Second, we aim to unify many different flavors of program synthesis under a joint framework, making program synthesizers easy to use on new problems.
17+
18+
If you have any questions or ideas, please [contact Tilman](mailto:[email protected]).
19+
20+
## Project 1: Optimizations
21+
**Difficulty:** Medium
22+
23+
**Estimated Duration:** 350 hours
24+
25+
**Project Overview:**
26+
`Herb.jl` has an outstanding performance in enumerating programs.
27+
Every generated program also needs to be evaluated, making evaluation the main bottleneck in finding a suitable program.
28+
We want to improve this aspect by leveraging various well-engineered projects from the Julia community.
29+
30+
First, we have so far lessened the burden of evaluation by developing custom interpreters.
31+
This is time-consuming and error-prone, so we would like to avoid it.
32+
The core challenge here is that the explore programs don't have a fixed structure and are constructed during synthesis; therefore, they cannot be compiled ahead of time.
33+
The Julia package `DynamicExpressions.jl` is developed to overcome this exact problem, allowing for "ridiculously fast symbolic expressions".
34+
We would like to integrate `DynamicExpressions.jl` into our ecosystem and get a faster evaluation of Julia programs *for free*.
35+
36+
37+
Second, Herb is limited to Julia so far.
38+
Our goal is, however, to make Herb a *language agnostic* program synthesis library.
39+
We would like to extend Herb with connections to other interpreters for common languages like Python, Java, Prolog, et cetera.
40+
This would make it possible for Herb users to use any programming language that fits their needs.
41+
42+
Third, another crucial aspect of every program synthesis engine is the construction of candidate programs.
43+
State-of-the-art program synthesis tools, like CVC5, have invested significant time into optimizing the program construction step, resulting in significantly improved performance.
44+
We want to map these ideas into Herb.
45+
46+
**Minimum goal:**
47+
Connect `DynamicExpressions.jl` to `Herb.jl`.
48+
This involves implementing the expression interface from `DynamicExpressions.jl` for `Herb.jl`’s expression tree formulation.
49+
50+
**Extended goal:**
51+
Add support for at least one non-Julia program interpreter or add tricks from CVC5 to Herb.
52+
53+
**Recommended skills:**
54+
- basic knowledge of data structures
55+
- interest in program optimization
56+
- the eagerness to learn to write and optimize code
57+
58+
**Mentors:** Reuben Gardos-Reid, Tilman Hinnerichs and Sebastijan Dumancic
59+
60+
**Some literature:**
61+
- The Program Synthesis book (by Gulwani et al., [link](https://www.microsoft.com/en-us/research/wp-content/uploads/2017/10/program_synthesis_now.pdf)
62+
- CVC4SY paper: [link](https://link.springer.com/chapter/10.1007/978-3-030-25543-5_5)
63+
- `DynamicExpression.jl`: [link](https://ai.damtp.cam.ac.uk/dynamicexpressions/dev/)
64+
- Our website: [link](https://herb-ai.github.io/)
65+
66+
## Project 2: HerbLearn Integration
67+
**Difficulty:** Medium
68+
69+
**Estimated Duration:** 350h
70+
71+
**Problem description:**
72+
Neurally-guided program synthesizers form a popular class of synthesizers, which learn a heuristic to guide program generation.
73+
Following Herb's paradigm to unify the field, we want to reach the same goal for this sub-field.
74+
Specifically, learning guiding policies comprise the same building blocks of 1. program sampling, 2. program-data-encoding, 3. policy learning with respect to a loss function, and 4. deploying that strategy.
75+
76+
In this project, we want to implement these building blocks to allow researchers to reuse the modules directly.
77+
To guide this project, we implemented a template structure to follow and extend.
78+
79+
**Minimum goal:**
80+
Implement a naive but modular strategy for all four steps.
81+
To allow for easy integration of with existing models, we aim to implement the machine learning part using Flux.jl.
82+
83+
**Extended goal:**
84+
The extended goal is to deepen one or more of these modules that fit the student's interests.
85+
The literature provides numerous ideas on how to make all four steps smarter individually.
86+
Concretely, this could include
87+
- smarter program-sampling,
88+
- different program encoding strategies from the literature,
89+
- implementing and applying different loss functions, and
90+
- incorporating this with different search procedures.
91+
92+
**Recommended skills:**
93+
- Basic knowledge of machine learning principles (neural networks, model training, ...)
94+
- Preferably prior experiences with Flux.jl
95+
96+
**Mentors:** Tilman Hinnerichs, Reuben Gardos-Reid and Sebastijan Dumancic
97+
98+
**Some literature:**
99+
- The Program Synthesis book (by Gulwani et al., [link](https://www.microsoft.com/en-us/research/wp-content/uploads/2017/10/program_synthesis_now.pdf)
100+
- Our website: [https://herb-ai.github.io/](https://herb-ai.github.io/)
101+
- BUSTLE: Bottom-up Program Synthesis through learning-guided exploration: [link](https://arxiv.org/pdf/2007.14381)
102+
- DeepCoder [link](https://arxiv.org/pdf/1611.01989)
103+
- DreamCoder [link](https://dl.acm.org/doi/pdf/10.1145/3453483.3454080)

jsoc/projects.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ We have our project ideas organized below roughly by domain but you can also see
1111
* [Ferrite FEM](/jsoc/gsoc/ferrite-fem/) - A modern finite element toolbox in Julia.
1212
* [Gabs](/jsoc/gsoc/gabs/) - A Gaussian quantum information simulator
1313
* [Graph neural networks](/jsoc/gsoc/gnn/) - Deep learning on graphs with GraphNeuralNetworks.jl.
14+
* [Herb](/jsoc/gsoc/herb/) - Let programs write themselves with program synthesis
1415
* [High Performance and Parallel Computing](/jsoc/gsoc/hpc/) – write code that runs on lots of machines, goes really fast, processes lots of data, or all three.
1516
* [GPU Programming](/jsoc/gsoc/gpu/) - Projects that involve the Julia GPU stack
1617
* [JuliaDynamics](/jsoc/gsoc/juliadynamics/) - Dynamical systems, complex systems and nonlinear dynamics in Julia

0 commit comments

Comments
 (0)