KarryMa 2022-10-06 15:51 采纳率: 100%
浏览 36
已结题

有什么调凸优化问题的两个参数的好方法?

问题遇到的现象和发生背景

这里是我的 matlab 代码,cvx目标函数里有两个正则化参数tau1和tau2,我需要设置适当的tau1和tau2值让re1和re2 小于 0.2,我已经尝试了很多很多的值,包括用for循环去找,但仍然不能得到最佳的re1和re2的结果。有没有寻找合适参数的其他方法? 不胜感激! (相比于两个参数都不知道的情况,实际上我知道其中一个参数的最佳值,但是另一个参数怎么调都得不到较好的结果,还有啥好方法吗?比如蒙卡?不会用)

用代码块功能插入代码,请勿粘贴截图
clc;clear
m = 1024;
n = m;
ind_s = floor(m*0.05)
ind_c = ind_s;
x0 = zeros(n,1);
x10_spt = randperm(n);
x0(x10_spt(1:ind_c)) = randn(ind_c,1);
v0 = zeros(m,1);
v0_spt = randperm(m);
v0(v0_spt(1:ind_c)) = randn(ind_c,1);
Phi = 1/sqrt(m) * randn(m,n);
data = real(Phi * x0);
N = 200;
p = (1+data)/2;
s0 = rand(numel(data),N);
P = repmat(p,1,N);
s = P > s0;
s1 = sum(s,2);
s2 = s1/N;
edata = 2*s2-1;
y = edata + v0 ;
% these two parameters I need to tune, I have tried for loop, but can't get
% good results of re1 and re2
tau1=10; 
tau2=0.05;
% Recovery via CVX
cvx_begin quiet
variable x(n) ;
variable v(m);
minimize 0.5*pow_pos(norm(y - Phi * x - v),2) + tau1 * norm(x,1) + tau2 * norm(v,1);              
cvx_end
re1 = norm(x - x0, 2)/ norm(x0, 2);
re2 = norm(v - v0, 2)/ norm(v0, 2);
% need re1 and re2 < 0.2
re1
re2

我的解答思路和尝试过的方法

用for循环去找

我想要达到的结果

设置适当的tau1和tau2值让re1和re2 小于 0.2 (这个结果要求比较灵活,主要是这个调整的方法,有问题随时联系)

  • 写回答

2条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 10月14日
      • 已采纳回答 10月6日
      • 修改了问题 10月6日
      • 请提交代码 10月6日
      • 展开全部

      悬赏问题

      • ¥15 Java的运用111111111111
      • ¥15 koa2 + ts 声明文件不生效
      • ¥15 Mac系统word显示此文档已被删除或当前无法访问.
      • ¥15 Unity用代码实现Tilemap
      • ¥15 怎么求广播地址以及网络地址?
      • ¥15 想知道unity如何实现物体贴地运动
      • ¥15 从A地到B地有多条路径可以到达,现要从A地到B地运物资问题
      • ¥30 用java设计小游戏扑克牌比大小,52张牌的图片选世界篮球明星图或其它都行
      • ¥15 ATM管理员功能代码及解释
      • ¥15 EasyExcel导出下载文件响应流为空