phaylon,
Good spot on the typo, its wasn't ultimately the main cause, but I think its happy now =).
Program....
use strict;
use Data::Dumper;
my @inputlist;
my @outputlist;
my @list;
sub AddInput {
my $name = $_[0];
# push @list, { name => $name, inputs => "-" };
push @list, { name => $name };
push @outputlist, $name;
}
sub AddOutput {
my $name = $_[0];
# push @list, { name => $name, outputs => "-" };
push @list, { name => $name };
push @inputlist, $name;
}
sub AddNeuron {
my $name = $_[0];
push @list, { name => $name };
push @inputlist, $name;
push @outputlist, $name;
}
sub AddConnection {
my ($from, $to) = @_;
for my $l ( @list ) {
if ( $l->{"name"} eq $from ) {
push @{$l->{"outputs"}}, $to;
}
if ( $l->{"name"} eq $to ) {
push @{$l->{"inputs"}}, $from;
}
}
}
sub AddRandomConnection {
my @arr;
my $i = scalar(@inputlist);
print "we have $i elements to choose from\n";
my $rand_i = int(rand($i));
my $from = $inputlist[$rand_i];
print "we picked $rand_i : $from\n";
my $o = scalar(@outputlist);
print "we have $i elements to choose from\n";
my $rand_o = int(rand($o));
my $to = $outputlist[$rand_o];
print "we picked $rand_o : $to\n";
#TODO: need to make sure you can't come to and from same node
for my $l ( @list ) {
if ( $l->{"name"} eq $from ) {
push @{$l->{"outputs"}}, $to;
}
if ( $l->{"name"} eq $to ) {
push @{$l->{"inputs"}}, $from;
}
}
}
AddInput("I1");
AddInput("I2");
#AddInput("I3");
AddOutput("O1");
AddOutput("O2");
#AddNeuron("N1");
#AddNeuron("N2");
print Data::Dumper->Dump([@list]);
print "Add a direct connection\n";
AddConnection("I1", "O2");
print Data::Dumper->Dump([@list]);
print "Add a random connection\n";
AddRandomConnection();
print Data::Dumper->Dump([@list]);
Gives output...
$VAR1 = {
'name' => 'I1'
};
$VAR2 = {
'name' => 'I2'
};
$VAR3 = {
'name' => 'O1'
};
$VAR4 = {
'name' => 'O2'
};
Add a direct connection
$VAR1 = {
'outputs' => [
'O2'
],
'name' => 'I1'
};
$VAR2 = {
'name' => 'I2'
};
$VAR3 = {
'name' => 'O1'
};
$VAR4 = {
'name' => 'O2',
'inputs' => [
'I1'
]
};
Add a random connection
we have 2 elements to choose from
we picked 1 : O2
we have 2 elements to choose from
we picked 1 : I2
$VAR1 = {
'outputs' => [
'O2'
],
'name' => 'I1'
};
$VAR2 = {
'name' => 'I2',
'inputs' => [
'O2'
]
};
$VAR3 = {
'name' => 'O1'
};
$VAR4 = {
'outputs' => [
'I2'
],
'name' => 'O2',
'inputs' => [
'I1'
]
};
Regards Paul |