Con la caja de herramientas de MATLAB YALMIP (aviso, desarrollada por mí), sería
x = sdpvar(n,1);
z = sdpvar(m,1);
y = binvar(n,1);
Model = [-z <= A*x-b <= z, sum(x) == 1, x >= 0, sum(y)==5, 0<=x<=y];
Objective = sum(z);
optimize(Model,objective)
value(x)
Si tiene instalado un solucionador de enteros, como intlinprog, se utilizará automáticamente. Si quieres ver cómo es el modelo de intlinprog para hacer ingeniería inversa, puedes utilizar el comando exportar. Sin embargo, como se mencionó anteriormente, si realmente tienes un problema grande, te beneficiarías de un mejor solucionador como cplex, gurobi o mosek (todos disponibles a través de YALMIP y el mismo código)
Dicho esto, la persona perezosa dejaría que la capa de modelado hiciera todo el modelado
Objective = norm(A*x-b,1);
Model = [nnz(x) <= 5, 0 <= x <= 1];
optimize(Model,objective)
Como se ha preguntado en los comentarios, generar muchas soluciones
x = sdpvar(n,1);
z = sdpvar(m,1);
y = binvar(n,1);
Model = [-z <= A*x-b <= z, sum(x) == 1, x >= 0, sum(y)==5, 0<=x<=y];
Objective = sum(z);
result = optimize(Model,Objective);
Model = [Model, Objective <= value(Objective)];
while result.problem == 0
Model = [Model, exclude(y,value(y))]
result = optimize(Model,Objective);
value(x)
end