Can A* be used to generate algorithm sourcecode?
I thought of an idea to use a* algorithm to "walk" toward a solution that solves a programming problem. Each neighbour can be a weighted list of programming tasks such as if statement, for each, assignment, recursive call. How do you map example data structures transformations to code that fulfils the changes to the data structure? You need a cost function that decreases when the output gets nearer to the solution. What does the cost function for code solving a problem look similar to?
If you project the desired code variables onto a multidimensional space and with a time dimension, where each variable has a assignment algebra you can imagine the input code causing movements to the output algebra for each variable
How do you measure that a solution gets nearer to the solution when you haven't planned what you could do
It should be a multidimensional walk toward a solution that solves the programming problem.
I want to generate the btree algorithm and other algorithms with this approach
I should provide example inputs to output mappings and join the Data between the input and output and try recalculate the processing steps to go from one to the other but I am having problems deciding what the cost function looks like.
Man kilo mintis. Jei įsivaizduojate išvesties sugeneruotą kodą kaip superrinkinį, tada kiekviena kodo eilutė yra išvesties kodo poaibio dalis.
Taigi jums reikia tam tikro būdo generuoti išvesties rinkinio poaibius.
Kiekvienas rinkinys yra sutvarkytas instrukcijų rinkinys, generuojantis atsakymą. Noriu išvengti žiaurios jėgos paieškos, kiekvienas bandymas sugeneruoti kodo eilutę turėtų priartėti prie išvesties.
Manau, kad turime pateikti euristiką apie tai, ką kodas turėtų daryti.
I had a thought. If you imagine the output generated code as a superset then every line of code is part of a subset of the output code.
So you need some way of generating subsets of the output set.
Each set is an ordered set of instructions that generate the answer. I want to avoid brute force search, every attempt of generating a line of code should get nearer to the output.
I think we have to provide heuristics of approximately what the code should do.
Galime nuskaityti išvesties struktūrą ir generuoti kiekvieno duomenų ryšio faktus.
Galime palyginti, kur buvo perkelti duomenys, remdamiesi šaltinio duomenų perėjimu į paskirties duomenis. Sugeneruokite pleistrą.
Tai turi žymeklį į šį objektą į šią duomenų dalį.
Įvesties duomenys
1 mazgas yra šakninis
Mazgas1 vaikų mazgas2
Mazgas1 vaikų mazgas3
1 pavyzdys
Įdėkite mazgo mazgą4
Norimi išvesties duomenys
1 mazgas yra šakninis
Mazgas1 vaikų mazgas2
Mazgas1 vaikų mazgas3
Mazgas1 vaikų mazgas4
Pleistras
4 mazgas įterptas į mazgo 1 vaikus
Kodėl mazgas1? Teorizuoti.
1 mazgas yra šakninis
Vykdykite operatorius nuo node1, node4
Len(mazgas1.vaikai) <= Didžiausias dydis
2 pavyzdys
Mazgo padalijimas – įterpkite mazgą5
Įvesties duomenys
Šakninis mazgas yra mazgas1
Mazgas1 vaikų mazgas2
Mazgas1 vaikų mazgas3
Mazgas1 vaikų mazgas4
Norimi tiksliniai duomenys
Šakninis mazgas yra node3
Node3 vaikų mazgas1
Node3 vaikų mazgas2
Node3 vaikų mazgas4
Mazgas4 vaikai mazgas5
Tai reiškia mazgo padalijimą, nes kiekviename mazge gali būti tik 3 elementai.
Kaip išmokti taisyklę, kad mazgas gali turėti tik 3 mazgus?
Į faktų sistemą įterpkite konstantą
Maksimalus dydis yra 3 Įdėkite operatorius į sistemą Len(mazgas.vaikai) Maksimalus dydis == Lygus >= Didesnis nei arba lygus <= Mažiau nei arba lygus > Didesnis nei < Mažiau nei
Vykdykite kiekvieną kiekvieno operatoriaus permutaciją, kad nuspręstumėte atlikti pataisos komandos veiksmus.
Pleistro instrukcijos 1 mazgas nebėra šakninis mazgas Node3 yra šakninis mazgas Node2 vaikai yra mazgas1 Pašalinkite 4 mazgą iš 1 mazgo Kodėl mazgas4 buvo pašalintas iš mazgo1 Kodėl mazgas4 buvo pridėtas prie mazgo3
Teorizuoti. Koks faktas buvo tiesa. Palyginkite 1 mazgo savybes su 4 mazgu Pagaliau.... Len(mazgas1.vaikai) == Didžiausias dydis Pridėkite mazgą4 prie mazgo3 Kodėl? Teorizuoti. Koks faktas yra tiesa 4 mazgas >= 3 mazgas tiesa Ar >= tinka visiems pavyzdžiams? Arba tai sudėtingiau Sukimo operacija. Vienas leidžiasi žemyn, vienas kyla aukštyn ir leidžiasi žemyn, o vienas leidžiasi žemyn. Šaknis = A 1 mazgas yra A Nauja šaknis = B
Sukimo operacija yra - Šaknis = B B.vaikai = A
Ir pažiūrėkite, kur juda duomenys. Turime sugeneruoti veiksmus, kurie deterministiškai sukuria tą pačią struktūrą su tais pačiais duomenimis tinkamose vietose.
Turi būti modeliai. Taigi paprastai objekte yra savybė, su kuria lyginamas bmedžio padalijimas.
Taigi yra daugiausia vienas laukas arba palyginimas, kuris nustato objekto paskirties vietą btree.
Maniau, kad galime atsitiktinai generuoti sąlygų sakinius kiekvienam įvesties objektui.
Eikite į pleistrą ir įdėkite sąlyginius objektus.
Tai grafiko transformacijos problema
We can scan the output structure and generate facts of each relationship of data.
We can compare where the data moved through based on a path traversal of source data to destination data. Generate a patch.
This has a pointer to this object to this piece of data.
Input data
Node1 is root
Node1 children node2
Node1 children node3
Example 1
Insert a node node4
Desired Output data
Node1 is root
Node1 children node2
Node1 children node3
Node1 children node4
Patch
Node4 inserted into node1 children
Why node1? Theorise.
Node1 is root
Run operators against node1, node4
Len(node1.children) <= Maxsize
Example 2
Node split - insert node5
Input data
Root node is node1
Node1 children node2
Node1 children node3
Node1 children node4
Desired target data
Root node is node3
Node3 children node1
Node3 children node2
Node3 children node4
Node4 children node5
This represents a node split as each node can only have 3 items inside it.
How do we learn the rule that a node can only have 3 nodes?
Insert a constant into the system of facts
MaxSize is 3 Insert operators in system Len(node.children) MaxSize == Equal to
Run every permutation of each operator to decide to do patch command steps.
Patch instructions Node1 is no longer root node Node3 is root node Node2 children is node1 Remove node4 from node1 Why was node4 removed from node1 Why was node4 added to node3
Theorise. What fact was true. Compare node1 properties to node4 Eventually.... Len(node1.children) == MaxSize Add node4 to node3 Why? Theorise. What fact is true Node4 >= Node3 true Does >= hold for all examples? Or is it more complicated Twist operation. One goes down, one goes up and going down joins one going down. Root = A Node1 is A New root = B
Twist operation is - Root = B B.children = A
And see where the data moves. We need to generate the steps that deterministically creates the same structure with the same data in the right places.
There shall be patterns. So there is usually a property in the object that is compared against to do a btree split.
So there is at most one field or a comparison that determines the destination of the object in the btree.
I thought we can randomly generate condition statements for each input object.
Walk the patch and insert condition objects.
It's a graph transformation problem