使用fmincon时出错,hack修复了它,但我对此感到不安

时间:2012-05-14 20:46:59

标签: matlab mathematical-optimization nonlinear-optimization

使用fmincon时出现了一个奇怪的错误。有关目标函数和非线性约束函数的详细信息很多,所以如果可能的话,我将尝试提出这个问题而不进行描述。

最小化需要单个输入。对于某些但不是所有输入,我收到以下错误:

Subscript indices must either be real positive integers or logicals.

Error in qpsub>eqnsolv (line 888)
    ACTSET = A(ACTIND,:);

Error in qpsub (line 157)
[Q,R,A,B,X,Z,how,ACTSET,ACTIND,ACTCNT,aix,eqix,neqcstr,ncstr, ...

Error in nlconst (line 619)
    [SD,lambda,exitflagqp,outputqp,howqp,ACTIND] ...

Error in fmincon (line 794)
[X,FVAL,LAMBDA,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...

Error in PauliApproximate2.unitalChannelApproximate (line 170)
        [pc, distance] = fmincon(@objective,x0, A, b, Aeq, beq,lb,ub, @constraint,
        options);

当我检查ACTIND的值时,如果它等于[0]则抛出错误,因此索引错误。类似于this thread的OP在行之前(在qpsub中)

的黑客攻击
ACTSET = A(ACTIND,:);

我把if语句:

    if max(ACTIND) < 1
        ACTIND = [1];
    end

从初步测试来看,这似乎是“解决”问题。它为那些用于抛出错误的输入提供了明智的结果(因为它返回了一个良好的最小值,并且约束在公差范围内得到满足),并且返回与它一直没有的输入相同的结果。错误(显然,因为不会调用if语句)。所以我的问题是,对于那些了解这些功能的内部运作的人来说,这有多糟糕?我是否回避了一个可怕的问题,导致ACTIND为[0],我不应该这样做?

0 个答案:

没有答案