Explorar o código

Move snake simulator to separate projetc

Alexey Edelev %!s(int64=5) %!d(string=hai) anos
pai
achega
d87e5d62e4

+ 10 - 5
build.sh

@@ -10,16 +10,21 @@ mkdir -p $RPC_PATH
 rm -f $RPC_PATH/*.pb.go
 protoc -I$RPC_PATH --go_out=plugins=grpc:$RPC_PATH $RPC_PATH/remotecontrol.proto
 
-export SNAKE_RPC_PATH=$PWD/neuralnetwork/snakesimulator
-mkdir -p $SNAKE_RPC_PATH
-rm -f $SNAKE_RPC_PATH/*.pb.go
-protoc -I$SNAKE_RPC_PATH --go_out=plugins=grpc:$SNAKE_RPC_PATH $SNAKE_RPC_PATH/snakesimulator.proto
 
-cd neuralnetwork
+pushd neuralnetwork
 
 go get -v
 go build -o $GOBIN/neuralnetwork
 pushd $GOPATH/neuralnetwork/neuralnetwork/
 go test -v -cover
 popd
+popd
 # go test -cover
+
+export SNAKE_RPC_PATH=$PWD/snakesimulator/snakesimulator
+mkdir -p $SNAKE_RPC_PATH
+rm -f $SNAKE_RPC_PATH/*.pb.go
+protoc -I$SNAKE_RPC_PATH --go_out=plugins=grpc:$SNAKE_RPC_PATH $SNAKE_RPC_PATH/snakesimulator.proto
+pushd snakesimulator
+go build -o $GOBIN/snakesimulator
+popd

+ 5 - 5
gui/main.qml

@@ -60,14 +60,14 @@ ApplicationWindow {
                 Column {
                     id: activationsColumn
                     width: 50
-                    spacing: 20
+                    spacing: 10
                     Repeater {
                         id: neuronRepeater
                         model: layerSize
                         delegate:Rectangle {
-                            width: 30
-                            height: 30
-                            radius: 15
+                            width: 20
+                            height: 20
+                            radius: 10
                             color: "#00ffffff"
                             Rectangle {
                                 id: neuron
@@ -81,7 +81,7 @@ ApplicationWindow {
                                     target: neuron
                                     property: "color"
                                     to: "#000000"
-                                    duration: 150
+                                    duration: 100
                                 }
 
                                 function updateColor() {

+ 13 - 19
neuralnetwork/main.go

@@ -1,28 +1,22 @@
 package main
 
 import (
-	genetic "./genetic"
-	mutagen "./genetic/mutagen"
-	snakesimulator "./snakesimulator"
+	"./neuralnetwork"
+	"./remotecontrol"
 )
 
 func main() {
-	s := snakesimulator.NewSnakeSimulator(400)
-	s.StartServer()
-	p := genetic.NewPopulation(s, mutagen.NewDummyMutagen(1.0, 1), genetic.PopulationConfig{PopulationSize: 2000, SelectionSize: 0.01, CrossbreedPart: 0.5}, []int{24, 18, 18, 4})
-	p.NaturalSelection(5000)
-	// s.Run()
-
-	// sizes := []int{13, 8, 12, 3}
-	// nn, _ := neuralnetwork.NewNeuralNetwork(sizes, neuralnetwork.NewRPropInitializer(neuralnetwork.RPropConfig{
-	// 	NuPlus:   1.2,
-	// 	NuMinus:  0.5,
-	// 	DeltaMax: 50.0,
-	// 	DeltaMin: 0.000001,
-	// }))
-
-	// nn.SetStateWatcher(rc)
-	// rc.Run()
+	rc := remotecontrol.NewRemoteControl()
+	sizes := []int{13, 8, 12, 3}
+	nn, _ := neuralnetwork.NewNeuralNetwork(sizes, neuralnetwork.NewRPropInitializer(neuralnetwork.RPropConfig{
+		NuPlus:   1.2,
+		NuMinus:  0.5,
+		DeltaMax: 50.0,
+		DeltaMin: 0.000001,
+	}))
+
+	nn.SetStateWatcher(rc)
+	rc.Run()
 
 	// inFile, err := os.Open("./networkstate")
 	// if err != nil {

+ 0 - 1
neuralnetwork/snakesimulator/snakesimulatorui/qtprotobuf

@@ -1 +0,0 @@
-../../../gui/qtprotobuf

+ 67 - 0
snakesimulator/main.go

@@ -0,0 +1,67 @@
+package main
+
+import (
+	genetic "../neuralnetwork/genetic"
+	mutagen "../neuralnetwork/genetic/mutagen"
+	snakesimulator "./snakesimulator"
+)
+
+func main() {
+	s := snakesimulator.NewSnakeSimulator(400)
+	s.StartServer()
+	p := genetic.NewPopulation(s, mutagen.NewDummyMutagen(1.0, 1), genetic.PopulationConfig{PopulationSize: 2000, SelectionSize: 0.01, CrossbreedPart: 0.5}, []int{24, 18, 18, 4})
+	p.NaturalSelection(5000)
+	// s.Run()
+
+	// sizes := []int{13, 8, 12, 3}
+	// nn, _ := neuralnetwork.NewNeuralNetwork(sizes, neuralnetwork.NewRPropInitializer(neuralnetwork.RPropConfig{
+	// 	NuPlus:   1.2,
+	// 	NuMinus:  0.5,
+	// 	DeltaMax: 50.0,
+	// 	DeltaMin: 0.000001,
+	// }))
+
+	// nn.SetStateWatcher(rc)
+	// rc.Run()
+
+	// inFile, err := os.Open("./networkstate")
+	// if err != nil {
+	// 	log.Fatal(err)
+	// }
+	// defer inFile.Close()
+	// nn.LoadState(inFile)
+
+	// nn, _ := neuralnetwork.NewNeuralNetwork(sizes, neuralnetwork.NewBackPropInitializer(0.1))
+
+	// for i := 0; i < nn.Count; i++ {
+	// 	if i > 0 {
+	// 		fmt.Printf("Weights before:\n%v\n\n", mat.Formatted(nn.Weights[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 		fmt.Printf("Biases before:\n%v\n\n", mat.Formatted(nn.Biases[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 		fmt.Printf("Z before:\n%v\n\n", mat.Formatted(nn.Z[i], mat.Prefix(""), mat.Excerpt(0)))
+	// 	}
+	// 	fmt.Printf("A before:\n%v\n\n", mat.Formatted(nn.A[i], mat.Prefix(""), mat.Excerpt(0)))
+	// }
+
+	// nn = &neuralnetwork.NeuralNetwork{}
+	// inFile, err := os.Open("./data")
+	// if err != nil {
+	// 	log.Fatal(err)
+	// }
+	// defer inFile.Close()
+	// nn.LoadState(inFile)
+	// inFile.Close()
+
+	// failCount = 0
+	// training.Reset()
+	// for training.NextValidator() {
+	// 	dataSet, expect := training.GetValidator()
+	// 	index, _ := nn.Predict(dataSet)
+	// 	if expect.At(index, 0) != 1.0 {
+	// 		failCount++
+	// 		// fmt.Printf("Fail: %v, %v\n\n", training.ValidationIndex(), expect.At(index, 0))
+	// 	}
+	// }
+
+	// fmt.Printf("Fail count: %v\n\n", failCount)
+
+}

+ 0 - 0
neuralnetwork/snakesimulator/field.go → snakesimulator/snakesimulator/field.go


+ 0 - 0
neuralnetwork/snakesimulator/snake.go → snakesimulator/snakesimulator/snake.go


+ 3 - 3
neuralnetwork/snakesimulator/snakesimulator.go → snakesimulator/snakesimulator/snakesimulator.go

@@ -12,9 +12,9 @@ import (
 
 	"gonum.org/v1/gonum/mat"
 
-	genetic "../genetic"
-	neuralnetwork "../neuralnetwork"
-	remotecontrol "../remotecontrol"
+	genetic "../../neuralnetwork/genetic"
+	neuralnetwork "../../neuralnetwork/neuralnetwork"
+	remotecontrol "../../neuralnetwork/remotecontrol"
 	grpc "google.golang.org/grpc"
 )
 

+ 0 - 0
neuralnetwork/snakesimulator/snakesimulator.pb.go → snakesimulator/snakesimulator/snakesimulator.pb.go


+ 0 - 0
neuralnetwork/snakesimulator/snakesimulator.proto → snakesimulator/snakesimulator/snakesimulator.proto


+ 1 - 1
neuralnetwork/snakesimulator/snakesimulatorui/CMakeLists.txt → snakesimulator/snakesimulatorui/CMakeLists.txt

@@ -12,7 +12,7 @@ if(Qt5_POSITION_INDEPENDENT_CODE)
     set(CMAKE_POSITION_INDEPENDENT_CODE TRUE)
 endif()
 
-file(GLOB PROTO_FILES ABSOLUTE "${CMAKE_CURRENT_SOURCE_DIR}/../snakesimulator.proto")
+file(GLOB PROTO_FILES ABSOLUTE "${CMAKE_CURRENT_SOURCE_DIR}/../snakesimulator/snakesimulator.proto")
 
 generate_qtprotobuf(TARGET SnakeSimulatorkUi PROTO_FILES ${PROTO_FILES})
 

+ 0 - 0
neuralnetwork/snakesimulator/snakesimulatorui/clientwrapper.cpp → snakesimulator/snakesimulatorui/clientwrapper.cpp


+ 0 - 0
neuralnetwork/snakesimulator/snakesimulatorui/clientwrapper.h → snakesimulator/snakesimulatorui/clientwrapper.h


+ 0 - 0
neuralnetwork/snakesimulator/snakesimulatorui/main.cpp → snakesimulator/snakesimulatorui/main.cpp


+ 0 - 0
neuralnetwork/snakesimulator/snakesimulatorui/main.qml → snakesimulator/snakesimulatorui/main.qml


+ 0 - 0
neuralnetwork/snakesimulator/snakesimulatorui/qml.qrc → snakesimulator/snakesimulatorui/qml.qrc


+ 1 - 0
snakesimulator/snakesimulatorui/qtprotobuf

@@ -0,0 +1 @@
+../../gui/qtprotobuf