Main Content

fgoalattain

Resolver problemas multiobjetivo de consecución de metas

Descripción

fgoalattain resuelve el problema de consecución de metas, una formulación para minimizar un problema de optimización multiobjetivo.

fgoalattain encuentra el mínimo de un problema especificado por

minimizex,γ γ such that {F(x)weightγgoalc(x)0ceq(x)=0AxbAeqx=beqlbxub.

weight, goal, b y beq son vectores, A y Aeq son matrices y F(x), c(x) y ceq(x) son funciones que devuelven vectores. F(x), c(x) y ceq(x) pueden ser funciones no lineales.

x, lb y ub se pueden pasar como vectores o matrices; consulte Argumentos de matriz.

ejemplo

x = fgoalattain(fun,x0,goal,weight) intenta que las funciones objetivo suministradas por fun alcancen las metas especificadas por goal variando x, empezando por x0, con la ponderación especificada por weight.

Nota

En Pasar parámetros adicionales se explica cómo pasar parámetros adicionales a las funciones objetivo y a las funciones de restricción no lineales, si fuera necesario.

ejemplo

x = fgoalattain(fun,x0,goal,weight,A,b) resuelve el problema de consecución de metas sujeto a las desigualdades A*x ≤ b.

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq) resuelve el problema de consecución de metas sujeto a las igualdades Aeq*x = beq. Si no existen desigualdades, establezca A = [] y b = [].

ejemplo

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub) resuelve el problema de consecución de metas sujeto a los límites lb x ub. Si no existen igualdades, establezca Aeq = [] y beq = []. Si x(i) está desacotado por abajo, establezca lb(i) = -Inf; si x(i) está desacotado por arriba, establezca ub(i) = Inf.

Nota

Si los límites de entrada especificados para un problema son inconsistentes, la salida x es x0 y la salida fval es [].

ejemplo

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) resuelve el problema de consecución de metas sujeto a las desigualdades no lineales c(x) o a las igualdades ceq(x) que se definen en nonlcon. fgoalattain optimiza de forma que c(x) ≤ 0 y ceq(x) = 0. Si no existen límites, establezca lb = [] o ub = [], o ambas.

ejemplo

x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options) resuelve el problema de consecución de metas con las opciones de optimización especificadas en options. Utilice optimoptions para configurar estas opciones.

x = fgoalattain(problem) resuelve el problema de consecución de metas para problem, una estructura descrita en problem.

ejemplo

[x,fval] = fgoalattain(___), para cualquier sintaxis, devuelve los valores de las funciones objetivo calculadas en fun en la solución x.

ejemplo

[x,fval,attainfactor,exitflag,output] = fgoalattain(___) devuelve además el factor de consecución en la solución x, un valor exitflag que describe la condición de salida de fgoalattain y una estructura output con información sobre el proceso de optimización.

ejemplo

[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(___) devuelve adicionalmente una estructura lambda cuyos campos contienen los multiplicadores de Lagrange en la solución x.

Ejemplos

contraer todo

Considere la función de dos objetivos

F(x)=[2+(x-3)25+x2/4].

Esta función minimiza claramente F1(x) en x=3, alcanzando el valor 2, y minimiza F2(x) en x=0, alcanzando el valor 5.

Establezca la meta [3,6] y la ponderación [1,1] y resuelva el problema de consecución de metas empezando por x0 = 1.

fun = @(x)[2+(x-3)^2;5+x^2/4];
goal = [3,6];
weight = [1,1];
x0 = 1;
x = fgoalattain(fun,x0,goal,weight)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 2.0000

Encuentre el valor de F(x) en la solución.

fun(x)
ans = 2×1

    3.0000
    6.0000

fgoalattain alcanza exactamente las metas.

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6], la ponderación es [1,1] y la restricción lineal es x1+x24.

Cree la función objetivo, la meta y la ponderación.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Cree las matrices de restricciones lineales A y b que representan A*x <= b.

A = [1,1];
b = 4;

Establezca un punto inicial [1,1] y resuelva el problema de consecución de metas.

x0 = [1,1];
x = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

Encuentre el valor de F(x) en la solución.

fun(x)
ans = 2×1

    3.1484
    6.1484

fgoalattain no alcanza las metas. Como las ponderaciones son iguales, el solver no alcanza cada meta en la misma medida.

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6], la ponderación es [1,1] y los límites son 0x13 y 2x25.

Cree la función objetivo, la meta y la ponderación.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Cree los límites.

lb = [0,2];
ub = [3,5];

Establezca el punto inicial [1,4] y resuelva el problema de consecución de metas.

x0 = [1,4];
A = []; % no linear constraints
b = [];
Aeq = [];
beq = [];
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.6667    2.3333

Encuentre el valor de F(x) en la solución.

fun(x)
ans = 2×1

    2.8889
    5.8889

fgoalattain alcanza sobradamente las metas. Como las ponderaciones son iguales, el solver supera cada meta en la misma medida.

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6], la ponderación es [1,1] y la restricción no lineal es x24.

Cree la función objetivo, la meta y la ponderación.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

La función de restricción no lineal está en el archivo norm4.m.

type norm4
function [c,ceq] = norm4(x)
ceq = [];
c = norm(x)^2 - 4;

Cree argumentos de entrada vacíos para las restricciones lineales y los límites.

A = [];
Aeq = [];
b = [];
beq = [];
lb = [];
ub = [];

Establezca el punto inicial [1,1] y resuelva el problema de consecución de metas.

x0 = [1,1];
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,@norm4)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    1.1094    1.6641

Encuentre el valor de F(x) en la solución.

fun(x)
ans = 2×1

    4.5778
    7.1991

fgoalattain no alcanza las metas. A pesar de la igualdad de ponderaciones, F1(x) está a 1,58 de su meta de 3 y F2(x) está a 1,2 de su meta de 6. La restricción no lineal impide que la solución x alcance las metas por igual.

Monitorice un proceso de solución de consecución de metas estableciendo opciones para devolver una visualización iterativa.

options = optimoptions('fgoalattain','Display','iter');

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6], la ponderación es [1,1] y la restricción lineal es x1+x24.

Cree la función objetivo, la meta y la ponderación.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Cree las matrices de restricciones lineales A y b que representan A*x <= b.

A = [1,1];
b = 4;

Cree argumentos de entrada vacíos para las restricciones lineales de igualdad, límites y restricciones no lineales.

Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];

Establezca un punto inicial [1,1] y resuelva el problema de consecución de metas.

x0 = [1,1];
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
                 Attainment        Max     Line search     Directional 
 Iter F-count        factor    constraint   steplength      derivative   Procedure 
    0      4              0             4                                            
    1      9             -1           2.5            1          -0.535     
    2     14     -1.712e-08        0.2813            1           0.883     
    3     19         0.1452      0.005926            1           0.883     
    4     24         0.1484     2.868e-06            1           0.883     
    5     29         0.1484     6.666e-13            1           0.883    Hessian modified  

Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

El valor positivo del factor de consecución comunicado indica que fgoalattain no encuentra una solución que satisfaga las metas.

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6], la ponderación es [1,1] y la restricción lineal es x1+x24.

Cree la función objetivo, la meta y la ponderación.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Cree las matrices de restricciones lineales A y b que representan A*x <= b.

A = [1,1];
b = 4;

Establezca un punto inicial [1,1] y resuelva el problema de consecución de metas. Solicite el valor de la función objetivo.

x0 = [1,1];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

fval = 2×1

    3.1484
    6.1484

Los valores de la función objetivo son superiores a la meta, lo que significa que fgoalattain no satisface la meta.

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6], la ponderación es [1,1] y la restricción lineal es x1+x24.

Cree la función objetivo, la meta y la ponderación.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Cree las matrices de restricciones lineales A y b que representan A*x <= b.

A = [1,1];
b = 4;

Establezca un punto inicial [1,1] y resuelva el problema de consecución de metas. Solicite el valor de la función objetivo, el factor de consecución, el indicador de salida, la estructura de salida y los multiplicadores de Lagrange.

x0 = [1,1];
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

fval = 2×1

    3.1484
    6.1484

attainfactor = 0.1484
exitflag = 4
output = struct with fields:
         iterations: 6
          funcCount: 29
       lssteplength: 1
           stepsize: 4.1023e-13
          algorithm: 'active-set'
      firstorderopt: []
    constrviolation: 6.6663e-13
            message: 'Local minimum possible. Constraints satisfied....'

lambda = struct with fields:
         lower: [2x1 double]
         upper: [2x1 double]
         eqlin: [0x1 double]
      eqnonlin: [0x1 double]
       ineqlin: 0.5394
    ineqnonlin: [0x1 double]

El valor positivo de attainfactor indica que no se alcanzan las metas; también se puede comprobar comparando fval con goal.

El valor lambda.ineqlin es distinto de cero, lo que indica que la desigualdad lineal restringe la solución.

La función objetivo es

F(x)=[2+x-p125+x-p22/4].

Aquí, p_1 = [2,3] y p_2 = [4,1]. La meta es [3,6] y la ponderación inicial es [1,1].

Cree la función objetivo, la meta y la ponderación inicial.

p_1 = [2,3];
p_2 = [4,1];
fun = @(x)[2 + norm(x-p_1)^2;5 + norm(x-p_2)^2/4];
goal = [3,6];
weight = [1,1];

Establezca la restricción lineal x1+x24.

A = [1 1];
b = 4;

Resuelva el problema de consecución de metas a partir del punto x0 = [1 1].

x0 = [1 1];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0694    1.9306

fval = 2×1

    3.1484
    6.1484

Cada componente de fval está por encima del componente correspondiente de goal, lo que indica que no se han alcanzado las metas.

Aumente la importancia de satisfacer la primera meta estableciendo weight(1) en un valor menor.

weight(1) = 1/10;
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0115    1.9885

fval = 2×1

    3.0233
    6.2328

Ahora el valor de fval(1) está mucho más cerca de goal(1), mientras que fval(2) está más lejos de goal(2).

Cambie goal(2) a 7, que está por encima de la solución actual. La solución cambia.

goal(2) = 7;
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    1.9639    2.0361

fval = 2×1

    2.9305
    6.3047

Ambos componentes de fval son menores que los componentes correspondientes de goal. Sin embargo, fval(1) está mucho más cerca de goal(1) que fval(2) de goal(2). Una ponderación más pequeña tiene más probabilidades de hacer que su componente sea casi satisfecho cuando las metas no pueden alcanzarse, pero hace que el grado de superación sea menor cuando la meta puede alcanzarse.

Cambie las ponderaciones para que sean iguales. Los resultados de fval tienen la misma distancia respecto a sus metas.

weight(2) = 1/10;
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    1.7613    2.2387

fval = 2×1

    2.6365
    6.6365

Las restricciones pueden impedir que los resultados de fval se aproximen por igual a las metas. Por ejemplo, establezca un límite superior de 2 en x(2).

ub = [Inf,2];
lb = [];
Aeq = [];
beq = [];
[x,fval] = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
Local minimum possible. Constraints satisfied.

fgoalattain stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

    2.0000    2.0000

fval = 2×1

    3.0000
    6.2500

En este caso, fval(1) alcanza su meta exactamente, pero fval(2) es menor que su meta.

Argumentos de entrada

contraer todo

Funciones objetivo, especificadas como un identificador de función o un nombre de función. fun es una función que acepta un vector x y devuelve un vector F, con las funciones objetivo evaluadas en x. Puede especificar la función fun como un identificador de función para un archivo de función:

x = fgoalattain(@myfun,x0,goal,weight)

donde myfun es una función de MATLAB® como

function F = myfun(x)
F = ...         % Compute function values at x.

fun también puede ser un identificador de función para una función anónima.

x = fgoalattain(@(x)sin(x.*x),x0,goal,weight);

fgoalattain pasa x a la función objetivo y a todas las funciones de restricción no lineales en forma de argumento x0. Por ejemplo, si x0 es un arreglo de 5 por 3, fgoalattain pasa x a fun como un arreglo de 5 por 3. Sin embargo, fgoalattain multiplica las matrices de restricción lineales A o Aeq por x después de convertir x en el vector columna x(:).

Para que una función objetivo esté lo más cerca posible de un valor meta (es decir, que no sea mayor ni menor), utilice optimoptions para establecer la opción EqualityGoalCount en el número de objetivos necesarios para estar en el entorno de los valores meta. Se deben hacer particiones de tales objetivos en los primeros elementos del vector F devuelto por fun.

Suponga que el gradiente de la función objetivo también se puede calcular y la opción SpecifyObjectiveGradient es true, tal y como se establece en:

options = optimoptions('fgoalattain','SpecifyObjectiveGradient',true)

En este caso, la función fun debe devolver, en el segundo argumento de salida, el valor del gradiente G (una matriz) en x. El gradiente consiste en la derivada parcial dF/dx de cada F en el punto x. Si F es un vector de longitud m y x tiene una longitud n, donde n es la longitud de x0, entonces el gradiente G de F(x) es una matriz de n por m donde G(i,j) es la derivada parcial de F(j) con respecto a x(i) (es decir, la j-ésima columna de G es el gradiente de la j-ésima función objetivo F(j)).

Nota

Establecer SpecifyObjectiveGradient en true solo es eficaz cuando el problema no tiene restricciones no lineales o cuando el problema tiene una restricción no lineal con SpecifyConstraintGradient establecido en true. Internamente, el objetivo se pliega en las restricciones, por lo que el solver necesita ambos gradientes (objetivo y restricción) suministrados con el fin de evitar estimar un gradiente.

Tipos de datos: char | string | function_handle

Punto inicial, especificado como un vector real o un arreglo real. Los solvers utilizan el número de elementos en x0 y el tamaño de x0 para determinar el número y el tamaño de las variables que fun acepta.

Ejemplo: x0 = [1,2,3,4]

Tipos de datos: double

Meta que alcanzar, especificada como un vector real. fgoalattain intenta encontrar el multiplicador más pequeño γ que hace que estas desigualdades se cumplan para todos los valores de i en la solución x:

Fi(x)goaliweightiγ.

Suponiendo que weight es un vector positivo:

  • Si el solver encuentra un punto x que alcanza simultáneamente todas las metas, el factor de consecución γ es negativo y las metas se superan.

  • Si el solver no encuentra un punto x que alcance simultáneamente todas las metas, el factor de consecución γ es positivo y las metas no se alcanzan.

Ejemplo: [1 3 6]

Tipos de datos: double

Factor de consecución relativo, especificado como un vector real. fgoalattain intenta encontrar el multiplicador más pequeño γ que hace que estas desigualdades se cumplan para todos los valores de i en la solución x:

Fi(x)goaliweightiγ.

Cuando los valores de goal son todos distintos de cero, para garantizar el mismo porcentaje de consecución insuficiente o excesiva de las metas activas, establezca weight en abs(goal). (Los objetivos activos son el conjunto de objetivos que constituyen barreras para seguir mejorando las metas en la solución).

Nota

Poner a cero un componente del vector weight hace que la restricción de meta correspondiente se trate como una restricción rígida y no como una restricción de meta. Un método alternativo para establecer una restricción rígida es utilizar el argumento de entrada nonlcon.

Cuando weight es positivo, fgoalattain intenta que las funciones objetivo sean inferiores a los valores meta. Para que las funciones objetivo sean mayores que los valores meta, establezca weight para que sea negativo en lugar de positivo. Para ver algunos efectos de las ponderaciones en una solución, consulte Efectos de las ponderaciones, las metas y las restricciones en la consecución de metas.

Para que una función objetivo se acerque lo más posible a un valor meta, utilice la opción EqualityGoalCount y especifique el objetivo como primer elemento del vector devuelto por fun (consulte fun y options). Para ver un ejemplo, consulte Multi-Objective Goal Attainment Optimization.

Ejemplo: abs(goal)

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como una matriz real. A es una matriz de M por N, donde M es el número de desigualdades y N es el número de variables (número de elementos de x0). Para problemas grandes, pase A como una matriz dispersa.

A codifica las M desigualdades lineales

A*x <= b,

donde x es el vector columna de N variables x(:) y b es un vector columna con M elementos.

Por ejemplo, considere estas desigualdades:

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

Especifique las desigualdades introduciendo las siguientes restricciones.

A = [1,2;3,4;5,6];
b = [10;20;30];

Ejemplo: Para especificar que los componentes de x suman 1 o menos, utilice A = ones(1,N) y b = 1.

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como un vector real. b es un vector de M elementos relacionado con la matriz A. Si pasa b como un vector fila, los solvers convierten internamente b en el vector columna b(:). Para problemas grandes, pase b como un vector disperso.

b codifica las M desigualdades lineales

A*x <= b,

donde x es el vector columna de N variables x(:) y A es una matriz de tamaño M por N.

Por ejemplo, considere estas desigualdades:

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.

Especifique las desigualdades introduciendo las siguientes restricciones.

A = [1,2;3,4;5,6];
b = [10;20;30];

Ejemplo: Para especificar que los componentes de x suman 1 o menos, utilice A = ones(1,N) y b = 1.

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como una matriz real. Aeq es una matriz de Me por N, donde Me es el número de igualdades y N es el número de variables (número de elementos de x0). Para problemas grandes, pase Aeq como una matriz dispersa.

Aeq codifica las Me igualdades lineales

Aeq*x = beq,

donde x es el vector columna de N variables x(:) y beq es un vector columna con Me elementos.

Por ejemplo, considere estas desigualdades:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,

Especifique las desigualdades introduciendo las siguientes restricciones.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Ejemplo: Para especificar que los componentes de x suman 1, utilice Aeq = ones(1,N) y beq = 1.

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como un vector real. beq es un vector de Me elementos relacionado con la matriz Aeq. Si pasa beq como un vector fila, los solvers convierten internamente beq en el vector columna beq(:). Para problemas grandes, pase beq como un vector disperso.

beq codifica las Me igualdades lineales

Aeq*x = beq,

donde x es el vector columna de N variables x(:) y Aeq es una matriz de tamaño Me por N.

Por ejemplo, considere estas igualdades:

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.

Especifique las igualdades introduciendo las siguientes restricciones.

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Ejemplo: Para especificar que los componentes de x suman 1, utilice Aeq = ones(1,N) y beq = 1.

Tipos de datos: double

Límites inferiores, especificados como un vector real o un arreglo real. Si el número de elementos en x0 es igual al número de elementos en lb, entonces lb especifica que

x(i) >= lb(i) para todo i.

Si numel(lb) < numel(x0), entonces lb especifica que

x(i) >= lb(i) para 1 <= i <= numel(lb).

Si lb tiene menos elementos que x0, los solvers emiten una advertencia.

Ejemplo: Para especificar que todos los componentes de x son positivos, utilice lb = zeros(size(x0)).

Tipos de datos: double

Límites superiores, especificados como un vector real o un arreglo real. Si el número de elementos en x0 es igual al número de elementos en ub, entonces ub especifica que

x(i) <= ub(i) para todo i.

Si numel(ub) < numel(x0), entonces ub especifica que

x(i) <= ub(i) para 1 <= i <= numel(ub).

Si ub tiene menos elementos que x0, los solvers emiten una advertencia.

Ejemplo: Para especificar que todos los componentes de x son menores que 1, utilice ub = ones(size(x0)).

Tipos de datos: double

Límites no lineales, especificados como un identificador de función o un nombre de función. nonlcon es una función que acepta un vector o arreglo x y devuelve dos arreglos, c(x) y ceq(x).

  • c(x) es el arreglo de restricciones de desigualdad no lineales de x. fgoalattain intenta satisfacer

    c(x) <= 0 for all entries of c.

  • ceq(x) es el arreglo de restricciones de igualdad no lineales de x. fgoalattain intenta satisfacer

    ceq(x) = 0 for all entries of ceq.

Por ejemplo:

x = fgoalattain(@myfun,x0,...,@mycon)

donde mycon es una función de MATLAB como la siguiente:

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.

Suponga que los gradientes de las restricciones también pueden calcularse y la opción SpecifyConstraintGradient es true, según establece:

options = optimoptions('fgoalattain','SpecifyConstraintGradient',true)

En este caso, la función nonlcon también debe devolver, en el tercer y el cuarto argumentos de salida, GC, el gradiente de c(x) y GCeq, el gradiente de ceq(x). Consulte Restricciones no lineales para obtener una explicación de cómo "condicionar" los gradientes para usarlos en solvers que no aceptan gradientes suministrados.

Si nonlcon devuelve un vector c de m componentes y x tiene longitud n, donde n es la longitud de x0, el gradiente GC de c(x) es una matriz de n por m, donde GC(i,j) es la derivada parcial de c(j) con respecto a x(i) (es decir, la j-ésima columna de GC es el gradiente de la j-ésima restricción de desigualdad c(j)). Del mismo modo, si ceq tiene p componentes, el gradiente GCeq de ceq(x) es una matriz de n por p, donde GCeq(i,j) es la derivada parcial de ceq(j) con respecto a x(i) (es decir, la j-ésima columna de GCeq es el gradiente de la j-ésima restricción de igualdad ceq(j)).

Nota

Configurar SpecifyConstraintGradient como true solo es efectivo cuando SpecifyObjectiveGradient se establece en true. Internamente, el objetivo se pliega en la restricción, por lo que el solver necesita ambos gradientes (objetivo y restricción) suministrados con el fin de evitar estimar un gradiente.

Nota

Dado que las funciones de Optimization Toolbox™ solo aceptan entradas de tipo double, las funciones objetivo y de restricción no lineal suministradas por el usuario deben devolver salidas de tipo double.

Consulte Pasar parámetros adicionales para obtener una explicación de cómo parametrizar la función de restricción no lineal nonlcon, si es necesario.

Tipos de datos: char | function_handle | string

Opciones de optimización, especificadas como la salida de optimoptions o una estructura como la que devuelve optimset.

Algunas opciones no aparecen en la visualización optimoptions. Estas opciones se muestran en cursiva en la siguiente tabla. Para obtener más detalles, consulte Consultar las opciones de optimización.

Para obtener más información sobre las opciones que tienen nombres distintos para optimset, consulte Nombres de opciones actuales y antiguos.

OpciónDescripción
ConstraintTolerance

Tolerancia de terminación en la vulneración de restricciones, un escalar positivo. La opción predeterminada es 1e-6. Consulte Tolerancias y criterios de detención.

Para optimset, el nombre es TolCon.

Diagnóstico

Visualización de información de diagnóstico sobre la función que se desea minimizar o resolver. Las opciones son 'on' u 'off' (que es la opción predeterminada).

DiffMaxChange

Cambio máximo en variables para gradientes de diferencias finitas (un escalar positivo). La opción predeterminada es Inf.

DiffMinChange

Cambio mínimo en variables para gradientes de diferencias finitas (un escalar positivo). La opción predeterminada es 0.

Display

Nivel de visualización (consulte Visualización iterativa):

  • 'off' o 'none' no muestran salida alguna.

  • 'iter' muestra la salida en cada iteración y emite el mensaje de salida predeterminado.

  • 'iter-detailed' muestra la salida en cada iteración y emite el mensaje de salida técnico.

  • 'notify' solo muestra la salida si la función no converge y emite el mensaje de salida predeterminado.

  • 'notify-detailed' solo muestra la salida si la función no converge y emite el mensaje de salida técnico.

  • 'final' (predeterminada) solo muestra la salida final y emite el mensaje de salida predeterminado.

  • 'final-detailed' solo muestra la salida final y emite el mensaje de salida técnico.

EqualityGoalCount

Número de objetivos requeridos para que el objetivo fun sea igual a la meta goal (un entero no negativo). Deben realizarse particiones de los objetivos en los primeros elementos de F. La opción predeterminada es 0. Para ver un ejemplo, consulte Multi-Objective Goal Attainment Optimization.

Para optimset, el nombre es GoalsExactAchieve.

FiniteDifferenceStepSize

Factor de tamaño de paso de escalar o vector para diferencias finitas. Cuando establece FiniteDifferenceStepSize en un vector v, las diferencias finitas progresivas delta son

delta = v.*sign′(x).*max(abs(x),TypicalX);

, donde sign′(x) = sign(x) excepto sign′(0) = 1. Las diferencias finitas centrales son

delta = v.*max(abs(x),TypicalX);

Un escalar FiniteDifferenceStepSize se expande a un vector. La opción predeterminada es sqrt(eps) para diferencias finitas progresivas y eps^(1/3) para diferencias finitas centrales.

Para optimset, el nombre es FinDiffRelStep.

FiniteDifferenceType

Tipo de diferencias finitas utilizadas para estimar gradientes, ya sea 'forward' (opción predeterminada) o 'central' (centradas). La opción 'central' requiere el doble de evaluaciones de función, pero suele ser más precisa.

El algoritmo respeta escrupulosamente los límites cuando estima ambos tipos de diferencias finitas. Por ejemplo, podría dar un paso regresivo, en lugar de uno progresivo, para evitar realizar la evaluación en un punto fuera de los límites.

Para optimset, el nombre es FinDiffType.

FunctionTolerance

Tolerancia de terminación en el valor de la función (un escalar positivo). La opción predeterminada es 1e-6. Consulte Tolerancias y criterios de detención.

Para optimset, el nombre es TolFun.

FunValCheck

Comprobación que indica si los valores de la función objetivo y de las restricciones son válidos. 'on' muestra un error cuando la función objetivo o las restricciones devuelven un valor complejo, Inf o NaN. La opción predeterminada 'off' no muestra ningún error.

MaxFunctionEvaluations

Número máximo de evaluaciones de función permitidas (un entero positivo). La opción predeterminada es 100*numberOfVariables. Consulte Tolerancias y criterios de detención y Iteraciones y recuentos de la función.

Para optimset, el nombre es MaxFunEvals.

MaxIterations

Número máximo de iteraciones permitidas (un entero positivo). La opción predeterminada es 400. Consulte Tolerancias y criterios de detención y Iteraciones y recuentos de la función.

Para optimset, el nombre es MaxIter.

MaxSQPIter

Número máximo de iteraciones SQP permitidas (un entero positivo). La opción predeterminada es 10*max(numberOfVariables, numberOfInequalities + numberOfBounds).

MeritFunction

Si esta opción se establece en 'multiobj' (el valor predeterminado), use la función de mérito de consecución de metas. Si esta opción se establece en 'singleobj' use la función de mérito fmincon.

OptimalityTolerance

Tolerancia de terminación en la optimalidad de primer orden (un escalar positivo). La opción predeterminada es 1e-6. Consulte Medida de optimalidad de primer orden.

Para optimset, el nombre es TolFun.

OutputFcn

Una o varias funciones definidas por el usuario a las que una función de optimización llame en cada iteración. Pase un identificador de función o un arreglo de celdas de identificadores de función. La opción predeterminada es ninguno ([]). Consulte Sintaxis de función de salida y función de gráfica.

PlotFcn

Gráficas que muestran varias medidas de progreso mientras se ejecuta el algoritmo. Seleccione una de las gráficas predefinidas o escriba la suya propia. Pase un nombre, identificador de función o arreglo de celdas de nombres o identificadores de función. Para funciones de gráfica personalizadas, pase identificadores de función. La opción predeterminada es ninguno ([]).

  • 'optimplotx' representa el punto actual.

  • 'optimplotfunccount' representa el recuento de la función.

  • 'optimplotfval' representa los valores de la función objetivo.

  • 'optimplotconstrviolation' representa la vulneración de restricciones máxima.

  • 'optimplotstepsize' representa el tamaño de paso.

Las funciones de gráfica personalizadas utilizan la misma sintaxis que las funciones de salida. Consulte Funciones de salida para Optimization Toolbox y Sintaxis de función de salida y función de gráfica.

Para optimset, el nombre es PlotFcns.

RelLineSrchBnd

Límite relativo (un valor de escalar no negativo real) de la longitud de paso de búsqueda de recta, tal que el desplazamiento total en x satisface x(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|). Esta opción permite controlar la magnitud de los desplazamientos de x cuando el solver dé pasos demasiado grandes. La opción predeterminada es ninguno ([]).

RelLineSrchBndDuration

Número de iteraciones para el cual debe estar activo el límite que se especifica en RelLineSrchBnd. La opción predeterminada es 1.

SpecifyConstraintGradient

Gradiente para las funciones de restricción no lineales definidas por el usuario. Cuando esta opción se establece en true, fgoalattain espera que la función de restricción tenga cuatro salidas, según se describe en nonlcon. Cuando esta opción se establece en false (el valor predeterminado), fgoalattain estima los gradientes de las restricciones no lineales mediante diferencias finitas.

Para optimset, el nombre es GradConstr y los valores son 'on' u 'off'.

SpecifyObjectiveGradient

Gradiente para la función objetivo definida por el usuario. Consulte la descripción de fun para ver cómo definir el gradiente. Establezca esta opción en true para hacer que fgoalattain utilice un gradiente definido por el usuario de la función objetivo. La opción predeterminada, false, hace que fgoalattain estime los gradientes utilizando diferencias finitas.

Para optimset, el nombre es GradObj y los valores son 'on' u 'off'.

StepTolerance

Tolerancia de terminación en x (un escalar positivo). La opción predeterminada es 1e-6. Consulte Tolerancias y criterios de detención.

Para optimset, el nombre es TolX.

TolConSQP

Tolerancia de terminación en la vulneración de restricciones SQP de iteración interior (un escalar positivo). La opción predeterminada es 1e-6.

TypicalX

Valores x típicos. El número de elementos en TypicalX es igual al número de elementos en x0, el punto de inicio. El valor predeterminado es ones(numberofvariables,1). La función fgoalattain utiliza TypicalX para escalar las diferencias finitas para la estimación de gradientes.

UseParallel

Indicación de computación paralela. Cuando true, fgoalattain estima gradientes en paralelo. La opción predeterminada es false. Consulte Computación paralela.

Ejemplo: optimoptions('fgoalattain','PlotFcn','optimplotfval')

Estructura de problema, especificada como una estructura con los campos de esta tabla.

Nombre de campoEntrada

objective

Función objetivo fun

x0

Punto inicial para x

goal

Metas que se desea alcanzar

weight

Factores de importancia relativa de las metas

Aineq

Matriz para restricciones de desigualdad lineales

bineq

Vector para restricciones de desigualdad lineales

Aeq

Matriz para restricciones de igualdad lineales

beq

Vector para restricciones de igualdad lineales
lbVector de límites inferiores
ubVector de límites superiores

nonlcon

Función de restricción no lineal

solver

'fgoalattain'

options

Opciones creadas con optimoptions

Debe proporcionar al menos los campos objective, x0, goal, weight, solver y options en la estructura problem.

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un vector real o un arreglo real. El tamaño de x es el mismo que el tamaño de x0. Habitualmente, x es una solución local al problema cuando exitflag es positivo. Para obtener información sobre la calidad de la solución, consulte Cuando el solver tiene éxito.

Valores de la función objetivo en la solución, devueltos como un arreglo real. Por lo general, fval = fun(x).

Factor de consecución, devuelto como un número real. attainfactor contiene el valor de γ en la solución. Si attainfactor es negativo, las metas se han superado; si attainfactor es positivo, las metas no se han alcanzado. Consulte goal.

Razón por la que fgoalattain se ha detenido, devuelta como un entero.

1

La función ha convergido a una solución x

4

La magnitud de la dirección de búsqueda fue inferior a la tolerancia especificada y la vulneración de la restricción fue inferior a options.ConstraintTolerance

5

La magnitud de la derivada direccional fue inferior a la tolerancia especificada y la vulneración de la restricción fue inferior a options.ConstraintTolerance

0

El número de iteraciones superó options.MaxIterations o el número de evaluaciones de función superó options.MaxFunctionEvaluations

-1

Detenido por una función de salida o una función de gráfica

-2

No se ha encontrado ningún punto factible.

Información sobre el proceso de optimización, devuelta como estructura con los campos de esta tabla.

iterations

Número de iteraciones realizadas

funcCount

Número de evaluaciones de función

lssteplength

Tamaño del paso de búsqueda de recta relativo a la dirección de búsqueda

constrviolation

Máximo de funciones de restricción

stepsize

Longitud del último desplazamiento en x

algorithm

Algoritmo de optimización utilizado

firstorderopt

Medida de optimalidad de primer orden

message

Mensaje de salida

Multiplicadores de Lagrange en la solución, devueltos como una estructura con los campos de esta tabla.

lower

Límites inferiores que corresponden a lb

upper

Límites superiores que corresponden a ub

ineqlin

Desigualdades lineales que corresponden a A y b

eqlin

Igualdades lineales que corresponden a Aeq y beq

ineqnonlin

Desigualdades no lineales que corresponden a c en nonlcon

eqnonlin

Igualdades no lineales que corresponden a ceq en nonlcon

Algoritmos

Para obtener una descripción del algoritmo fgoalattain y un análisis de los conceptos de consecución de metas, consulte Algorithms.

Funcionalidad alternativa

App

La tarea Optimize de Live Editor proporciona una interfaz visual para fgoalattain.

Capacidades ampliadas

Historial de versiones

Introducido antes de R2006a