J'ai besoin de résoudre (plusieurs fois, pour de nombreuses données, en plus d'un tas d'autres choses) ce qui, selon moi, se résume à une Programme de cônes du second ordre . Elle peut être exprimée succinctement en CVX quelque chose comme ça :
cvx_begin
variable X(2000);
expression MX(2000);
MX = M * X;
minimize( norm(A * X - b) + gamma * norm(MX, 1) )
subject to
X >= 0
MX((1:500) * 4 - 3) == MX((1:500) * 4 - 2)
MX((1:500) * 4 - 1) == MX((1:500) * 4)
cvx_end
Les longueurs de données et les modèles de contraintes d'égalité présentés ne sont que des valeurs arbitraires tirées de certaines données de test, mais la forme générale sera sensiblement la même, avec deux termes objectifs - l'un minimisant l'erreur, l'autre encourageant la sparsité - et un grand nombre de contraintes d'égalité sur les éléments d'une version transformée de la variable d'optimisation (elle-même contrainte à être non négative).
Cela semble fonctionner assez bien, bien mieux que mon approche précédente, qui truque les contraintes de manière tout à fait pourrie. Le problème, c'est que tout le reste se passe en R, et qu'il serait assez ennuyeux de devoir le porter à Matlab. Alors, est-il possible de faire cela en R, et si oui, comment ?
Cela se résume en fait à deux questions distinctes :
1) Existe-t-il de bonnes ressources R pour cela ? D'après ce que je peux dire de la Page des tâches du CRAN les options du paquet SOCP sont CLSCOP y DWD qui comprend un solveur SOCP en complément de son classificateur. Les deux ont des interfaces similaires mais assez opaques et sont un peu pauvres en documentation et en exemples, ce qui nous amène à.. :
2) Quelle est la meilleure façon de représenter le problème ci-dessus dans le format de bloc de contraintes utilisé par ces paquets ? La syntaxe CVX ci-dessus cache beaucoup de manipulations fastidieuses avec des variables supplémentaires et d'autres éléments, et je me vois bien passer des heures à faire des calculs. semaines J'essaie de bien faire les choses, donc tous les conseils ou les pointeurs pour me mettre dans la bonne direction seraient les bienvenus...