def compute_cost_value(x): modifiedParams = {} for paramNum in range(len(params2tune)): modifiedParams[params2tune[paramNum]] = x[paramNum] if printVerbose: print "Modified parameters:" print modifiedParams print "" # Run tracking simulation mantra.run_tracking_simulation(FMUMODEL=FMUMODEL, modifiedParams=modifiedParams, inputData=inputData, plotResults=False, saveResults=False, runOnce=False) (t_sim, r_sim, y_sim, w_sim, u_sim) = read_data_csv(dirName=saveDir, fileName=taskModel.split('.')[-1]+'_sim.csv') # Compute cost value if matchOutput: # based on difference between experimental and simulated control signal u(t), given inputs to controller r(t), y(t), and w(t) t_intervals = [t_exp[k+1]-t_exp[k] for k in range(len(t_exp)-1)] u_simulated = numpy.interp(t_exp, t_sim, u_sim) # interpolate recorded command u at simulated time points costVal = numpy.sqrt(numpy.mean(t_intervals*(u_simulated[0:-1] - u_exp[0:-1])**2)) # compare recorded command to simulated command else: # based on tracking error t_intervals = [t_sim[k+1]-t_sim[k] for k in range(len(t_sim)-1)] costVal = numpy.sqrt(numpy.mean(t_intervals*(numpy.array(r_sim[0:-1]) - numpy.array(y_sim[0:-1]))**2)) # compare reference signal to controlled element state if printVerbose: print '\nCurrent x: ' print x print 'Cost value:' print costVal print "" return costVal
print "\n=================================================" print " ManualTracking library -- RunTrackingSimulation " print "=================================================\n" # Load mantra.py from Source folder import os, sys ResourcesDir = os.path.dirname(os.path.realpath(__file__)) sys.path.insert(0, os.path.join(ResourcesDir, 'Source')) import mantra # Import function options and run program import Options mantra.run_tracking_simulation( plotResults = Options.RunTrackingSimulation['plotResults'], saveResults = Options.RunTrackingSimulation['saveResults'], runOnce = True)