33 static Agent *create(
const std::string &type);
35 Agent(
const std::string &name);
37 const std::string& name()
const {
return mName; }
38 virtual void setStateRepresentationParams(PyObject *) { }
39 void setParameters(PyObject *);
40 virtual void setParameter(
const std::string &varName,
int index, PyObject *);
41 const std::map<std::string, Parameter *>& getParameters()
const {
return mParameters; }
42 void setPythonInterface(PyObject *);
43 void setTrainingMode(
bool on);
45 virtual void setPCB(
const std::shared_ptr<PCBoard>&);
46 virtual void setManagedConnections(
const std::set<Connection *>&);
47 void setManagedConnectionsToUnrouted();
54 virtual bool _run() {
return false; }
56 void setRunArgs(PyObject *);
57 void setTimeout(uint64_t usec);
58 void setTimeoutExpired();
59 void setActionLimit(int64_t count);
60 void setClearBoardBeforeRun(
bool);
61 float getProgress()
const {
return mProgress; }
63 virtual PyObject *step(PyObject *) {
return 0; }
64 virtual PyObject *get_state(PyObject *) {
return 0; }
65 virtual PyObject *reset() {
return 0; }
67 void eraseManagedConnections();
72 Policy *getPolicy()
const {
return mPolicy.get(); }
73 StateRepresentation *getSR()
const {
return mStateRep.get(); }
74 uint32_t getIteration()
const {
return mIteration; }
75 uint64_t numActions()
const {
return mNumActions; }
76 uint64_t usecsSinceStart()
const;
77 const std::vector<Connection *>& getConnections()
const {
return mConnections; }
78 const std::set<Connection *>& getConnectionSet()
const {
return mConnectionSet; }
79 Connection *setConnectionLRU(PyObject *);
80 Connection *getConnectionLRU()
const {
return mConnectionLRU; }
81 Action::Result evaluateCurrentState()
const;
84 bool hasTimerExpired()
const;
85 void resetActionCount();
86 void resetActionLimit();
87 void countActions(
int);
88 bool actionLimitExceeded()
const;
93 std::vector<float>
py_V(PyObject *states) {
return pycall_floatarray(PCB_PY_I_METHOD_V, states); }
94 std::vector<float> py_Q(PyObject *states) {
return pycall_floatarray(PCB_PY_I_METHOD_Q, states); }
95 std::vector<float> py_P(PyObject *states) {
return pycall_floatarray(PCB_PY_I_METHOD_P, states); }
96 std::vector<float> py_P_V(PyObject *states) {
return pycall_floatarray(PCB_PY_I_METHOD_P_V, states); }
100 StepLock& getStepLock() {
return mStepLock; }
102 std::shared_ptr<PCBoard> mPCB;
103 std::vector<Connection *> mConnections;
104 std::set<Connection *> mConnectionSet;
106 const ActionSpace *mActionSpace{0};
107 std::unique_ptr<Policy> mPolicy;
108 std::unique_ptr<StateRepresentation> mStateRep;
109 std::unique_ptr<RewardFunction> mRewardFn;
110 ResultCollection mStats;
111 uint32_t mIteration{0};
112 float mProgress{-1.0f};
113 bool mClearBoardBeforeRun{
false};
114 SignalContext mSignals;
115 std::map<std::string, Parameter *> mParameters;
117 void initParameters();
119 PyObject *mPython{0};
120 PyObject *mMethodNamesPy[5]{0,0,0,0,0};
122 int64_t mActionLimit{std::numeric_limits<int64_t>::max()};
123 int64_t mNumActions{0};
124 int64_t mActionsLeft{std::numeric_limits<int64_t>::max()};
125 uint64_t mTimeoutUSecs{0};
126 std::chrono::time_point<std::chrono::system_clock> mTimerStartPoint;
127 std::chrono::time_point<std::chrono::system_clock> mTimeoutPoint;
128 bool mTraining{
false};
129 mutable StepLock mStepLock;
130 const std::string mName;
132 std::vector<float> pycall_floatarray(uint index, PyObject *);