如何使用fmincon作为fminbd与两个不同的变量

5次观看(过去30天)
Unai韦森特
Unai韦森特 2021年7月8日
评论道: Unai韦森特2021年7月12日
你好,
在尝试测试不同的RL模型时,我遇到了一个问题,我们通过一个函数“loglik”来定义模型,在这个函数中,我通过不同主题(I)的迭代定义不同的输入向量和值,我使用fminbnd来搜索最小值,即0和1的最小和最大极限。U和UU只是与来自两个不同代理的两个不同的数据向量有关。
hh = @(alpha)loglik_modelA(alpha,U,UU);
Aa (i) = fminbnd(hh,0,1);
你(我)= loglik_modelA (aa (i), U, UU);
这很好地工作了,但问题是当我们的模型有更多的参数时,比如说两个。我知道fminbnd被认为是一个单变量函数,我知道fmincon是一个函数,可以帮助我与多个变量。我已经尝试了基于上一段代码的这段代码,但它似乎不工作,因为我知道fmincon背后的逻辑可能略有不同。
hh = @(alpha1,alpha2)loglik_modelB(alpha1,alpha2,U,UU);
Aa (i) = fmincon(hh,alpha1,alpha2,0,1);我期望aa(I)是一个二维矩阵
你(我)= loglik_modelB (aa(我,1),aa(我,2),U, UU);
通常,alpha是与不同预测误差相关的参数,范围从0到1。
任何见解都将受到高度赞赏!
4评论
Unai韦森特
Unai韦森特 2021年7月9日
你的问题和语气对我没有帮助,可能让我觉得自己很渺小,但还是谢谢你。如果这能让你感觉良好,那是好事。

登录发表评论。

接受的答案

艾伦·韦斯
艾伦·韦斯 2021年7月9日
我觉得你应该明白这一点 fmincon 最小化具有单个参数的函数,通常称为 x .的 x 参数可以有任意多的条目。举个例子,如果你的目标函数是三个变量的函数, var1 var2 , var3 , var1 是一个标量(单个实参数), var2 是25个元素的列向量,并且 var3 是一个25 × 25矩阵,那么你的目标函数是 x 看起来是这样的:
函数Val = myfun(x)
Var1 = x(1);
Var2 = x(2:26);
Var2 = Var2 (:);确保var2是列向量
Var3 = x(27:end);
Var3 =重塑(Var3,25,25);
现在用var1, var2和var3进行计算,得到val
当给定初始点x0时,它应该是1 +的列向量
% 25 + 25*25项
结束
是的,这可能令人困惑。这就是为什么最近的MATLAB版本有另一种方法 基于问题的优化工作流 .使用基于问题的方法,以其自然大小定义问题变量。
祝你好运,
艾伦·韦斯
MATLAB数学工具箱文档
2的评论
Unai韦森特
Unai韦森特 2021年7月12日
这是一个关键的答案,函数中引入数据的方式是它起作用的关键,我最终改变了函数,使它有更少的向量。
谢谢 @Alan韦斯 感谢您的回复。
[x, fval] = fmincon (“loglik_modelA”, 0.5, 0.5 ],[],[],[],[],[ 0; 0]、[1;1])

登录发表评论。

更多答案(1)

Kapil古普塔
Kapil古普塔 2021年7月9日
1评论
Unai韦森特
Unai韦森特 2021年7月9日
谢谢你的建议, @Kapil古普塔 .不完全是,我想找到一个alpha,它最小化强化学习算法的对数似然函数,其中有两个,它来自loglik_modelB函数,两个alpha和U, UU作为数据输入。我想做的是用fminbnd进行测试,在从0到1的范围内,尝试为每一个这些alpha达到最小值并将其写入aa(I)矩阵(代码将在迭代循环中,其中I是for循环中的每个主题)。在第一种情况下,只有一个参数,它完全没问题,它完成了工作,aa(i)按照预期写出了alpha的最小值为最大对数可能性(如之前从函数loglik_modelA),但我不能对两个或更多的参数做同样的事情,以最小化每一个额外的参数,在这种情况下,我发布了“alpha1”和“alpha2”,但他们可以更多。
我希望a(ii)是一个二维矩阵所以我可以把它作为函数的输入参数进行下一步。
在查看了这些链接以及来自fmindnd和fmincon的帮助后,我还没有搜索到一个接近我想要的例子。当然,我也有可能在这整件事上眼界狭窄,我应该用不同的眼光看待这件事,但我想我只是缺乏编程方面的专业知识。

登录发表评论。

社区寻宝

在MATLAB中央找到宝藏,并发现社区可以如何帮助你!

开始狩猎!