optimization_engine 0.4.0-alpha

A pure Rust framework for embedded nonconvex optimization. Ideal for robotics!
Documentation
% Minimize ROSENBROCK(u; p)
% subject to: ||u|| <= c
clc;
nu = 5; np = 3;
u = casadi.SX.sym('u', nu);             % decision variables
p = casadi.SX.sym('p', np);             % parameters
phi = rosenbrock(u, p(1:2));            % cost function phi(u; p) (Rosenbrock)
constraints_type_p = [2*norm(u) - p(3); % c(u, p)
                      5*u - 3;
                      3 - 5*u];
nc = length(constraints_type_p);

mu = casadi.SX.sym('mu', nc);
q = [p; mu];

F = phi + mu'*constraints_type_p;
F_fun = casadi.Function('F', {u, q}, {F});


F_fun(ones(nu,1), ones(np+nc,1))

Fgrad = gradient(F, u);
Fgrad_fun = casadi.Function('Fgrad', {u, q}, {Fgrad});

Fgrad_fun(ones(nu,1), ones(np+nc,1))
%%



constraints = OpEnConstraints.make_ball_at_origin(5.0);

opEnBuilder = OpEnOptimizerBuilder()...
    .with_problem(u, p, phi, constraints)...
    .with_build_name('penalty_new')...
    .with_fpr_tolerance(1e-3)...
    .with_constraints_as_penalties(constraints_type_p);

opEnOptimizer = opEnBuilder.build();

%% Consume
clc;
opEnOptimizer.run();
opEnOptimizer.connect();
out = opEnOptimizer.consume([0.5,2,1])
out = opEnOptimizer.consume([0.5,2,1])
opEnOptimizer.stop();