Conscience Core
CscKnowledgeItem.h
Go to the documentation of this file.
1 //
2 // CscKnowledgeItem.hpp
3 // ConscienceRobotManager
4 //
5 // Created by ILIES ZAOUI on 05/06/2018.
6 // Copyright © 2018 IliesZaoui. All rights reserved.
7 //
8 
9 #ifndef CscKnowledgeItem_h
10 #define CscKnowledgeItem_h
11 
15 #include "CoreObjects/CscState.h"
17 #include "CscCommon.h"
19 #include "Unit/CscUnitOrigin.h"
20 #include "Unit/CscUnitType.h"
21 #include <limits>
22 
23 using std::vector, std::string, std::numeric_limits;
24 
26 
32  NONE = 0,
33  GENETIC = 1 << 0,
36  };
37  typedef uint64_t CscArtificialIntelligenceTypes;
38 
40  return (types & requestedType) == requestedType;
41  }
42 
44  protected:
45  void cutBeginingIfTheSame(CscSequence *sequenceIn, float maxIn);
46  void cutBeginingIfSupport(CscSequence *sequenceIn);
47  void cutLastestIfTheSameAndWorst(CscSequence *sequenceIn, float maxIn);
48  void cutInternalSubSequencesIfCommonState(CscSequence *sequenceIn);
49 
50  bool usePivots() const;
51  bool usePropellers() const;
52  bool useWheels() const;
53  bool useTranslations() const;
54 
55  public:
58 
59  CscKnowledgeItem(int knoItemId, string knoItemName, CscArtificialIntelligenceTypes aiTypes = CscArtificialIntelligenceType::NONE, bool outputTypes[] = NULL);
60 
62  void applyWheels(CscSequence *result, vector<string> *names);
63  void applyWheels(CscState *result, vector<string> *names);
64 
65  void applyJoints(CscState *result, vector<string> *names);
66  void applyJoints(CscSequence *result, vector<string> *names);
67 
68  virtual float evaluateSequence(CscSequence *sequence, const CscWorldEntity *entity, CscState *initialStateInit);
69  virtual float evaluateState(CscState *state, const CscWorldEntity *entity, CscState *initialState);
70  int maxSequenceSize = 100;
71  float maxJointDelta = 100.0;
72  float maxWheelsDelta = 100.0f;
73  float maxPropellersDelta = 100.0f;
74  float maxTranslationsDelta = 100.0f;
75  map<int, float> maxPivotDeltaByPivotId;
76  bool symetricMovments = true;
77 
81  };
82 
86  };
87 
89  private:
90  int pivotId;
91  float limitMin;
92  float limitMax;
93  public:
94  LimitsPivot(int pivotId, float limitMin, float limitMax) : pivotId(pivotId), limitMin(limitMin), limitMax(limitMax) {
95  }
96  int getPivotId() const {
97  return pivotId;
98  }
99  float getLimitMin() const {
100  return limitMin;
101  }
102  float getLimitMax() const {
103  return limitMax;
104  }
105  };
106 
108  private:
109  int propellerId;
110  float limitSpeed;
111  public:
112  LimitsPropeller(int propellerId, float limitSpeed) : propellerId(propellerId), limitSpeed(limitSpeed) {
113  }
114  int getPropellerId() const {
115  return propellerId;
116  }
117  float getLimitSpeed() const {
118  return limitSpeed;
119  }
120  };
121 
123  private:
124  int wheelId;
125  float limitSpeed;
126  public:
127  LimitsWheel(int wheelId, float limitSpeed) : wheelId(wheelId), limitSpeed(limitSpeed) {
128  }
129  int getWheelId() const {
130  return wheelId;
131  }
132  float getLimitSpeed() const {
133  return limitSpeed;
134  }
135  };
136 
138  private:
139  int translationId;
140  float limitSpeed;
141  float limitMin;
142  float limitMax;
143  public:
144  LimitsTranslation(int translationId, float limitSpeed, float limitMin, float limitMax) : translationId(translationId), limitSpeed(limitSpeed), limitMin(limitMin), limitMax(limitMax) {
145  }
146  int getTranslationId() const {
147  return translationId;
148  }
149  float getLimitSpeed() const {
150  return limitSpeed;
151  }
152  float getLimitMin() const {
153  return limitMin;
154  }
155  float getLimitMax() const {
156  return limitMax;
157  }
158  };
159 
160  const map<string, float> *outputsCanMoveValues = new map<string, float>;
161 
162  const map<string, float> getOutputsCanMoveValues() const;
163  vector<const LimitsPivot*> getPivotsCanMoveValues() const;
164  vector<const LimitsPropeller*> getPropellersCanMoveValues() const;
165  vector<const LimitsWheel*> getWheelsCanMoveValues() const;
166  vector<const LimitsTranslation*> getTranslationsCanMoveValues() const;
167 
168  void setPivotsCanMoveValues(const LimitsPivot *limitsPivot);
169  void setPropellersCanMoveValues(const LimitsPropeller *limitsPropeller);
170  void setWheelsCanMoveValues(const LimitsWheel *limitsWheel);
171  void setTranslationsCanMoveValues(const LimitsTranslation *limitsTranslation);
172 
173  const vector<const TargetMemberValues *> *inputsTargetValues = new vector<const TargetMemberValues *>();
174  const vector<const TargetMemberPonderation *> *inputsTargetPercents = new vector<const TargetMemberPonderation *>();
175 
176  float sequencePercentMax = 1.0;
177  float sequencePercentAvg = 0.0;
178  float sequencePercentCountStates = 0.0;
179  float sequencePercentExtrapolation = 0.0;
180  float sequencePercentAccEnd = 0.0;
181 
182  bool optionCutLastestIfTheSameAndWorst = false;
183  bool optionCutBeginingIfTheSame = false;
184  bool optionDeltaPerStateMaxDegressive = false;
185  bool strictPonderations = false;
186 
187  float solvedAt = 1.0;
188  float processAt = 1.0;
189 
190  virtual bool isStatesSupportOf(CscState *state1, CscState *state2);
191  virtual bool isObjectiveSupportOf(CscKnowledgeItem *knowledgeItem);
192 
193  float isSupportActionDiff = 5.0;
194  float isSupportHeightDiff = 10;
195  float isSupportAccDiff = 0.3;
196  float isSupportGyroDiff = 10.0;
197 
198  bool deploymentWhenAnotherIsSolved = false;
199  bool deploymentInitialGlobal = false;
200  bool selfDeploymentAnticipation = false;
201  bool antiKinematic = false;
202 
203  virtual int getActionDeltaAutorized(float initStateValue);
204  virtual int getSequenceCountAutorized(float initStateValue);
205  virtual float getExtrapolationResult(CscSequence *sequenceIn);
206 
207  virtual void sequencePostTraitment(CscSequence *sequanceIn);
208  virtual ~CscKnowledgeItem();
209 
210  int getDistance(int angle1, int angle2);
211 
212  string toString();
213  /*
214  Create a state randomly from the previous state respecting the maxDeltas.
215  * symmetry will make the symmetric pivots (left and right) have the same value.
216  * sameProgressionRightLeft will make 2 symmetric pivots have the same difference between the previous state and the state being generated
217  */
218  virtual CscState *generateRandomStateFromState(const CscEntityModel *robotModel, CscState *currentState, bool symmetry, bool sameProgressionRightLeft = false);
219  bool outputTypes[4];
221 
222  static unsigned long long nextId() {
223  if (lastId >= numeric_limits<unsigned long long>::max() - 2) {
224  LOG_ERROR("FATAL : Csc knowledge item counter reached max - there might be a problem");
225  exit(1);
226  }
227  return ++lastId;
228  }
229 
230  /*
231  Modify initStateObjectiveValue which indicate the initial state’s objective value
232  */
233  void setInitStateObjectiveValue(float value);
234  /*
235  Got initStateObjectiveValue which indicate the initial state’s objective value
236  */
237  float getInitStateObjectiveValue() const;
238 
239  /*
240  Determine if all playSequence in physicsSimulator must be played in realTime.
241  By default it return false.
242  */
243  virtual bool shouldAlwaysPlayInRealTime() const;
244 
254  virtual map<int, CscPivotMovementType> createPivotMovementTypeByPivotId(const CscEntityModel *robotModel);
255 
266  virtual map<int, CscPivotMovementType> getPivotMovementTypeByPivotId(const CscEntityModel *robotModel);
267  protected :
268  /*
269  Add extrapolation states that allow to check if the sequence is realy correct.
270  */
271  virtual void addExtrapolationStates(CscSequence *sequenceIn, const CscWorldEntity *entity);
272 
273  map<int, CscPivotMovementType> pivotMovementTypeByPivotId;
274 
275  private:
276  inline static unsigned long long lastId = 0;
277 
278  /*
279  Indicate the initial state’s objective value
280  */
281  float initStateObjectiveValue = 0.0;
282 
283  vector<const LimitsPivot*> *pivotsCanMoveValues = new vector<const LimitsPivot*>;
284  vector<const LimitsPropeller*> *propellersCanMoveValues = new vector<const LimitsPropeller*>;
285  vector<const LimitsWheel*> *wheelsCanMoveValues = new vector<const LimitsWheel*>;
286  vector<const LimitsTranslation*> *translationsCanMoveValues = new vector<const LimitsTranslation*>;
287 
288  };
289 
290 }
291 
292 #endif /* CscKnowledgeItem_hpp */
conscience_core::knowledge::CscKnowledgeItem::LimitsPropeller
Definition: CscKnowledgeItem.h:107
CscWorldEntity
Definition: CscWorldEntity.h:19
conscience_core::knowledge::CscKnowledgeItem::LimitsWheel
Definition: CscKnowledgeItem.h:122
conscience_core::knowledge::CscKnowledgeItem::nextId
static unsigned long long nextId()
Definition: CscKnowledgeItem.h:222
CscWorldEntity.h
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
CscUnitType.h
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues::memberValues
CscMemberInputStatus * memberValues
Definition: CscKnowledgeItem.h:79
conscience_core::simulator::lastId
static std::atomic< unsigned long long > lastId
Definition: CscPhysicsSimulator.cpp:106
conscience_core::knowledge::CscKnowledgeItem::pivotMovementTypeByPivotId
map< int, CscPivotMovementType > pivotMovementTypeByPivotId
Definition: CscKnowledgeItem.h:273
conscience_core::knowledge::CscKnowledgeItem::LimitsTranslation::LimitsTranslation
LimitsTranslation(int translationId, float limitSpeed, float limitMin, float limitMax)
Definition: CscKnowledgeItem.h:144
conscience_core::knowledge::CscKnowledgeItem::LimitsPivot
Definition: CscKnowledgeItem.h:88
CscEntityModel
Definition: CscEntityModel.h:54
conscience_core::knowledge::INVERSE_KINEMATIC
@ INVERSE_KINEMATIC
Definition: CscKnowledgeItem.h:34
conscience_core::knowledge::CscKnowledgeItem::LimitsPivot::getPivotId
int getPivotId() const
Definition: CscKnowledgeItem.h:96
conscience_core::knowledge::CscKnowledgeItem::knowledgeItemName
string knowledgeItemName
Definition: CscKnowledgeItem.h:57
conscience_core::knowledge::CscKnowledgeItem::LimitsPropeller::getLimitSpeed
float getLimitSpeed() const
Definition: CscKnowledgeItem.h:117
conscience_core::knowledge::CscKnowledgeItem::LimitsWheel::getWheelId
int getWheelId() const
Definition: CscKnowledgeItem.h:129
conscience_core::knowledge::CscKnowledgeItemType
CscKnowledgeItemType
Definition: CscKnowledgeItemType.h:14
conscience_core::knowledge::CscKnowledgeItem::LimitsWheel::getLimitSpeed
float getLimitSpeed() const
Definition: CscKnowledgeItem.h:132
conscience_core::knowledge::CscKnowledgeItem::LimitsTranslation::getTranslationId
int getTranslationId() const
Definition: CscKnowledgeItem.h:146
CscSequence.h
conscience_core::knowledge::CscKnowledgeItem::LimitsTranslation
Definition: CscKnowledgeItem.h:137
conscience_core::knowledge::CscArtificialIntelligenceTypes
uint64_t CscArtificialIntelligenceTypes
Definition: CommandParser.h:21
CscMemberInputPonderation.h
conscience_core::knowledge
Definition: CscEntityReflexion.h:35
CscUnitOrigin.h
conscience_core::knowledge::CscKnowledgeItem::LimitsWheel::LimitsWheel
LimitsWheel(int wheelId, float limitSpeed)
Definition: CscKnowledgeItem.h:127
conscience_core::knowledge::INVERSE_KINEMATIC_JACOBIAN
@ INVERSE_KINEMATIC_JACOBIAN
Definition: CscKnowledgeItem.h:35
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues::relativeToMemberName
optional< string > relativeToMemberName
Definition: CscKnowledgeItem.h:80
conscience_core::knowledge::CscKnowledgeItem::aiTypes
const CscArtificialIntelligenceTypes aiTypes
Definition: CscKnowledgeItem.h:220
conscience_core::knowledge::CscKnowledgeItem::LimitsTranslation::getLimitMax
float getLimitMax() const
Definition: CscKnowledgeItem.h:155
CscState
Definition: CscState.h:24
conscience_core::knowledge::CscKnowledgeItem::LimitsPivot::getLimitMin
float getLimitMin() const
Definition: CscKnowledgeItem.h:99
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues
Definition: CscKnowledgeItem.h:78
CscCommon.h
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation::relativeToMemberName
optional< string > relativeToMemberName
Definition: CscKnowledgeItem.h:85
CscMemberInputPonderation
Definition: CscMemberInputPonderation.h:19
CscState.h
conscience_core::knowledge::CscKnowledgeItem::LimitsPivot::LimitsPivot
LimitsPivot(int pivotId, float limitMin, float limitMax)
Definition: CscKnowledgeItem.h:94
conscience_core::knowledge::CscKnowledgeItem::maxPivotDeltaByPivotId
map< int, float > maxPivotDeltaByPivotId
Definition: CscKnowledgeItem.h:75
conscience_core::knowledge::CscKnowledgeItem::LimitsTranslation::getLimitSpeed
float getLimitSpeed() const
Definition: CscKnowledgeItem.h:149
LOG_ERROR
#define LOG_ERROR(message)
Definition: conscience_log.h:194
conscience_core::knowledge::CscKnowledgeItem::LimitsPivot::getLimitMax
float getLimitMax() const
Definition: CscKnowledgeItem.h:102
conscience_core::knowledge::hasAIType
bool hasAIType(CscArtificialIntelligenceTypes types, CscArtificialIntelligenceType requestedType)
Definition: CscKnowledgeItem.h:39
CscEntityModel.h
conscience_core::knowledge::CscKnowledgeItem::knowledgeType
CscKnowledgeItemType knowledgeType
Definition: CscKnowledgeItem.h:61
CscKnowledgeItemType.h
conscience_core::bridging::commands::environment_objects::optional< string >
const ptr< CscObjectModel > const string const CscPoint3d const CscPoint3d optional< string >
Definition: environmentObjectsCommands.h:373
conscience_core::knowledge::CscKnowledgeItem::LimitsPropeller::getPropellerId
int getPropellerId() const
Definition: CscKnowledgeItem.h:114
CscMemberInputStatus
Definition: CscMemberInputStatus.h:26
conscience_core::knowledge::CscKnowledgeItem::LimitsTranslation::getLimitMin
float getLimitMin() const
Definition: CscKnowledgeItem.h:152
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation::memberValues
CscMemberInputPonderation * memberValues
Definition: CscKnowledgeItem.h:84
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation
Definition: CscKnowledgeItem.h:83
conscience_core::knowledge::CscKnowledgeItem::knowledgeItemId
int knowledgeItemId
Definition: CscKnowledgeItem.h:56
conscience_core::knowledge::CscKnowledgeItem
Definition: CscKnowledgeItem.h:43
conscience_core::knowledge::CscKnowledgeItem::LimitsPropeller::LimitsPropeller
LimitsPropeller(int propellerId, float limitSpeed)
Definition: CscKnowledgeItem.h:112
conscience_core::knowledge::NONE
@ NONE
Definition: CscKnowledgeItem.h:32
conscience_core::knowledge::GENETIC
@ GENETIC
Definition: CscKnowledgeItem.h:33
CscSequence
Definition: CscSequence.h:51
conscience_core::knowledge::CscArtificialIntelligenceType
CscArtificialIntelligenceType
Definition: CscKnowledgeItem.h:27