Exemplo n.º 1
0
        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] + ")");
        }
Exemplo n.º 2
0
 public MeasureTools GetMeasureTools()
 {
     if (_measureTools == null)
     {
         _measureTools = MeasureTools.GetMeasure(this.Cataory);
     }
     return(_measureTools);
 }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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() + ",");
        }