Note: Deprecated!
I’ve added support for flow editing, which should be the final ‘big’ editor required to create useful networks. From now on, only finishing functionality and bugfixes. It took a little longer than I had originally planned, mostly because of a struggle
with WPF’s keyboard navigational system, which is crap. I finally got it working though (it also supports drag and drop, copy-paste still needs implementing), hope you like it. You can download the program from here. Unfortunately it’s still a full install, so it’s the whole 40 and some megs download. I’ll try to find some time to create an update installer so that the download size can be minimized.
The editor is still a bit rough, but it should be useful. I’ve tried to make it more text oriented, so you can easily navigate/add/remove items from the keyboard. In the background though it’s still listboxes so coding the view and data was easy and fast, just that creepy WPF navigation system, off course more importantly, it makes certain no illegal input can be provided.
Anyway, here’s a screenshot:
Basically, this Flow editor describes how a noun can be found in a stream: a noun should start either with an article (which is either ‘a’ or ‘the’) or a number, followed by 0 or more adjectives finalized with a single noun. Ok, there are gaps here (it’s still a sketch to show the editor): what’s a number, adjective or noun and how to find them. These things will be explained in the demo, but basically, you use converters (functions that can transform a neuron into another one, like the object ‘house’ into the neuron ‘noun’) or some other info that can be used in a search function which can be attached to the flow items.
To create one yourself, go to ‘Insert/Flow editor‘, use the toolbar button ‘Create new flow editor‘, use the toolbar button on the ‘Project‘ overview tool frame or use it’s context menu. Press ‘F’ to create a new flow followed by a ‘.’ to select a static or ‘['/'{' for an option/loop (press '|' to add new parts in a loop or option). Here's a complete list of available short cuts:
|
Shortcut |
Meaning |
|
|
arrow left |
go to the previous flow item |
|
|
arrow right |
go to the next flow item. |
|
|
arrow down |
|
|
|
arrow up |
|
|
|
end |
go to the end of the current list, when at end of current list, go to end of parent list, until the end of the flow is reached. |
|
|
home |
go to the start of the current list, when at start of current list, go to start of parent list, until the start of the flow is reached. |
|
|
Ctrl + arrow/end/home/mouse click on item |
select multiple neurons. |
|
|
Alt+arrow down |
go to the next flow |
|
|
Alt+arrow up |
go to the previous flow |
|
|
. |
open a popup for selecting a 'named' neuron to add at the end of the current list as static. |
|
|
ctrl+. |
open a popup for selecting a 'named' neuron to insert at the current pos as static. |
|
|
{ |
add a loop at the end of the current list. |
|
|
ctrl+{ |
insert a loop at the current position. |
|
|
[ |
add an option at the end of the current list. |
|
|
ctrl+[ |
insert an option at the current position. |
|
|
} |
change the currently surrounding option to a loop. |
|
|
] |
change the currently surrounding loop to an option. |
|
|
R |
toggle ‘selection Required’ for current option/loop |
|
|
| |
add a new part in the first parent loop or option of the currently selected item. |
|
|
ctrl + | |
insert a new part in the first parent loop or option of the currently selected item. |
|
|
del |
remove the currently selected item from the list, but don’t delete the actual neuron. |
|
|
ctrl+del |
delete the actual neuron. |
|
|
O |
Add a new object (neuron cluster with meaning ‘Object’) at the end of the current list. |
|
|
ctrl+O |
insert a new object (neuron cluster with meaning ‘Object’) at the current position. |
|
|
N |
Add a new neuron at the end of the current list. |
|
|
ctrl+N |
Insert a new neuron at the current position. |
|
|
Double click on static |
Go to the flow. This is only available when the static is a reference to another flow. This is indicated by a line underneath the static. |
A final note perhaps on how to use these flows in a neural network. The thing is, this is really up to you, the application doesn’t make any hard-coded use of them. Though, there will probably be a couple of default algorithms that can be reused.
The basic idea is relatively simple: when the first neuron comes in, search all the clusters to which it belongs with the meaning ‘Flow’, ‘FlowItemConditional’ or ‘FlowItemConditionalPart’ and store the result list in a cluster. When the second comes in, try to find all the clusters of the previous result set that allow the new neuron to follow the previous one, all clusters that don’t allow this are removed from the result set. Various clean ups / lookups can be performed during 2 incoming points. When a ‘flow’ cluster is found with code attached to it, execute this. This off course, can be made as simple or as complex as you want. More on this in a later post. Fuel is depleted for today.