public override String GetValueText(Vector value = null) { if (value == null) { value = Value; } if (value == null) { return(""); } if (this.getGene().AbstractLevel == 0) { return(value[0].ToString("F4")); } List <String> names = this.getGene().AbstractLevelNames; if (names == null) { return(value.ToString()); } int sectionCount = this.getGene().SampleCount; int rankIndex = MeasureTools.GetMeasure(this.Cataory).getRankedIndex(value, this.getGene().AbstractLevel, sectionCount); return(value[0].ToString("F4") + "(" + names[rankIndex] + ")"); }
public MeasureTools GetMeasureTools() { if (_measureTools == null) { _measureTools = MeasureTools.GetMeasure(this.Cataory); } return(_measureTools); }
/// <summary> /// 切换期望姿态和目标姿态 /// 如果是正向的,让目标姿态为当前姿态向期望姿态靠近,期望姿态向最优姿态靠近 /// 如果是负向的,让目标姿态为当前姿态远离期望姿态,期望姿态取当前姿态 /// </summary> /// <param name="optimaGesture"></param> /// <param name="expectGesture"></param> /// <param name="curGesture"></param> /// <param name="direction"></param> /// <returns></returns> private (Vector objectiveGesture, Vector nextExpectGesture) switchObjectiveGesture(Vector optimaGesture, Vector expectGesture, Vector curGesture, int direction) { Vector objectiveGesture = new Vector(true, curGesture.Size), nextExpectGesture = new Vector(true, expectGesture.Size); double MOVEDISTANCE = 0.1; List <Receptor> gestureReceptors = net.GesturesReceptors; List <MeasureTools> measureTools = gestureReceptors.ConvertAll(g => MeasureTools.GetMeasure(g.getGene().Cataory)); for (int i = 0; i < optimaGesture.Size; i++) { double d1 = measureTools[i].distance(optimaGesture[i], expectGesture[i]); double d2 = measureTools[i].distance(optimaGesture[i], curGesture[i]); double d3 = measureTools[i].distance(expectGesture[i], curGesture[i]); if (direction > 0) { if (d1 < d2)//期望姿态比当前姿态距离最优姿态更近 { objectiveGesture[i] = measureTools[i].moveTo(curGesture[i], expectGesture[i], 1, Math.Min(d2, MOVEDISTANCE)); nextExpectGesture[i] = measureTools[i].moveTo(expectGesture[i], optimaGesture[i], 1, Math.Min(d1, MOVEDISTANCE)); } else//期望姿态比当前姿态距离最优姿态更远或者一样,说明反过来了 { objectiveGesture[i] = measureTools[i].moveTo(curGesture[i], expectGesture[i], 1, Math.Min(d3, MOVEDISTANCE)); nextExpectGesture[i] = measureTools[i].moveTo(expectGesture[i], optimaGesture[i], 1, Math.Min(d1, MOVEDISTANCE)); } } else if (direction < 0) { if (d1 < d2)//期望姿态比当前姿态距离最优姿态更近 { objectiveGesture[i] = measureTools[i].moveTo(curGesture[i], expectGesture[i], -1, Math.Min(d2, MOVEDISTANCE)); nextExpectGesture[i] = curGesture[i]; } else//期望姿态比当前姿态距离最优姿态更远或者一样,说明反过来了 { objectiveGesture[i] = measureTools[i].moveTo(curGesture[i], optimaGesture[i], 1, Math.Min(d2, MOVEDISTANCE)); nextExpectGesture[i] = curGesture[i]; } } else { objectiveGesture[i] = curGesture[i]; nextExpectGesture[i] = expectGesture[i]; } } return(objectiveGesture, nextExpectGesture); }
public double getRankedValue(double originValue) { if (this.getGene().AbstractLevel == 0) { return(originValue); } int sampleCount = getGene().SampleCount; if (sampleCount <= 0) { return(originValue); } return(MeasureTools.GetMeasure(this.Cataory).getRankedValue(originValue, this.getGene().AbstractLevel, sampleCount)); }
private int getAbstractSectionCount(int abstraceLevel) { Configuration.Sensor s = Session.GetConfiguration().agent.receptors.GetSensor(this.name); if (s != null && s.Levels != null && abstraceLevel <= s.Levels.Count) { return(abstraceLevel == 0?s.Levels[abstraceLevel]: s.Levels[abstraceLevel - 1]); } MeasureTools mt = MeasureTools.GetMeasure(this.cataory); if (mt == null) { throw new Exception(this.Name + "无法完成分级:" + abstraceLevel.ToString() + ","); } if (mt.Levels != null && abstraceLevel <= mt.Levels.Count) { return(abstraceLevel == 0 ? mt.Levels[abstraceLevel] : mt.Levels[abstraceLevel - 1]); } throw new Exception(this.Name + "无法完成有效分级:" + abstraceLevel.ToString() + ","); }