コード例 #1
0
        /// <summary>
        /// If the specified property refers to a static LambdaExpression property, this sets result to that expression with the source
        /// expression supplied as the lambda parameter.
        /// <para/>
        /// Example: i.SomeAggregateExpression
        /// </summary>
        /// <param name="propertyInfo">The property that may or may not contain a LambdaExpression.</param>
        /// <param name="source">The expression that will be given to the LambdaExpression as a parameter.</param>
        /// <param name="result">If successful, represents the body of a LambdaExpression with the source replacing the original LambdaExpression's parameter.</param>
        /// <returns></returns>
        private static bool TryGetExpressionProperty(PropertyInfo propertyInfo, Expression source, out Expression result)
        {
            if (propertyInfo == null)
            {
                throw new InvalidOperationException($"Property on '{source.Type.FullName}' is not valid");
            }
            var propertyTypeInfo = propertyInfo.PropertyType;

            if (!typeof(Expression).GetTypeInfo().IsAssignableFrom(propertyTypeInfo))
            {
                result = null;
                return(false);
            }

            if (!typeof(LambdaExpression).GetTypeInfo().IsAssignableFrom(propertyTypeInfo))
            {
                throw new InvalidOperationException($"Expression properties must return a LambdaExpression. '{propertyInfo.DeclaringType.FullName}.{propertyInfo.Name}'");
            }

            var property = propertyInfo.GetAccessors().FirstOrDefault();

            if (property == null || !property.IsStatic)
            {
                throw new InvalidOperationException($"Expression properties must be static. '{propertyInfo.DeclaringType.FullName}.{propertyInfo.Name}'");
            }

            // j => j.SomeAggregateExpression
            var lambda  = (LambdaExpression)property.Invoke(null, null);
            var changer = new ParamChanger(lambda.Parameters[0], source);

            // i.SomeAggregateExpression
            result = changer.Visit(lambda.Body);
            return(true);
        }
コード例 #2
0
 // Use this for initialization
 void Start()
 {
     GameObject[] objs = GameObject.FindGameObjectsWithTag("optimizable");
     m_optimizablesOBJS = new PcswiseLinear[objs.Length];
     for (int i = 0; i < objs.Length; i++)
     {
         m_optimizablesOBJS[i] = objs[i].GetComponent <PcswiseLinear>();
         m_optimizablesOBJS[i].m_initAsFunc = PcswiseLinear.INITTYPE.LIN_INC;
         m_optimizablesOBJS[i].reset(1.0f);
     }
     m_changer      = new ParamChanger();
     m_optimizables = new IOptimizable[m_optimizablesOBJS.Length];
     for (int i = 0; i < m_optimizables.Length; i++)
     {
         m_optimizables[i] = (IOptimizable)m_optimizablesOBJS[i];
     }
     m_totalScores = new double[m_optimizables.Length];
     ResetScores();
 }
コード例 #3
0
 // Use this for initialization
 void Start()
 {
     GameObject[] objs = GameObject.FindGameObjectsWithTag("optimizable");
     m_optimizablesOBJS = new PcswiseLinear[objs.Length];
     for (int i = 0; i < objs.Length; i++)
     {
         m_optimizablesOBJS[i] = objs[i].GetComponent<PcswiseLinear>();
         m_optimizablesOBJS[i].m_initAsFunc = PcswiseLinear.INITTYPE.LIN_INC;
         m_optimizablesOBJS[i].reset(1.0f);
     }
     m_changer = new ParamChanger();
     m_optimizables = new IOptimizable[m_optimizablesOBJS.Length];
     for (int i = 0; i < m_optimizables.Length; i++)
     {
         m_optimizables[i] = (IOptimizable)m_optimizablesOBJS[i];
     }
     m_totalScores = new double[m_optimizables.Length];
     ResetScores();
 }
コード例 #4
0
ファイル: TestHandler.cs プロジェクト: yazici/promenade
    void Init()
    {
        if (m_sampleCounter == 0)
        {
            m_testCount++;
            Debug.Log("Starting new iteration (no." + m_testCount + ")");
        }

        m_sampleCounter++;
        Debug.Log("Sample " + m_sampleCounter);



        GameObject[] controllerObjects         = GameObject.FindGameObjectsWithTag("optimizable");
        GameObject   bestScoreVisualizerObject = GameObject.FindGameObjectWithTag("bestscore");

        m_optimizableControllers = new Controller[controllerObjects.Length];
        for (int i = 0; i < controllerObjects.Length; i++)
        {
            m_optimizableControllers[i] = controllerObjects[i].GetComponent <Controller>();
            //Debug.Log("cobjsC" + m_optimizableControllers[i]);
        }
        m_bestScoreController = bestScoreVisualizerObject.GetComponent <Controller>();
        if (!m_inited)
        {
            m_changer       = new ParamChanger();
            m_currentParams = new List <List <float> >();
            m_totalScores   = new double[m_optimizableControllers.Length];
            // get bounds for perturbation
            m_paramsMax = m_optimizableControllers[0].GetParamsMax();
            m_paramsMin = m_optimizableControllers[0].GetParamsMin();
            //
            StoreParams();
            m_lastBestParams = new List <float>(m_currentParams[0]);
            PerturbParams(2);
            for (int i = 2; i < m_optimizableControllers.Length; i++)
            {
                IOptimizable opt        = m_optimizableControllers[i];
                List <float> paramslist = new List <float>();
                paramslist.AddRange(m_currentParams[i]);
                //Debug.Log("opt "+opt);
                // Debug.Log("params " + m_currentParams[i]);
                opt.ConsumeParams(paramslist); // consume it to controller
            }

            ResetScores();
            m_inited = true;
        }
        else
        {
            for (int i = 0; i < m_optimizableControllers.Length; i++)
            {
                IOptimizable opt = m_optimizableControllers[i];
                //if (opt != null && i<m_currentParams.Count)
                {
                    List <float> paramslist = new List <float>();
                    paramslist.AddRange(m_currentParams[i]);
                    //Debug.Log("current params "+m_currentParams[i]);
                    opt.ConsumeParams(paramslist); // consume it to controller
                }
            }
            if (m_bestScoreController && m_lastBestParams != null && m_lastBestParams.Count > 0)
            {
                // and the best score visualizer
                IOptimizable opt        = m_bestScoreController;
                List <float> paramslist = new List <float>();
                paramslist.AddRange(m_lastBestParams);
                opt.ConsumeParams(paramslist);
            }
        }
    }
コード例 #5
0
ファイル: TestHandler.cs プロジェクト: jarllarsson/promenade
    void Init()
    {
        if (m_sampleCounter == 0)
        {
            m_testCount++;
            Debug.Log("Starting new iteration (no." + m_testCount + ")");
        }

        m_sampleCounter++;
        Debug.Log("Sample " + m_sampleCounter);

        GameObject[] controllerObjects = GameObject.FindGameObjectsWithTag("optimizable");
        GameObject bestScoreVisualizerObject = GameObject.FindGameObjectWithTag("bestscore");
        m_optimizableControllers = new Controller[controllerObjects.Length];
        for (int i = 0; i < controllerObjects.Length; i++)
        {
            m_optimizableControllers[i] = controllerObjects[i].GetComponent<Controller>();
            //Debug.Log("cobjsC" + m_optimizableControllers[i]);
        }
        m_bestScoreController = bestScoreVisualizerObject.GetComponent<Controller>();
        if (!m_inited)
        {
            m_changer = new ParamChanger();
            m_currentParams = new List<List<float>>();
            m_totalScores = new double[m_optimizableControllers.Length];
            // get bounds for perturbation
            m_paramsMax = m_optimizableControllers[0].GetParamsMax();
            m_paramsMin = m_optimizableControllers[0].GetParamsMin();
            //
            StoreParams();
            m_lastBestParams = new List<float>(m_currentParams[0]);
            PerturbParams(2);
            for (int i = 2; i < m_optimizableControllers.Length; i++)
            {
                IOptimizable opt = m_optimizableControllers[i];
                List<float> paramslist = new List<float>();
                paramslist.AddRange(m_currentParams[i]);
                //Debug.Log("opt "+opt);
               // Debug.Log("params " + m_currentParams[i]);
                opt.ConsumeParams(paramslist); // consume it to controller
            }

            ResetScores();
            m_inited = true;

        }
        else
        {
            for (int i = 0; i < m_optimizableControllers.Length; i++)
            {
                IOptimizable opt = m_optimizableControllers[i];
                //if (opt != null && i<m_currentParams.Count)
                {
                    List<float> paramslist = new List<float>();
                    paramslist.AddRange(m_currentParams[i]);
                    //Debug.Log("current params "+m_currentParams[i]);
                    opt.ConsumeParams(paramslist); // consume it to controller
                }
            }
            if (m_bestScoreController && m_lastBestParams != null && m_lastBestParams.Count>0)
            {
                // and the best score visualizer
                IOptimizable opt = m_bestScoreController;
                List<float> paramslist = new List<float>();
                paramslist.AddRange(m_lastBestParams);
                opt.ConsumeParams(paramslist);
            }
        }
    }