Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Pasar parámetros adicionales en enfoque basado en problemas

En un problema de optimización, las funciones de objetivo o restricción a veces tienen parámetros además de la variable independiente. Los parámetros adicionales pueden ser datos, o pueden representar variables que no cambian durante la optimización.

Para incluir estos parámetros en el enfoque basado en problemas, simplemente consulte las variables de espacio de trabajo en sus funciones de objetivo o restricción.

Problema de mínimos cuadrados con datos pasados

Por ejemplo, supongamos que tiene matrices y en el archivo, y estas matrices representan datos para su problema.Cdparticle.mat Cargue los datos en el área de trabajo.

load particle

Ver los tamaños de las matrices.

disp(size(C))
        2000         400 
disp(size(d))
        2000           1 

Cree una variable de optimización de un tamaño adecuado para formar el vector.xC*x

x = optimvar('x',size(C,2));

Cree un problema de optimización para minimizar la suma de los cuadrados de los términos en sujeto a la restricción que no es negativa.C*x – dx

x.LowerBound = 0; prob = optimproblem; expr = sum((C*x - d).^2); prob.Objective = expr;

Usted incluye los datos y en el problema simplemente refiriéndose a ellos en la expresión de función objetiva.Cd Resuelve el problema.

[sol,fval,exitflag,output] = solve(prob)
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
sol = struct with fields:
    x: [400x1 double]

fval = 22.5795 
exitflag =      OptimalSolution  
output = struct with fields:
            message: '...'
          algorithm: 'interior-point'
      firstorderopt: 9.9673e-07
    constrviolation: 0
         iterations: 9
       linearsolver: 'sparse'
       cgiterations: []
             solver: 'lsqlin'

Problema no lineal con parámetros adicionales

Utilice el mismo enfoque para los problemas no lineales. Por ejemplo, supongamos que tiene una función objetiva de varias variables, algunas de las cuales son datos fijos para la optimización.

type parameterfun
function y = parameterfun(x,a,b,c)  y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-c + c*x(2)^2)*x(2)^2; 

Para esta función objetivo, es un vector de 2 elementos y, y son parámetros escalares.xabc Cree la variable de optimización y asigne los valores de parámetro en el área de trabajo.

a = 4; b = 2.1; c = 4; x = optimvar('x',2);

Cree un problema de optimización. Convierta en una expresión de optimización y establezca la expresión convertida como objetivo.parameterfun

prob = optimproblem; expr = fcn2optimexpr(@parameterfun,x,a,b,c); prob.Objective = expr;

Resuelve el problema a partir del punto.x0.x = [1/2;1/2]

x0.x = [1/2;1/2]; [sol,fval] = solve(prob,x0)
Local minimum found.  Optimization completed because the size of the gradient is less than the value of the optimality tolerance. 
sol = struct with fields:
    x: [2x1 double]

fval = -1.0316 

Dado que esta función objetiva es una función racional de, puede especificar el objetivo en términos de la variable de optimización, sin usar.xfcn2optimexpr De cualquier manera, se incluyen los parámetros adicionales simplemente refiriéndose a ellos en la función objetiva.

prob.Objective = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2)...     + (-c + c*x(2)^2)*x(2)^2; [sol,fval] = solve(prob,x0)
Local minimum found.  Optimization completed because the size of the gradient is less than the value of the optimality tolerance. 
sol = struct with fields:
    x: [2x1 double]

fval = -1.0316 

Consulte también

Temas relacionados