Compare commits
No commits in common. "f8a767db50d50f081d7faaf07fa3dff5e8baad38" and "8e79c80470e9631847951c2d662cd711547f4d93" have entirely different histories.
f8a767db50
...
8e79c80470
4 changed files with 28 additions and 41 deletions
|
|
@ -4,7 +4,6 @@ import Config
|
|||
|
||||
config :logger, :default_formatter,
|
||||
format: "$date $time [$level] $metadata $message\n",
|
||||
colors: [enabled: false],
|
||||
metadata: [:mfa]
|
||||
|
||||
import_config "#{config_env()}.exs"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ defmodule Scopes.CSys.Environ do
|
|||
alias Scopes.Shape
|
||||
|
||||
defmodule State do
|
||||
defstruct [neurons: [], cells: %{}, init_seq: []]
|
||||
defstruct [neurons: [], names: %{}, init_seq: []]
|
||||
end
|
||||
|
||||
def setup({state, proc}, seq \\ []) do
|
||||
|
|
@ -25,21 +25,14 @@ defmodule Scopes.CSys.Environ do
|
|||
def process_creation(msg, {state, proc, syns, env}) do
|
||||
data = Shape.data(msg)
|
||||
new = data.new
|
||||
addr = data[:addr]
|
||||
cells = if addr do
|
||||
[dom, cat, item] = addr
|
||||
Map.update(state.cells, {dom, cat}, %{item => new},
|
||||
fn x -> Map.put(x, item, new) end)
|
||||
else
|
||||
state.cells
|
||||
end
|
||||
neurons = [new | state.neurons]
|
||||
names = data[:name] && Map.put(state.names, data.name, new) || state.names
|
||||
{step, seq} = List.pop_at(state.init_seq, 0)
|
||||
state1 = %State{neurons: neurons, cells: cells, init_seq: seq}
|
||||
state1 = %State{neurons: neurons, names: names, init_seq: seq}
|
||||
CSys.update({state1, proc, syns, env})
|
||||
if step do
|
||||
Process.sleep(1)
|
||||
step.(env, state1)
|
||||
step.(neurons)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
defmodule Scopes.CSys.Program do
|
||||
require Logger
|
||||
|
||||
alias Scopes.CSys
|
||||
alias Scopes.CSys.Environ
|
||||
alias Scopes.CSys
|
||||
alias Scopes.Shape
|
||||
|
||||
defmodule State do
|
||||
|
|
@ -80,7 +78,7 @@ defmodule Scopes.CSys.Program do
|
|||
data = Shape.data(msg)
|
||||
state = CSys.state(scope)
|
||||
value_n = state.value + data.value
|
||||
Logger.info data: data.value, state: state.value, threshold: state.threshold
|
||||
Logger.info([data: data.value, state: state.value, threshold: state.threshold])
|
||||
if value_n >= state.threshold do
|
||||
msg = Shape.create(Shape.head(msg), data: %{data | value: value_n})
|
||||
CSys.forward(msg, scope) || CSys.notify(msg, scope)
|
||||
|
|
@ -135,28 +133,15 @@ defmodule Scopes.CSys.Program do
|
|||
# demo init sequences
|
||||
|
||||
def init_seq_b1() do [
|
||||
fn _env, %Environ.State{neurons: [zero]} ->
|
||||
CSys.send_message(zero, ~w(csys create pred)a,
|
||||
%{op: [CSys.data_only(), negate()]})
|
||||
end,
|
||||
fn _env, %Environ.State{neurons: [one | _ns]} ->
|
||||
CSys.send_message(one, ~w(csys create succ)a, %{op: CSys.data_only()})
|
||||
end,
|
||||
fn _env, %Environ.State{neurons: [two | _ns]} ->
|
||||
CSys.send_message(two, ~w(csys create pred)a)
|
||||
end,
|
||||
fn _env, %Environ.State{neurons: [three | others]} ->
|
||||
fn [zero | _ns] -> CSys.send_message(zero, ~w(csys create pred)a,
|
||||
%{op: [CSys.data_only(), negate()]}) end,
|
||||
fn [one | _ns] -> CSys.send_message(one, ~w(csys create succ)a,
|
||||
%{op: CSys.data_only()}) end,
|
||||
fn [two | _ns] -> CSys.send_message(two, ~w(csys create pred)a) end,
|
||||
fn [three | others] ->
|
||||
zero = List.last(others)
|
||||
CSys.send_message(three, ~w(csys connect)a, %{target: zero})
|
||||
end
|
||||
]
|
||||
end
|
||||
|
||||
def init_recursive_1() do [
|
||||
fn _env, %Environ.State{neurons: [zero]} ->
|
||||
CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: negate()})
|
||||
CSys.send_message(zero, ~w(csys create succ)a, %{name: ~w(csys e01 001)a})
|
||||
end
|
||||
]
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ defmodule Scopes.CSysTest do
|
|||
Shape.data(receive_select(head))
|
||||
end
|
||||
|
||||
describe "basic-program:" do
|
||||
test "minimal-b1" do
|
||||
describe "basic:" do
|
||||
test "minimal-neural-net" do
|
||||
_env = Environ.setup(Program.prepare_basic(), Program.init_seq_b1())
|
||||
zero = receive_data(~w(csys created)a).new
|
||||
CSys.send_value(zero, 0)
|
||||
|
|
@ -25,7 +25,7 @@ defmodule Scopes.CSysTest do
|
|||
one = receive_data(~w(csys created)a).new
|
||||
_two = receive_data(~w(csys created)a).new
|
||||
three = receive_data(~w(csys created)a).new
|
||||
Process.sleep(10)
|
||||
Process.sleep(50)
|
||||
CSys.send_value(one, 1)
|
||||
assert receive_data().value == 1
|
||||
#assert receive_data().value in [-1, 1]
|
||||
|
|
@ -34,12 +34,22 @@ defmodule Scopes.CSysTest do
|
|||
assert receive_data().value in [2, 3]
|
||||
refute_received msg, "unhandled message(s): #{inspect(msg)}"
|
||||
end
|
||||
end
|
||||
|
||||
test "recursive-1" do
|
||||
_env = Environ.setup(Program.prepare_basic(), Program.init_recursive_1())
|
||||
def init_recursive_1() do [
|
||||
fn [zero] ->
|
||||
CSys.send_message(zero, ~w(csys connect)a, %{target: zero, op: Program.negate()})
|
||||
CSys.send_message(zero, ~w(csys create succ)a)
|
||||
end
|
||||
]
|
||||
end
|
||||
|
||||
describe "recursive:" do
|
||||
test "zero + effector" do
|
||||
_env = Environ.setup(Program.prepare_basic(), init_recursive_1())
|
||||
zero = receive_data(~w(csys created)a).new
|
||||
_eff = receive_data(~w(csys created)a).new
|
||||
Process.sleep(10)
|
||||
Process.sleep(50)
|
||||
CSys.send_value(zero, 42)
|
||||
assert receive_data().value == 42
|
||||
refute_received msg, "unhandled message(s): #{inspect(msg)}"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue