/// <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); }
// 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(); }
// 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(); }
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); } } }
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); } } }