one of the issues is that you need to make sure that the initial iterations perturb the system enough that the value is different. In this case, it is essentially simulating three different scenarios, and getting the same IRMS for all of them, so it has no idea what direction to search. You can use this function to increase the size of the step taken so that it will see differences in the simulation.
this is not necessarily the ideal value, but I was able to run the optimization. You may want to try with a simpler optimization set where you aren't specifying algorithm and tolX until you get the rest working well.
Also, I had to rewrite your funciton to load and close the simulink model based on the changes it was making (without saving them).
options = simset('SrcWorkspace','current');