Main Content

Pasar parámetros adicionales en el enfoque basado en problemas

En un problema de optimización, las funciones objetivo o de restricción, en ocasiones, 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, haga referencia simplemente a las variables del área de trabajo en su función objetivo y su función de restricción.

Problema de mínimos cuadrados con datos pasados

Por ejemplo, suponga que tiene las matrices C y d en el archivo particle.mat y que esas matrices representan datos para su problema. Cargue los datos en su área de trabajo.

load particle

Visualice los tamaños de las matrices.

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

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

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

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

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

Se incluyen los datos C y d en el problema simplemente haciéndose referencia a ellos en la expresión de la función objetivo. Resuelva el problema.

[sol,fval,exitflag,output] = solve(prob)
Solving problem using lsqlin.

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: 'Minimum found that satisfies the constraints....'
          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 problemas no lineales. Por ejemplo, suponga que tiene una función objetivo 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, x es un vector de 2 elementos y a, b y c son parámetros escalares. Cree la variable de optimización y asigne los valores de los parámetros en su área de trabajo.

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

Cree un problema de optimización. Dado que la función objetivo es una función racional de x, puede especificar el objetivo en términos de la variable de optimización. Resuelva el problema comenzando por el punto x0.x = [1/2;1/2].

prob = optimproblem;
prob.Objective = parameterfun(x,a,b,c);
x0.x = [1/2;1/2];
[sol,fval] = solve(prob,x0)
Solving problem using fminunc.

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

Si parameterfun no estuviera compuesta por funciones compatibles, convertiría parameterfun a una expresión de optimización y establecería la expresión convertida como el objetivo. Consulte Operaciones compatibles con variables y expresiones de optimización y Convertir una función no lineal en una expresión de optimización.

expr = fcn2optimexpr(@parameterfun,x,a,b,c);
prob.Objective = expr;
[sol,fval] = solve(prob,x0)
Solving problem using fminunc.

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

Copyright 2018–2020 The MathWorks, Inc.

Consulte también

Temas relacionados