Проблемы: Programming too difficult.

Can A* be used to generate algorithm sourcecode?

0  

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?

YAML Идея

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.

chronological,

(не уведомлять) (Необязательно) Пожалуйста, войдите.

У меня возникла мысль. Если вы представляете сгенерированный на выходе код как надмножество, то каждая строка кода является частью подмножества выходного кода.

Поэтому вам нужен какой-то способ создания подмножеств выходного набора.

Каждый набор представляет собой упорядоченный набор инструкций, которые генерируют ответ. Я хочу избежать поиска методом грубой силы, каждая попытка генерации строки кода должна приближаться к результату.

Я думаю, что мы должны предоставить эвристику примерного того, что должен делать код.

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.


Мы можем сканировать структуру вывода и генерировать факты каждой взаимосвязи данных.

Мы можем сравнить, куда переместились данные, на основе прохождения пути от исходных данных до данных назначения. Создайте патч.

У этого есть указатель на этот объект для этого фрагмента данных.

Входные данные

Node1 является корневым

Узел 1 дочерний узел 2

Узел 1 дочерний узел 3

Пример 1

Вставить узел node4

Желаемые выходные данные

Node1 является корневым

Узел 1 дочерний узел 2

Узел 1 дочерний узел 3

Узел 1 дочерний узел 4

Пластырь

Node4 вставлен в дочерние узлы node1

Почему узел1? Теория.

Node1 является корневым

Выполнить операторы против node1, node4

Len(node1.children) <= Максимальный размер

Пример 2

Разделение узла — вставка node5

Входные данные

Корневой узел — node1

Узел 1 дочерний узел 2

Узел 1 дочерний узел 3

Узел 1 дочерний узел 4

Желаемые целевые данные

Корневой узел — node3

Node3 дочерний node1

Node3 потомки node2

Node3 потомки node4

Node4 потомки node5

Это представляет собой разделение узла, поскольку внутри каждого узла может быть только 3 элемента.

Как узнать правило, согласно которому узел может иметь только 3 узла?

Вставить константу в систему фактов

Максимальный размер равен 3 Вставить операторов в систему Лен(узел.дети) Максимальный размер == равно >= больше или равно <= Меньше или равно > Больше, чем < Менее чем

Запустите каждую перестановку каждого оператора, чтобы принять решение о выполнении шагов команды исправления.

Инструкции по патчу Node1 больше не является корневым узлом Node3 является корневым узлом Дочерний узел Node2 - это node1 Удалить node4 из node1 Почему node4 был удален из node1 Почему node4 был добавлен к node3

Теория. Какой факт был правдой. Сравните свойства node1 со свойствами node4 В конце концов.... Len(node1.children) == MaxSize Добавить node4 к node3 Почему? Теория. Какой факт является правдой Узел 4 >= Узел 3 истина Выполняется ли >= для всех примеров? Или это сложнее Операция скручивания. Один идет вниз, один идет вверх, а спуск соединяется с одним спуском. Корень = А Узел 1 — это А Новый корень = B

Операция скручивания - Корень = В Б.дети = А

И посмотреть, куда перемещаются данные. Нам нужно сгенерировать шаги, которые детерминировано создают ту же структуру с теми же данными в нужных местах.

Должны быть узоры. Таким образом, обычно в объекте есть свойство, которое сравнивается для разделения btree.

Таким образом, имеется не более одного поля или сравнения, определяющего место назначения объекта в b-дереве.

Я думал, что мы можем случайным образом генерировать операторы условий для каждого входного объекта.

Пройдите патч и вставьте объекты состояния.

Это задача преобразования графа

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

= Greater than or equal to <= Less than or equal to Greater than < Less than

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