如何让每个迭代值优化工具箱吗
61(30天)
显示旧的评论
你好,
我用MATLAB优化工具箱。我想知道我怎样才能值在每个迭代中,如目标函数值或变量值。我用fmincon函数。这么长时间我可以只有的最终价值变量和目标函数迭代后的最终价值。我想这些值为每个迭代,拯救他们,但最好是. txt文件或显示在屏幕上。
感谢和问候,雨果·席尔瓦,Eng。MSc。
1评论
克雷格
2019年3月7日
编辑:克雷格
2019年3月7日
我自己的理解导致了一种不同的方法从这些答案这个查询。更正式的和适当的编程方法这一问题,我建议以下这些以前的方法给出的答案。
然而,如果你是
只是
感兴趣的询问和了解正在发生的事情在你的模型中,优化器是如何发展的,你就可以轻松的使用一个简单的审讯全局变量来帮助你这样做。是简单的后删除这段代码不影响生成的代码。
在顶级m脚本调用优化器,声明一个全局变量,说“variable_tracking_array”。在你的目标函数(优化器调用的函数来评估其性能)重新定义全局变量一样。然后分配任何您希望监视变量的函数每次调用的函数。
此外,如果你想要它们堆数组中可以看到整个变量值的顺序计算,简单地定义一个持久变量,说“n_calls”你的目标函数,并增加每次调用函数,并使用它作为索引指定的行(或列)你希望当前的变量集到已经在全球范围内定义的变量数组。
如果你愿意,你可以补充这些数据的信息可以从指定的选项显示迭代信息优化器,在这种情况下,你会得到一个相当完整的进步和优化器的“思考”,是它的工作。
调查快乐!
的例子。
在
主要调用脚本
你的优化器从哪里,如。mainscript.m……
全球variable_tracking_array;% <——创造一个全球跟踪数据
variable_tracking_array = 0 (1000 3);% <——这种情况下我们追踪3变量
在你的
objective_function。m脚本
优化器调用使用@objective_function
以下附近函数中变量声明的开始……
持续的n_calls;% < -这将每次递增函数被调用
如果isempty (n_calls)
n_calls = 0;
结束
全球variable_tracking_array;% < -这是你可以看到全局变量
在相同的
objective_function。m脚本
附近的功能,退出之前,把下面的……
n_calls = n_calls + 1;% <增量每次objective_function完成
variable_tracking_array (n_calls, 1) = variable_1;% < -你可以供应任何局部变量的名字,不仅variable_1: -)
variable_tracking_array (n_calls, 2) = variable_2;
variable_tracking_array (n_calls, 3) = variable_3;
更多的答案(2)
丹尼尔·弗里希
2020年10月7日
你可以用我的函数
outputFcn_global.m
它存储中间结果在一个全局变量,所以你可以检查它。
直接使用这个函数作为解决“OutputFcn”写自己节省了额外的麻烦。