function m_otimo = UtilidadeProposta(n, C, Pn, Pm, Gnb, Gmb, Gnn, Gmn, Im, Wm, sigma2_m, sigma2_n, q, amostra, processo_envelope)

d_aux = -1;
m_otimo = 0;
[~,tamanhoAmostra]=size(amostra);
curva_servico=zeros(length(C),tamanhoAmostra);

for i=1:length(C)
    m = C(i);
    if (Pn(n)*Gnb(n))<=Im(m)
        r = Wm(m)*log2(1 + (Pm(m)*Gmb(m))/(sigma2_m(m) + Pn(n)*Gnb(n)))+...
                Wm(m)*log2(1 + (Pn(n)*Gnn(n))/(sigma2_n(n) + Pm(m)*Gmn(m,n)));
        curva_servico(m,:) = CalculaCurvaServico(tamanhoAmostra, r, length(C));
        d_estimado = EstimaRetardo( r, q(m), amostra(m,:), curva_servico(m,:) , processo_envelope(m,:) );
        u = d_estimado;
        if u<d_aux
            d_aux = u;
            m_otimo = m;
        end
    end
end

end