#pragma once #include "./Instruction.h" #include "../Cell.h" #include "../CelularEncoding.h" namespace NeuralNetworks { namespace ConstructiveAlgorithms { namespace CelularEncoding { namespace Instruction{ class IncBias : public Instruction{ public: virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(cell.getBias()+1.0); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return 1; } virtual std::string toString() const override { return "IncBias"; } }; class DecBias : public Instruction{ public: virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(cell.getBias()-1.0); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return 1; } virtual std::string toString() const override { return "DecBias"; } }; class MulBias : public Instruction{ public: virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(cell.getBias()*2.0); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return 1; } virtual std::string toString() const override { return "MulBias"; } }; class DivBias : public Instruction{ public: virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(cell.getBias()*0.5); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return 1; } virtual std::string toString() const override { return "DivBias"; } }; class SetBiasZero : public Instruction{ public: SetBiasZero(bool terminal = true) : _nodes(terminal ? 0 : 1) { } virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(0.0); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return _nodes; } virtual std::string toString() const override { return "SetBiasZero"; } protected: std::size_t _nodes; }; class SetBiasOne : public Instruction{ public: SetBiasOne(bool terminal = true) : _nodes(terminal ? 0 : 1) { } virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(1.0); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return _nodes; } virtual std::string toString() const override { return "SetBiasZero"; } protected: std::size_t _nodes; }; class SetBiasMinusOne : public Instruction{ public: SetBiasMinusOne(bool terminal = true) : _nodes(terminal ? 0 : 1) { } virtual void run(Cell &cell, CelularEncoding &, const std::vector &) override { cell.setBias(-1.0); cell.setCodePointer(cell.getCodePointer()->c1); } virtual std::size_t numberOfNodes() const override { return _nodes; } virtual std::string toString() const override { return "SetBiasZero"; } protected: std::size_t _nodes; }; } } } }