我有一个非负约束的优化问题(必须用下面的减号翻译)。约束由下式给出:
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)))));