2015-06-23 87 views
0

我得到了一个simulink模型,包含4个输入,6个输出和16个参数以及4个不同的自写控制器。我需要调整参数以找到它们的优化值。我尝试使用参数估计和响应优化工具以及分析菜单中的其他选项,但是我无法达到我的目标。工具开始估计,但参数值保持不变没有任何变化。我认为这是因为这些工具对单输入和单输出模型有用。有人帮忙吗?在simulink中调整参数

+0

不,它们不适用于单输入单输出模型,它们应该可以工作。在没有看到您的模型以及如何设置参数估计/优化的情况下,不可能知道发生了什么。我怀疑你可能没有正确地设置估计问题。 – am304

+0

你错过了这一点。您需要提供实际的Simulink模型,m个文件,数据等......一切,以便可以复制问题。如果模型非常庞大,您需要提出一个尽可能小的模型来复制问题。 – am304

+0

正如我所说,看到模型和复制问题很难评论。然而,人们犯的一个常见错误是,在初始化模型时会运行某种MATLAB脚本或回调函数,该模型会设置各种变量来对模型进行参数化。这可以覆盖由参数估计设置的变量值,使得所讨论的变量在整个优化过程中永不改变,并且优化失败。您只想设置一次相关数据,而不是每次迭代模型。 – am304

回答

0

从评论中的讨论,听起来好像你正在InitFcn模型回调中定义你的参数值。在进行正常模拟时很好,但问题是在每次模型更新和模拟期间都会执行此回调。这意味着,当使用类似Simulink Design Optimization(它在尝试更改参数值时一遍又一遍地遍历模型)时,InitFcn回调覆盖中为每次迭代定义的值的值(对于相同的参数)正试图设置。这会导致参数在优化过程中永远不会更改值,并保持不变,并且会在模型回调中定义值。

解决这个正确的方法是在PreLoadFcn模型回调,而不是定义模型参数:

PreLoadFcn

  • 模型加载之前。
  • 定义此参数的回调代码对于加载模型使用的变量很有用。

[...]

有关详细信息,请参阅文档中Model Callbacks

如果是其他原因导致参数估计/优化失败,则需要与我们共享您的模型和相关文件。

通常,为了使优化成功的机会最大化,您希望最小化同时进行估计的参数数量(在每个步骤中使用较少数量的参数进行多阶段估计有时可能是一个很好的折中方案)。

+0

你不明白。您在InitFcn回调中定义的任何变量/块参数将覆盖参数估计/优化设置的参数值。您需要将您的MATLAB代码移至PreLoadFcn,否则您的变量将永远不会改变。 – am304

+0

这是我最好的猜测,无论如何没有看到模型,代码和文件 – am304

+0

您需要关闭并打开要执行的回调模型。一旦这些值存在于工作区中并且在每次迭代时都不会被覆盖,它就应该可以工作。正如我所说,如果没有看到模型和文件来复制问题,就很难回答这类问题。 – am304