Conscience Core
CscKnowledgeItemTargetMemberToState.h
Go to the documentation of this file.
1 /*
2  * CscKnowledgeStanding.h
3  *
4  * Created on: 31 mai 2014
5  * Author: ilieszaoui
6  */
7 
8 #ifndef CscKnowledgeItemTargetMemberToState_H_
9 #define CscKnowledgeItemTargetMemberToState_H_
10 
14 #include <random>
15 
17 
19  public:
20  CscKnowledgeItemTargetMemberToState(int knoItemIdIn, string knoItemNameIn, const vector<const TargetMemberValues *> *inputsTargetValuesIn, const vector<const TargetMemberPonderation *> *inputsTargetPercentsIn, map<string, float> *outputsCanMoveValues, CscUnitType unitTypeIn, string targetOriginMember, bool symemtrySearch, int nbStateMax, const map<int, float> &maxDeltaPivotByPivotId, bool optionCutLastestIfTheSameAndWorst, bool optionCutBeginingIfTheSame, bool optionDeltaPerStateMaxDegressive, float percentAvg, float percentMax, float percentExtrapolation, int stateDuration, int stateDelay, float solvedAt, float processedAt, bool outputTypes[], CscArtificialIntelligenceTypes aiTypes, map<int, CscPoint3d*> centerOfMassOfAllMemberByMemberId);
21 
22  void sequencePostTraitment(CscSequence *sequenceIn) override;
23  int getSequenceCountAutorized(float initStateValue) override;
24  float getExtrapolationResult(CscSequence *sequenceIn) override;
25  bool isStatesSupportOf(CscState *state1, CscState *state2) override;
26  bool isObjectiveSupportOf(CscKnowledgeItem *knowledgeItem) override;
27  float evaluateState(CscState *stateIn, const CscWorldEntity *entity, CscState *initialState) override;
29 
41  CscPerson *generatePerson(CscEnvironmentSimulator *environment, const CscWorldEntity *entity, CscState *initialState, int personId, int generationId, CscGeneration *currentGeneration, CscGeneration *previousGeneration) override;
42 
43  int getActionmaxJointDelta(float initStateValue);
44  map<CscStrategyType, float> strategyElitism;
45  map<CscStrategyType, float> strategyProbability;
46 
47  static CscKnowledgeItemTargetMemberToState *create(int targetId, string targetName,
48  vector<string> targetMemberNames,
49  vector<string> relativeToMemberNames,
50  vector<float> posX, vector<float> posY, vector<float> posZ,
51  vector<float> posPondX, vector<float> posPondY, vector<float> posPondZ,
52  vector<float> pitch, vector<float> yaw, vector<float> roll,
53  vector<float> pitchPond, vector<float> yawPond, vector<float> rollPond,
54  vector<float> accX, vector<float> accY, vector<float> accZ,
55  vector<float> accPondX, vector<float> accPondY, vector<float> accPondZ,
56  vector<string> outputsCanMoveNames, vector<float> outputsCanMovePonderations,
57  CscUnitType unitType, string targetOriginMember,
58  bool symemtrySearch,
59  int nbStateMax, const map<int, float> &maxDeltaPivotByPivotId,
60  bool optionCutLastestIfTheSameAndWorst,
61  bool optionCutBeginingIfTheSame,
62  bool optionDeltaPerStateMaxDegressive,
63  float percentAvg,
64  float percentMax,
65  float percentExtrapolation,
66  int stateDuration,
67  int stateDelay,
68  float solvedAt,
69  float processedAt,
70  bool outputTypes[],
72  map<int, CscPoint3d*> centerOfMassOfAllMemberByMemberId) {
73 
74  vector<const TargetMemberValues *> *targetMembersValues = new vector<const TargetMemberValues *>();
75  vector<const TargetMemberPonderation *> *inputsTargetPercents = new vector<const TargetMemberPonderation *>();
76 
77  // State objective
78  for (int i = 0; i < targetMemberNames.size(); i++) {
79  TargetMemberValues *targetMemberVal = new TargetMemberValues();
80  CscMemberInputStatus *inputsFinalCore = new CscMemberInputStatus(targetMemberNames.at(i));
81  map<CscInputType, float> inputsTargetValuesCore;
82  inputsTargetValuesCore[POS_X] = posX.at(i);
83  inputsTargetValuesCore[POS_Y] = posY.at(i);
84  inputsTargetValuesCore[POS_Z] = posZ.at(i);
85  inputsTargetValuesCore[PITCH] = pitch.at(i);
86  inputsTargetValuesCore[YAW] = yaw.at(i);
87  inputsTargetValuesCore[ROLL] = roll.at(i);
88  inputsTargetValuesCore[ACC_X] = accX.at(i);
89  inputsTargetValuesCore[ACC_Y] = accY.at(i);
90  inputsTargetValuesCore[ACC_Z] = accZ.at(i);
91  inputsFinalCore->values = inputsTargetValuesCore;
92  targetMemberVal->memberValues = inputsFinalCore;
93  targetMemberVal->relativeToMemberName = relativeToMemberNames.at(i);
94  targetMembersValues->push_back(targetMemberVal);
95  }
96 
97  // State Percents
98  for (int i = 0; i < targetMemberNames.size(); i++) {
99  TargetMemberPonderation *targetMemberPonderation = new TargetMemberPonderation();
100  CscMemberInputPonderation *percentsFInalCore = new CscMemberInputPonderation(targetMemberNames.at(i));
101  map<CscInputType, float> inputsTargetPercentsCore;
102  inputsTargetPercentsCore[POS_X] = posPondX.at(i);
103  inputsTargetPercentsCore[POS_Y] = posPondY.at(i);
104  inputsTargetPercentsCore[POS_Z] = posPondZ.at(i);
105  inputsTargetPercentsCore[PITCH] = pitchPond.at(i);
106  inputsTargetPercentsCore[YAW] = yawPond.at(i);
107  inputsTargetPercentsCore[ROLL] = rollPond.at(i);
108  inputsTargetPercentsCore[ACC_X] = accPondX.at(i);
109  inputsTargetPercentsCore[ACC_Y] = accPondY.at(i);
110  inputsTargetPercentsCore[ACC_Z] = accPondZ.at(i);
111  percentsFInalCore->values = inputsTargetPercentsCore;
112  targetMemberPonderation->memberValues = percentsFInalCore;
113  targetMemberPonderation->relativeToMemberName = relativeToMemberNames.at(i);
114  inputsTargetPercents->push_back(targetMemberPonderation);
115  }
116 
117  // OutputsCanMove
118  map<string, float> *outputsCanMoveValues = new map<string, float>;
119  for (int i = 0; i < outputsCanMoveNames.size(); i++) {
120  if (outputsCanMovePonderations.at(i) > 0.0f) {
121  string name = outputsCanMoveNames.at(i);
122  float ponderation = outputsCanMovePonderations.at(i);
123  outputsCanMoveValues->insert({name, ponderation});
124  }
125  }
126 
127  return new CscKnowledgeItemTargetMemberToState(targetId, targetName, targetMembersValues, inputsTargetPercents, outputsCanMoveValues, unitType, targetOriginMember, symemtrySearch, nbStateMax, maxDeltaPivotByPivotId, optionCutLastestIfTheSameAndWorst, optionCutBeginingIfTheSame, optionDeltaPerStateMaxDegressive, percentAvg, percentMax, percentExtrapolation, stateDuration, stateDelay, solvedAt, processedAt, outputTypes, aiTypes, centerOfMassOfAllMemberByMemberId);
128  }
129 
135  int findBestStateIndex(CscSequence *parentSequence);
136 
138  public :
141  float lateralMove;
142  float stepSize;
144 
145  InverseKinematicParams(float loweringPelvis, float footElevation, float lateralMove, float stepSize) :
146  loweringPelvis(loweringPelvis),
147  footElevation(footElevation),
148  lateralMove(lateralMove),
149  stepSize(stepSize),
150  objectiveValue(0.0f) {
151  }
152  };
153 
154  vector<InverseKinematicParams> allParams;
155 
156  private:
157  map<int, CscPoint3d*> centerOfMassOfAllMemberByMemberId;
158 
164  map<int, float> lotteryWheelCreation(CscGeneration *previousGeneration);
165 
181  CscSequence *drawLotteryWheel(CscGeneration *previousGeneration, map<int, float> lotteryWheel, float totalScoreGeneration, int previousGenerationSize, vector<CscPerson *> *parents);
182 
190  CscSequence *drawOneParentLotteryWheel(CscGeneration *previousGeneration, vector<CscPerson *> *parents, map<int, float> lotteryWheel);
191 
209  CscSequence *selectOneParentByTournament(CscState *initialState, CscGeneration *previousGeneration, unsigned nbParticipants, float probaForBest, vector<CscPerson *> *parents, const CscEntityModel *entityModel, optional<int> nbStateAdded = {});
210 
222  CscSequence *crossover(CscSequence *firstParentSequence, CscSequence *secondParentSequence, int indexCrossing, CscSequence *sequence, const CscEntityModel *entity);
223 
235  CscSequence *horizontalCrossover(CscSequence *firstParentSequence, CscSequence *secondParentSequence, const CscEntityModel *entityModel, CscState *initialState);
236 
246  CscSequence *rightLeftCrossover(CscSequence *firstParent, CscSequence *secondParent, const CscEntityModel *entity);
247 
256  float randomInterpolationValue(float previousValue, float nextValue, float minValue, float maxValue);
265  CscState *mutationState(const CscEntityModel *robotModel, CscState *previousState, CscState *nextState, bool symmetry);
266 
275  CscSequence *symetryRightLeftMutation(CscSequence *initSequence, const CscEntityModel *entityModel);
276 
282  bool findBestParent(vector<CscPerson *> *parents);
283 
293  CscSequence *randomCompleteSequence(CscSequence *initSequence, const CscEntityModel *entityModel, optional<int> nbStateAdded = {}, bool sameProgressionRightLeft = false);
294 
303  CscSequence *randomStrategy(const CscEntityModel *entityModel, CscState *initialState);
304 
305  /*
306  Return state’s id before first drop in objective value of a certain value.
307  * dropTolerance sets this value
308  If nothing exceeds the dropTolerance then we return the index before biggest drop in objective value
309  */
310  int findIdOfStateBeforeFirstDropObjectiveValue(CscSequence *sequence, float dropTolerance);
311 
318  CscStrategyType randomlyDrawStrategyType(const CscEntityModel *entityModel) const;
319 
320  /*
321  Creates a complete sequence from the initial state with InverseKinematic.
322  */
323  CscSequence *inverseKinematic(const CscWorldEntity *entity, CscState *initialState, vector<vector<CscJacobianInverseKinematic::TargetIKParams*>> targetsForAllState, CscEnvironmentSimulator *environment);
324 
337  void modifyIKTargetWithRegression(optional<vector<vector<CscJacobianInverseKinematic::TargetIKParams*>>> targetsInverseKinematic, const vector<vector<float>> &data);
338 
353  void duplicateStepForWalk(const CscWorldEntity *entity, CscSequence *sequenceToModify);
354 
355  public:
364  tuple<CscSequence*, vector<CscPerson *>*> createPersonWithChosenStrategy(CscStrategyType strategy, const CscWorldEntity *entity, CscState *initialState, CscGeneration *previousGeneration, CscEnvironmentSimulator *environment, optional<vector<vector<CscJacobianInverseKinematic::TargetIKParams*>>> targetsInverseKinematic);
365  };
366 
367 }
368 
369 #endif /* CscKnowledgeItemTargetGenetic_H_ */
POS_Y
@ POS_Y
Definition: CscMemberInputStatus.h:15
CscWorldEntity
Definition: CscWorldEntity.h:19
conscience_core::knowledge::CscKnowledgeItemTarget
Definition: CscKnowledgeItemTarget.h:22
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::create
static CscKnowledgeItemTargetMemberToState * create(int targetId, string targetName, vector< string > targetMemberNames, vector< string > relativeToMemberNames, vector< float > posX, vector< float > posY, vector< float > posZ, vector< float > posPondX, vector< float > posPondY, vector< float > posPondZ, vector< float > pitch, vector< float > yaw, vector< float > roll, vector< float > pitchPond, vector< float > yawPond, vector< float > rollPond, vector< float > accX, vector< float > accY, vector< float > accZ, vector< float > accPondX, vector< float > accPondY, vector< float > accPondZ, vector< string > outputsCanMoveNames, vector< float > outputsCanMovePonderations, CscUnitType unitType, string targetOriginMember, bool symemtrySearch, int nbStateMax, const map< int, float > &maxDeltaPivotByPivotId, bool optionCutLastestIfTheSameAndWorst, bool optionCutBeginingIfTheSame, bool optionDeltaPerStateMaxDegressive, float percentAvg, float percentMax, float percentExtrapolation, int stateDuration, int stateDelay, float solvedAt, float processedAt, bool outputTypes[], CscArtificialIntelligenceTypes aiTypes, map< int, CscPoint3d * > centerOfMassOfAllMemberByMemberId)
Definition: CscKnowledgeItemTargetMemberToState.h:47
CSC_DLL_IMPORTEXPORT
#define CSC_DLL_IMPORTEXPORT
Definition: os.h:34
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams::objectiveValue
float objectiveValue
Definition: CscKnowledgeItemTargetMemberToState.h:143
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues::memberValues
CscMemberInputStatus * memberValues
Definition: CscKnowledgeItem.h:79
CscJacobianInverseKinematic.h
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams::InverseKinematicParams
InverseKinematicParams(float loweringPelvis, float footElevation, float lateralMove, float stepSize)
Definition: CscKnowledgeItemTargetMemberToState.h:145
CscUnitType
CscUnitType
Definition: CscUnitType.h:14
CscEntityModel
Definition: CscEntityModel.h:54
ACC_Y
@ ACC_Y
Definition: CscMemberInputStatus.h:14
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::strategyProbability
map< CscStrategyType, float > strategyProbability
Definition: CscKnowledgeItemTargetMemberToState.h:45
CscMemberInputStatus::values
map< CscInputType, float > values
Definition: CscMemberInputStatus.h:56
ROLL
@ ROLL
Definition: CscMemberInputStatus.h:16
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams
Definition: CscKnowledgeItemTargetMemberToState.h:137
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::allParams
vector< InverseKinematicParams > allParams
Definition: CscKnowledgeItemTargetMemberToState.h:154
ACC_Z
@ ACC_Z
Definition: CscMemberInputStatus.h:14
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams::loweringPelvis
float loweringPelvis
Definition: CscKnowledgeItemTargetMemberToState.h:139
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams::footElevation
float footElevation
Definition: CscKnowledgeItemTargetMemberToState.h:140
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState
Definition: CscKnowledgeItemTargetMemberToState.h:18
conscience_core::knowledge::CscArtificialIntelligenceTypes
uint64_t CscArtificialIntelligenceTypes
Definition: CommandParser.h:21
conscience_core::knowledge
Definition: CscEntityReflexion.h:35
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::strategyElitism
map< CscStrategyType, float > strategyElitism
Definition: CscKnowledgeItemTargetMemberToState.h:44
PITCH
@ PITCH
Definition: CscMemberInputStatus.h:16
CscPerson
Definition: CscPerson.h:19
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues::relativeToMemberName
optional< string > relativeToMemberName
Definition: CscKnowledgeItem.h:80
CscKnowledgeItemTarget.h
CscState
Definition: CscState.h:24
conscience_core::knowledge::CscKnowledgeItem::TargetMemberValues
Definition: CscKnowledgeItem.h:78
CscGeneration
Definition: CscGeneration.h:20
conscience_core::knowledge::CscKnowledgeItem::TargetMemberPonderation::relativeToMemberName
optional< string > relativeToMemberName
Definition: CscKnowledgeItem.h:85
POS_Z
@ POS_Z
Definition: CscMemberInputStatus.h:15
CscMemberInputPonderation
Definition: CscMemberInputPonderation.h:19
CscStrategyType
CscStrategyType
Definition: CscStrategyType.h:11
YAW
@ YAW
Definition: CscMemberInputStatus.h:16
CscStrategyType.h
POS_X
@ POS_X
Definition: CscMemberInputStatus.h:15
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams::lateralMove
float lateralMove
Definition: CscKnowledgeItemTargetMemberToState.h:141
CscEnvironmentSimulator
Definition: CscEnvironmentSimulator.h:31
CscMemberInputPonderation::values
map< CscInputType, float > values
Definition: CscMemberInputPonderation.h:22
f
double f
Definition: HybridAStar.cpp:190
CscMemberInputStatus
Definition: CscMemberInputStatus.h:26
conscience_core::knowledge::CscKnowledgeItemTargetMemberToState::InverseKinematicParams::stepSize
float stepSize
Definition: CscKnowledgeItemTargetMemberToState.h:142
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
Definition: CscKnowledgeItem.h:43
CscSequence
Definition: CscSequence.h:51
i
int i
Definition: HybridAStar.cpp:191
ACC_X
@ ACC_X
Definition: CscMemberInputStatus.h:14