2

非負の制約に関する最適化の問題があります (以下のマイナス記号で変換する必要があります)。制約は次のように与えられます。

function
[neg_constraint,zero_con]=metric_con_130830(theta,v_b,spec,selector,time_all,lambda_all)
theta=exp(theta);
g_sum=selector*(lambda_all*theta.*time_all);
%minus v_b-g_sum because I want v_b-g_sum to be positive
neg_constraint=-(v_b-g_sum);
zero_con=[];

制約が時々違反されてもかまいません。特に、ベクトル (v_b-g_sum) のエントリの 20% (またはその他の数) が負であるかどうかは気にしません。コードでそれを効率的に取得する方法はありますか?

簡単な修正はこれを行うことです:

zero_con=sum((v_b-g_sum)<0)./length(g_sum)>.20

しかし、オプティマイザーがこのインジケーター関数でどれだけうまく最小値を見つけられるかは疑問です。これはあまりスムーズではありません。

または、ランダムなサンプル (サイズは 80%) を取得し、その方法で制約を確認することもできます。

zero_con=v_b-g_sum;
zero_con=zero_con(randsample(length(zero_con),round(.8*(length(zero_con)))));
4

1 に答える 1