예제 #1
0
    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)