【问题标题】:optimisation in Matlab: how to define constraints for parametersMatlab中的优化:如何定义参数的约束
【发布时间】:2016-11-05 18:54:08
【问题描述】:

我正在尝试在 Matlab 中估计一个 Beta-Binomial 模型(数据集可用 here)。

我的似然函数:

function  out= log_Lik(x,Data);

ms=Data(:,1);
xs=Data (:,2);

alpha=x(1)
beta=x(2)


P12=exp(gammaln(ms+1)-gammaln(xs+1)-gammaln(ms- xs+1)).*exp(gammaln(alpha+xs)+gammaln(beta+ms-xs)-gammaln(alpha+beta+ms));
P3= exp(gammaln(alpha+beta)-gammaln(alpha)-gammaln(beta));
P=P12.*P3;
Like=log(P);
out= -sum(Like);

我的最大似然估计代码:

Data=readtable('prob3.xls');

ms=Data.m_s;
xs=Data.x_s;

%% Data parsed to optimisation function
Data = [ms xs ];

f = @(x)log_Lik(x, Data);

%%
options = optimoptions('fminunc','Display','iter','Algorithm','quasi-  newton','MaxIter',10000,'TolX',10^-30,'TolFun',10^-30);
alpha0 = 1;
beta0=1;
x0 = [alpha0 beta0];
[x,fval,exitflag,output,grad,hessian] = fminunc(f,x0,options)

但是,当我运行上述代码时,我收到一条错误消息:

Error using gammaln
Input must be nonnegative.

我认为这是在优化似然函数的同时将随机负值传递给alpha。现在我想知道在运行优化命令时是否有任何方法可以为作为我的参数传递的值(alphabeta)定义约束。任何提示将不胜感激。

【问题讨论】:

  • 使用 fmincon 并添加约束以保持 alpha 为正
  • 谢谢马修!你能让我知道我的代码在哪里以及如何适应吗?抱歉,我对 matlab 很陌生

标签: matlab optimization


【解决方案1】:

fminunc,您当前使用的函数,找到一个无约束优化问题的局部最小值。

另一方面,fmincon 找到约束优化问题的局部最小值。

看来你有一个约束,alpha 应该是正的,所以你应该使用 fmincon 并传入约束。

fmincon 的操作与 fminunc 类似。您应该将“optimoptions('fminunc'...”更改为“optimoptions('fmincon'...”)

您希望设置[0; -inf] 的下限以保持 alpha 非负数。对于您不关心的其他输入,只需传递一个空数组[]

documentation for fmincon 会比我有时间在这里写的任何东西都更清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2013-12-25
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多