fundamentalI am going to concentrate latest development of fundamental from the github repository here
I'm back on active development so expect tidy ups.
This barely works beautifully but is my most original program to date. I've recently found out that it uses a technique called Symbolic Regression.
I read about genetic programming before inventing fundamental and I'm sure i got inspired by wondering how data mining works. My program is rough but almost identical in functionality to Eureqa if I'm doing a bad job at explaining how fundamental works please watch the following beautiful videos of Eureqa. A Isralei professors Eureqa moment. Tony also has some code written but his open source eureqa seems too simple to be as mature as fundamental, it is designed for paralell processing something yet to be done in fundamental. Tony also implemented PGE but in python which means it would be slow. One last link for reference Quora thread for alternatives to Eureqa
Fundamental is a toolbox for finding relationships between
It could have found the following formulas which started quantum
physics had it been around in the 1860's & 1890's.
It could have found Planck's Law if on a supercomputer or used SETI at home's computer network.
It could with some improvements in pattern matching have found Mendeleev's periodic table of elements or did some of Murray Gell Mann's work for which he got a Nobel Prize in 1969 for developing the Standard Model in Physics.
To date I've had little luck in coming up with a fast formula for factorising large large numbers but God loves a tryer.
In short it's for hacking the laws of nature & mathematics
it is in some ways related to curve fitting ( or more percisely a program for finding integer relations ) where you have some data & are looking for a formula to describe it, curve fitting can usually be done by a human, fundamental is more a brute force method where you tell fundamental what operators are allowed + - x / bitwise and or etc. The constants, e PI, it starts with the most simple sums & progresses towards the more complex.
My original motivation for writing it was while reading
Max Borns book on the theory or relativity I fell over
a fantastic insight one of Maxwells equations.
It uses reverse polish notation (RPN) explained
The beauty of reverse polish notation is that there
is no need for brackets
2+3x2=8 or 10 depending on whether you interpret
the sum as
(2+3)x2 or 2+(3x2) reverse polish notation gets
us out of this bind because the order of the numbers
& operators gaurantees a unique & unambiguous algorithmic
way to do the sum. It also makes it very easy to sequence
or "count" through legal sums algorithmically & be gauranteed
that each sum is unique.
This is the beautiful idea which made funamental possible. The only conditions you need to make in RPN to do any equation is that there needs to be one less binary operator than numbers in the equation. The first binary must have at least 2 numbers to it's left A unary operatior has to have at least 1 number to its left
Also the equations generated using RPN are easily countable. e.g. it is easily algorithmically possible to write a program for every possible RPN equation with constraints. ( an example of constraints are only numbers between 0 and 5 are allowed & only the + & * operators are allowed * being the multiplication operator.
One of the thing I've had no success with fundamental is finding a formula for the nth prime, primality testing & pulling out the smallest or largest factor from a very big number.
Fundamental is a step towards automatic algorithm generation. I am very proud of Fundamental & have great hopes for it, it's by far my best idea to date,
It's open source & I hope someday it will help someone solve significant problems, if it does please give me some credit for helping you on your way. It may be of use in Mathematics, Chemistry, Physics & Economics for Modeling data without a known formula. The program could be enhanced to do automatic algorithm generation using an open source forth language engine like Paflof or else Java bytecode. however it will be about 20 years before computation speeds will make this possible. Here is a description of what it how it works & what it currently does.
Fundamental internally uses reverse polish notation algorithm to search
a solution space for a formula given test data,
it can search for formulas for
sequences of numbers as well as relationships between constants.
To date it was successfully able to find the following by a brute force
solution space search for..
The Miraculous Bailey-Borwein-Plouffe Pi Algorithm Borweins Algorithm was found by a similar ( but fundamentally much different ) program.
ExampleWhen set up properly you can enter a sequence like
5,8,11,14,17 as follows
fundamental -h 5 -m 5 -i 5 5 8 11 14 17
Setting -h to 5 sets the maximum integer in the solution space to 5.
Setting -m to 5 sets the stack depth or the maximum complexity of the sum to 5 term.
Setting -i to 5 tells fundamental that there are 5 terms following which contain the sequence.
The output of the testrun is:
5 3 n * +
(5 + (3 * n))
5 -3 -n * +
(5 + (-3 * -n))
So the sequence formula is y=f(n)=5+(3 x n), n being an integer.
Accolades & Delusions of Grandeur ;)
Pio a Friend and Fundamental
Pio is a bright guy, speaks 5 languages, Degree in numerical computation & mathematics currently doing a hdip in cloud computing. I've been 6 years trying to convince Pio that Fundamental was more than curve fitting. After reading Carsten Otte's compliment he decided he'd better investigate himself. Now he's spouting things like GO FOR IT!!, Smart Cookie D.J., uv cracked it this time D.J. Google can't help but buy it. Now he is in disbelief that nothing like it has ever been done before. Stuart Russell & Peter Norvig in Artificial Intelligence a modern approach hint that it can be done but is totally impractical, my program proves otherwise. Pio has agreed to write a fisher price web interface for fundamental & explore data mining possibilities which he is learning in the cloud computing course.... Thanks Pio.
A colleage at Pace in West Yorkshire who knew Richard Feynman personally said Fundamental was bloody useful.
A colleague at IBM Boeblingen Carsten Otte had this to say...
Fabrice Bellard didn't directly sing it's praises but here is what he'd to say Someone told me about a similar project some time ago and I find the idea interesting. Of course the problem is to limit the exponential growth of the search space. I guess that an exhaustive search cannot lead to very interesting discoveries because the programs are too small. But there may be ways to explore a subspace of the "interesting" possible programs with a well chosen language and search algorithm.
I guess that you already know the PSLQ algorithm ( very intersting pdf here on the topic )used to find the BBP Pi formula you mention. It just finds a linear combination with small integer coefficients of constants giving a zero result. It is very limited but already quite effective to find interesting relations.
Most importantly is only 2k lines of code.
This is not curve fitting as defined by Wikipedia, curve fitting can be done using pen & paper & it gauranteed to produce an answer for the class of problems it solves, fundamental typically does billions of calculations when used for curve fitting without gaurantee of an answer & can handle classes of problems not handleable by traditional curve fitting or Mathematica.
Yes the code is buggy if you aren't acquainted with the gdb debugger now is the time to get familiar, the code compiles using gcc & runs on Linux & possibly Cygwin for Windows.
The section of the code enabled loops ( e.g. needed to find the Taylor series expansion formula for e(x) ) by the MAX_NUM_LOOPVARS is hopelessly broken, don't use it & #ifdef it out, I'm currently rewriting fundamental so that it can develop code automatically for things like bubblesorts automatically rather than just the rather limited loop.
Fundamental now contains a Fundamental Overview.doc readme explaining most of the internals of fundamental, please feel welcome to send questions to me at email@example.com and I will add detail to the document explaining your concern.
TravelsmartA carpool website I developed finished in 2009 to version 1.0 available here on github.
A nice young apprentice named Chuk from the U.S. is helping me maintain it.
Other open source carpool websites which could be merged with travelsmart are here.
PCB-1.6.3A pcb-1.6.3 patch is finally available here.
The patch has been tested against pcb-1.6.3 from Suse 6.3 only.
ImprovementsThe pcb-1.6.3 is finally suitable for SMT development.
A few new package definitions have been added including Common SMT components,PCI Board Templates, XCS40 FPGA, Improvments to QFP definitions.
Made Soldermask Adjustable it was set to 15 Mils this was impractical for SMT components as the primary use of the soldermask is to prevent unwanted soldering of tracks & pads together & as the space between components on a PCI board is typically 4 mils this is too much. This meant some modification to the Gerber & Postscript output.
Made gridding adjustable to 1 mil increments ( 1 thousand'th of an inch ), this is required for SMT development.
Fixed one crashbug in insert.c owing to missing protype.
I am not the maintainer of this package so don't email me to complain, However if I will give advise by email if the problem can be resolved quickly.
Read README_FILES/CHANGES & README_FILES/DJBARROW_HINTS.TXT for more info.
PCI pin definitions were added for all variations of PCI, however, minor improvments to pci.list & pci.inc still need to be done to deal with 3.3V & 64 bit PCI.
A FPGA Based PCI BoardThe pci board designed with pcb-1.6.3 & my enhancements is available here. This project is currently around halfway to completion it uasesXilinx XCS40 FPGA ( Field programmable gate array, essentially reconfigurable digital hardware ) & An Atmel FPGA configuration Memory on the board so it can be programmed to accelerate computation tasks or emulate various pieces of hardware. I gave up on the project as I was unable to solder the 208 pin Xilinx chip as the pitch between the pins is 0.75mm. pcbpool are excellent at building prototype pcbs you are strongly advised to use them. Contact me at my email address firstname.lastname@example.org if you want to take this project further, the more intrest shown the faster it goes up on my website. I am hoping the project will ultimately go to opencores.
BoozyOh yes Boozy download here.
A peice of personal DOS history from 1992, it's a SuperMario style alcohol educational game ( which is so enjoyable it's an encouragement to sin ) about the adventures of a drunken horse Boozy and Wild Bill Hiccup which runs some paralells with my own existance.
It runs on DosBox DOS Emulator download here.
A low quality youtube video of the game is here.
To installUse pkzip,stuffit expander,winzip or unzip expand the boozy.zip file in a directory specially created for boozy and take note where it is.
In dosbox type
MOUNT [Drive-Letter] [Local-Directory containing boozy.exe]
More info on the Dosbox mount command available here.
To run on your android phoneDownload DosBox & AndroZip from google play.
Download Boozy using the link above from your Chrome browser on your phone.
boozy.zip typically installs in the Downloads directory
In Androzip create a boozy directory
extract boozy.zip there.
From DosBox type cd .\Downloads\boozy typically works if it doesn't
study the directory structure on your phone and play with the mount command described in the link above
DosBox keyboard and joystick emulation fiddy play with it.
Try to press the Escape key on DosBox use cursor keys on emulated keyboard
to switch on Joystick support in boozy
switch on Joystick emulation in DosBox and play the game.
Perfect PitchA Qt portaudio based mp3 to sheet music converter available here picture here the code is not clean and full of half cooked experiments,it works for guitar but not as well for songs with drums & multiple instruments,
Uses a original technique called resonance analysis which is more like how the human ear works than fourier analysis.
70% code complete.
In 2009 when this was originally coded it was compeditive but now there are better open source projects like sonic-visualiser and resonance analysis is not as good as the constant q transform.
Other projects I'm considering open sourcing
VoicetaggerAn android app which can recognise voice recordings so blind
people can make phone calls without a 3g connection for voice recognition.
Current state... voice tagger is 90% accurate with 5 voice tags
UI done but voice recognition needs a major improvement
I'll open source these when I get time.
LicenceAll the software unless otherwise stated is under GPL 2.1.
But it would be great if you pay me what you think the software is worth, or better yet give me a job.
To make contributions for future development of the software
here are my bank details
Bank Address: BOI Blackpool,Cork,Ireland.
Account Name: Denis Joseph Barrow.
Sort Code: 902688
Account No: 48030751
IBAN: IE82 BOFI 9026 8848 0307 51