Как найти argmax в блоке cvx в Matlab?

Я пытаюсь найти argmax внутри блока cvx в Matlab. Это просто для того, чтобы найти оптимальную политику для уравнения Беллмана с помощью линейного программирования. В приведенном ниже коде, если я просто сделаю:

k = max(Q)

Он находит максимум списка Q и работает нормально, но как только я это делаю:

[k y] = max(Q)

Чтобы найти argmax списка Q, он жалуется:

??? Error using ==> cvx.max
Too many output arguments.

Есть ли другой способ найти argmax в cvx?

cvx_begin
variable V(N)
minimize(sum(V))

subject to
for s=1:N
    for a=1:A
        for s_next=1:N
            tmp(s_next) = mdp.T{a}(s,s_next)*(mdp.R{a}(s,s_next) + mdp.gamma*V(s_next));
        end
        Q(a) = sum(tmp);
        V(s) >= sum(tmp);
    end
    [k y]=max(Q)
end  
cvx_end

person Sheerberenj    schedule 09.09.2013    source источник


Ответы (1)


В итоге я использовал двойные переменные, чтобы найти оптимальную политику. Я до сих пор не уверен, есть ли способ найти argmax внутри cvx.

person Sheerberenj    schedule 09.09.2013