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

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

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

这里是我的 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条回答 默认 最新

  • ·星辰大海 2022-10-06 17:48
    关注

    粒子群,遗传算法,进化演化算法有了解过吗?如果要用的话matlab里面有集成好的工具箱,题主可以逐一尝试一下。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘