refactored
This commit is contained in:
53
Makefile
53
Makefile
@@ -1,29 +1,46 @@
|
||||
LIBS=input constant element integrator system simulation
|
||||
OBJFILES=./src/Solution.o ./src/Problem.o ./src/Network.o ./src/Neuron.o ./src/Genetics.o
|
||||
|
||||
include ./Makefile.const
|
||||
|
||||
.PHONY: all
|
||||
|
||||
all: lib
|
||||
all:|pre libs
|
||||
|
||||
pre:
|
||||
@mkdir -p lib
|
||||
|
||||
libs: genetics nn
|
||||
|
||||
test: all
|
||||
make -C tests
|
||||
|
||||
lib: $(LIBNAME).a $(LIBNAME).so
|
||||
nn: lib/NeuronNetwork.a lib/NeuronNetwork.so
|
||||
|
||||
lib/NeuronNetwork.so: nn_build
|
||||
cp ./src/NeuronNetwork/NeuronNetwork.so ./lib/
|
||||
|
||||
lib/NeuronNetwork.a: nn_build
|
||||
cp ./src/NeuronNetwork/NeuronNetwork.a ./lib/
|
||||
cp ./src/NeuronNetwork/NeuronNetwork.nm ./lib/
|
||||
|
||||
nn_build:
|
||||
make -C src/NeuronNetwork
|
||||
|
||||
|
||||
genetics: lib/Genetics.a lib/Genetics.so
|
||||
|
||||
lib/Genetics.so: genetics_build
|
||||
cp ./src/Genetics/Genetics.so ./lib/
|
||||
|
||||
lib/Genetics.a: genetics_build
|
||||
cp ./src/Genetics/Genetics.a ./lib/
|
||||
cp ./src/Genetics/Genetics.nm ./lib/
|
||||
|
||||
genetics_build:
|
||||
make -C src/Genetics
|
||||
|
||||
clean:
|
||||
rm -f ./src/*.o
|
||||
rm -f ./$(LIBNAME).so ./$(LIBNAME).a ./$(LIBNAME).nm
|
||||
|
||||
%.o : %.cpp %.h
|
||||
$(CXX) $(CXXFLAGS) -c $< -o $@
|
||||
|
||||
$(LIBNAME).so: $(OBJFILES)
|
||||
$(CXX) -shared $(CXXFLAGS) $(OBJFILES) -o $(LIBNAME).so
|
||||
|
||||
$(LIBNAME).a: $(OBJFILES)
|
||||
rm -f $(LIBNAME).a # create new library
|
||||
ar rcv $(LIBNAME).a $(OBJFILES)
|
||||
ranlib $(LIBNAME).a
|
||||
nm --demangle $(LIBNAME).a > $(LIBNAME).nm
|
||||
@make -C src/Genetics clean
|
||||
@make -C src/NeuronNetwork clean
|
||||
#@rm -f ./*.so ./*.a ./*.nm
|
||||
@rm -f ./lib/*.so ./lib/*.a ./lib/*.nm
|
||||
@echo "Cleaned....."
|
||||
@@ -5,4 +5,5 @@ CXXFLAGS+= -O2
|
||||
#CXXFLAGS+= -pg -fPIC
|
||||
CXXFLAGS+= -fPIC
|
||||
|
||||
LIBNAME=NN
|
||||
%.o : %.cpp %.h
|
||||
$(CXX) $(CXXFLAGS) -c $< -o $@
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#include "Genetics"
|
||||
|
||||
S::XXY S::Genetics::getSolution()
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
#ifndef _GENETICS_H_
|
||||
#define _GENETICS_H_
|
||||
|
||||
namespace S
|
||||
{
|
||||
class XXY
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
class PossibleSolution
|
||||
{
|
||||
public:
|
||||
virtual void mutate()=0;
|
||||
virtual PossibleSolution& combine(const PossibleSolution &s)=0;
|
||||
virtual double getFitness()=0;
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
template <typename _T>
|
||||
class Genetics
|
||||
{
|
||||
public:
|
||||
XXY getSolution(_T);
|
||||
protected:
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
13
src/Genetics/Genetics.cpp
Normal file
13
src/Genetics/Genetics.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "Genetics"
|
||||
|
||||
using namespace Shin::Genetics;
|
||||
|
||||
/*S::XXY S::Genetics::getSolution()
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
48
src/Genetics/Genetics.h
Normal file
48
src/Genetics/Genetics.h
Normal file
@@ -0,0 +1,48 @@
|
||||
#ifndef _GENETICS_H_
|
||||
#define _GENETICS_H_
|
||||
|
||||
namespace Shin
|
||||
{
|
||||
namespace Genetics
|
||||
{
|
||||
class XXY
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
class Entity
|
||||
{
|
||||
public:
|
||||
virtual void mutate()=0;
|
||||
virtual Entity& combine(const Entity &s)=0;
|
||||
virtual double getFitness()=0;
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
class Generation
|
||||
{
|
||||
public:
|
||||
double absoluteFitness();
|
||||
double relativeFiness();
|
||||
double bestFitness();
|
||||
double worstFitness();
|
||||
double averageFitness();
|
||||
unsigned long size();
|
||||
protected:
|
||||
|
||||
};
|
||||
|
||||
template <typename _T>
|
||||
class Genetics
|
||||
{
|
||||
public:
|
||||
XXY getSolution(_T);
|
||||
protected:
|
||||
private:
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
21
src/Genetics/Makefile
Normal file
21
src/Genetics/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
OBJFILES=./Genetics.o
|
||||
|
||||
LIBNAME=Genetics
|
||||
|
||||
include ../../Makefile.const
|
||||
|
||||
all: lib
|
||||
|
||||
lib: $(LIBNAME).so $(LIBNAME).a
|
||||
|
||||
$(LIBNAME).so: $(OBJFILES)
|
||||
$(CXX) -shared $(CXXFLAGS) $(OBJFILES) -o $(LIBNAME).so
|
||||
|
||||
$(LIBNAME).a: $(OBJFILES)
|
||||
rm -f $(LIBNAME).a # create new library
|
||||
ar rcv $(LIBNAME).a $(OBJFILES)
|
||||
ranlib $(LIBNAME).a
|
||||
nm --demangle $(LIBNAME).a > $(LIBNAME).nm
|
||||
|
||||
clean:
|
||||
@rm -f ./*.o ./*.so ./*.a ./*.nm
|
||||
21
src/NeuronNetwork/Makefile
Normal file
21
src/NeuronNetwork/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
OBJFILES=./Solution.o ./Problem.o ./Network.o ./Neuron.o
|
||||
|
||||
LIBNAME=NeuronNetwork
|
||||
|
||||
include ../../Makefile.const
|
||||
|
||||
all: lib
|
||||
|
||||
lib: $(LIBNAME).so $(LIBNAME).a
|
||||
|
||||
$(LIBNAME).so: $(OBJFILES)
|
||||
$(CXX) -shared $(CXXFLAGS) $(OBJFILES) -o $(LIBNAME).so
|
||||
|
||||
$(LIBNAME).a: $(OBJFILES)
|
||||
rm -f $(LIBNAME).a # create new library
|
||||
ar rcv $(LIBNAME).a $(OBJFILES)
|
||||
ranlib $(LIBNAME).a
|
||||
nm --demangle $(LIBNAME).a > $(LIBNAME).nm
|
||||
|
||||
clean:
|
||||
@rm -f ./*.o ./*.so ./*.a ./*.nm
|
||||
@@ -1,6 +1,8 @@
|
||||
#include "Network"
|
||||
|
||||
S::FeedForwardNetwork::~FeedForwardNetwork()
|
||||
using namespace Shin::NeuronNetwork;
|
||||
|
||||
FeedForwardNetwork::~FeedForwardNetwork()
|
||||
{
|
||||
for(Layer *l:layers)
|
||||
{
|
||||
@@ -8,7 +10,7 @@ S::FeedForwardNetwork::~FeedForwardNetwork()
|
||||
}
|
||||
}
|
||||
|
||||
S::Solution S::FeedForwardNetwork::solve(const S::Problem& p)
|
||||
Solution FeedForwardNetwork::solve(const Problem& p)
|
||||
{
|
||||
Solution s=Solution(p);
|
||||
for (Layer *l:layers)
|
||||
@@ -18,22 +20,22 @@ S::Solution S::FeedForwardNetwork::solve(const S::Problem& p)
|
||||
return s;
|
||||
}
|
||||
|
||||
void S::FeedForwardNetwork::learn(const S::Problem & problem, const S::Solution &actual)
|
||||
void FeedForwardNetwork::learn(const Problem & problem, const Solution &actual)
|
||||
{
|
||||
//S::Solution s= solve(p);
|
||||
}
|
||||
|
||||
const S::Layer* S::FeedForwardNetwork::operator[](int layer)
|
||||
const Layer* FeedForwardNetwork::operator[](int layer)
|
||||
{
|
||||
return layers[layer];
|
||||
}
|
||||
|
||||
void S::FeedForwardNetwork::addLayer(int neurons)
|
||||
void FeedForwardNetwork::addLayer(int neurons)
|
||||
{
|
||||
layers.push_back(new Layer(neurons));
|
||||
}
|
||||
|
||||
S::Layer::Layer(int a):neurons()
|
||||
Layer::Layer(int a):neurons()
|
||||
{
|
||||
while(a--)
|
||||
{
|
||||
@@ -41,7 +43,7 @@ S::Layer::Layer(int a):neurons()
|
||||
}
|
||||
}
|
||||
|
||||
S::Layer::~Layer()
|
||||
Layer::~Layer()
|
||||
{
|
||||
for(Neuron *n:neurons)
|
||||
{
|
||||
@@ -50,7 +52,7 @@ S::Layer::~Layer()
|
||||
}
|
||||
|
||||
|
||||
S::Solution S::Layer::solve(const std::vector<bool> &input)
|
||||
Solution Layer::solve(const std::vector<bool> &input)
|
||||
{
|
||||
std::vector <bool> ret;
|
||||
for(Neuron *n:neurons)
|
||||
@@ -60,7 +62,7 @@ S::Solution S::Layer::solve(const std::vector<bool> &input)
|
||||
return ret;
|
||||
}
|
||||
|
||||
S::Neuron* S::Layer::operator[](int neuron) const
|
||||
Neuron* Layer::operator[](int neuron) const
|
||||
{
|
||||
return neurons[neuron];
|
||||
}
|
||||
@@ -1,19 +1,22 @@
|
||||
#ifndef _NN_H_
|
||||
#define _NN_H_
|
||||
#ifndef _S_NN_NN_H_
|
||||
#define _S_NN_NN_H_
|
||||
|
||||
#include "Problem"
|
||||
#include "Solution"
|
||||
#include "Neuron"
|
||||
|
||||
#include <cstdarg>
|
||||
#include <vector>
|
||||
|
||||
namespace S
|
||||
namespace Shin
|
||||
{
|
||||
namespace NeuronNetwork
|
||||
{
|
||||
class Network
|
||||
{
|
||||
public:
|
||||
virtual Solution solve(const S::Problem&)=0;
|
||||
virtual void learn(const S::Problem & p, const S::Solution &s)=0;
|
||||
virtual Solution solve(const Problem&)=0;
|
||||
virtual void learn(const Problem & p, const Solution &s)=0;
|
||||
protected:
|
||||
private:
|
||||
};
|
||||
@@ -41,12 +44,12 @@ namespace S
|
||||
class FeedForwardNetwork : public ACyclicNetwork
|
||||
{
|
||||
public:
|
||||
|
||||
template<typename... Args>inline FeedForwardNetwork(Args &&... args) {pass((addLayer(args),1)...);};
|
||||
//inline FeedForwardNetwork(std::vector<int> q);
|
||||
~FeedForwardNetwork();
|
||||
virtual Solution solve(const S::Problem& p) override;
|
||||
virtual void learn(const S::Problem & p, const S::Solution &s) override;
|
||||
|
||||
virtual Solution solve(const Problem& p) override;
|
||||
virtual void learn(const Problem & p, const Solution &s) override;
|
||||
const Layer* operator[](int layer);
|
||||
protected:
|
||||
template<typename... Args> inline void pass(Args&&...) {};
|
||||
@@ -57,5 +60,6 @@ namespace S
|
||||
std::vector<Layer*> layers;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1,22 +1,22 @@
|
||||
#include "./Neuron"
|
||||
|
||||
#include <iostream>
|
||||
using namespace Shin::NeuronNetwork;
|
||||
|
||||
S::Neuron::Neuron(): potential(1),weights()
|
||||
Neuron::Neuron(): potential(1),weights()
|
||||
{
|
||||
|
||||
}
|
||||
double S::Neuron::getPotential() const
|
||||
double Neuron::getPotential() const
|
||||
{
|
||||
return potential;
|
||||
}
|
||||
|
||||
void S::Neuron::setPotential(double p)
|
||||
void Neuron::setPotential(double p)
|
||||
{
|
||||
potential=p;
|
||||
}
|
||||
|
||||
double S::Neuron::getWeight(unsigned int i) const
|
||||
double Neuron::getWeight(unsigned int i) const
|
||||
{
|
||||
if(i >= weights.size())
|
||||
{
|
||||
@@ -25,7 +25,7 @@ double S::Neuron::getWeight(unsigned int i) const
|
||||
return weights[0];
|
||||
}
|
||||
|
||||
void S::Neuron::setWeight(unsigned int i,double p)
|
||||
void Neuron::setWeight(unsigned int i,double p)
|
||||
{
|
||||
if(i >= weights.size())
|
||||
{
|
||||
@@ -36,7 +36,7 @@ void S::Neuron::setWeight(unsigned int i,double p)
|
||||
weights[i]=p;
|
||||
}
|
||||
|
||||
bool S::Neuron::activates(std::vector<bool> input)
|
||||
bool Neuron::activates(std::vector<bool> input)
|
||||
{
|
||||
double sum=0;
|
||||
for(unsigned int i=0;i<input.size();i++)
|
||||
@@ -1,9 +1,12 @@
|
||||
#ifndef _NEURON_H_
|
||||
#define _NEURON_H_
|
||||
#ifndef _S_NN_NEURON_H_
|
||||
#define _S_NN_NEURON_H_
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace S{
|
||||
namespace Shin
|
||||
{
|
||||
namespace NeuronNetwork
|
||||
{
|
||||
class Neuron
|
||||
{
|
||||
public:
|
||||
@@ -22,4 +25,5 @@ namespace S{
|
||||
{
|
||||
};
|
||||
}
|
||||
}
|
||||
#endif
|
||||
13
src/NeuronNetwork/Problem.cpp
Normal file
13
src/NeuronNetwork/Problem.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "Problem"
|
||||
|
||||
using namespace Shin::NeuronNetwork;
|
||||
|
||||
Problem::Problem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Problem::operator std::vector<bool>() const
|
||||
{
|
||||
return representation();
|
||||
}
|
||||
@@ -3,7 +3,9 @@
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace S
|
||||
namespace Shin
|
||||
{
|
||||
namespace NeuronNetwork
|
||||
{
|
||||
class Problem
|
||||
{
|
||||
@@ -15,5 +17,5 @@ namespace S
|
||||
private:
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
23
src/NeuronNetwork/Solution.cpp
Normal file
23
src/NeuronNetwork/Solution.cpp
Normal file
@@ -0,0 +1,23 @@
|
||||
#include "./Solution"
|
||||
|
||||
using namespace Shin::NeuronNetwork;
|
||||
|
||||
Solution::Solution(std::vector<bool>solution):solution(solution)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool Solution::operator[](int pos)
|
||||
{
|
||||
return solution[pos];
|
||||
}
|
||||
|
||||
int Solution::size()
|
||||
{
|
||||
return solution.size();
|
||||
}
|
||||
|
||||
Solution::operator std::vector<bool>()
|
||||
{
|
||||
return solution;
|
||||
}
|
||||
@@ -4,7 +4,9 @@
|
||||
#include <vector>
|
||||
#include "Problem"
|
||||
|
||||
namespace S
|
||||
namespace Shin
|
||||
{
|
||||
namespace NeuronNetwork
|
||||
{
|
||||
class Solution
|
||||
{
|
||||
@@ -17,5 +19,6 @@ namespace S
|
||||
std::vector<bool> solution;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -1,11 +0,0 @@
|
||||
#include "Problem"
|
||||
|
||||
S::Problem::Problem()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
S::Problem::operator std::vector<bool>() const
|
||||
{
|
||||
return representation();
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
#include "./Solution"
|
||||
|
||||
S::Solution::Solution(std::vector<bool>solution):solution(solution)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool S::Solution::operator[](int pos)
|
||||
{
|
||||
return solution[pos];
|
||||
}
|
||||
|
||||
int S::Solution::size()
|
||||
{
|
||||
return solution.size();
|
||||
}
|
||||
|
||||
S::Solution::operator std::vector<bool>()
|
||||
{
|
||||
return solution;
|
||||
}
|
||||
Reference in New Issue
Block a user